223:
As to the language design, the general idea is to strike a practical balance between power, ease of use and safety. The intention is to help avoiding many typical programming mistakes without resorting to overly wordy syntax or restricted functionality.
254:. This was a simple interpreter with very limited flow control, and a syntax that's quite different from that of current versions. This initial branch of EEL was first released in 2002, and is still used in Kobo Deluxe as of version 0.5.1.
577:
The VM uses "limbo lists" to keep track of intermediate objects created inside expressions and the like, which greatly simplifies exception handling, and eliminates the need for active reference counting in every single operation.
276:
was made, and the actual programming language EEL materialized. The first official release was in
January 2005. Since then, EEL has evolved slowly, driven mostly by the personal and professional needs of its author.
574:
The basic memory management method is reference counting, which allows automatic memory management with deterministic timing, without the need for concurrent garbage collection.
325:
and providing fully managed structured data types, EEL is "safe" in the sense that EEL programs should not be able to crash the virtual machine or the host application.
646:
257:
In
December 2003, EEL was split off into a stand-alone project and subject to a major rewrite, in order to be used for real time scripting in an
27:
137:
207:
with cycle rates in the kHz range, such as musical synthesizers and industrial control systems, but also aspires to be usable as a
232:
The first incarnation of EEL was in the form of a simple parser for structured audio definitions, used in the sound engine of the
651:
342:
322:
560:, which has a relatively high level instruction set designed to minimize instruction count and thus overhead. The EEL VM is
183:
641:
338:
299:
295:
82:
43:
175:
377:
367:
565:
243:
179:
265:
307:
39:
35:
506:; mrecurse1(10); print("Recursion test 2; Mutual Recursion with Function Reference:\n");
291:
233:
212:
208:
22:
606:
422:
311:
354:
239:
200:
144:
31:
199:) is a scripting and programming language in development by David Olofson. EEL is intended for
407:
561:
236:
132:
120:
251:
557:
397:
387:
315:
273:
258:
247:
204:
50:
125:
635:
303:
113:
108:
568:
446:
553:
269:
261:
475:
recurse(10); print("Recursion test 2; Mutual
Recursion:\n");
537:; mrrecurse1(10, mrr2); print(Recursion tests done.\n);
607:
Best of 2013: 31 Years On - Independent Gaming on the
Commodore 64
626:
306:
features. Other styles and paradigms of programming, such as
621:
290:
The language is not strictly designed for any particular
158:
609:
by James
Monkman on indiegames.com (December 20, 2013)
169:
153:
143:
131:
119:
107:
81:
59:
49:
21:
8:
16:
264:application. This is where the switch from
564:and "stackless", as in not relying on the
15:
360:Built-in structured data types, such as:
599:
591:Kobo Deluxe is an application of EEL.
471:arg recurse(arg - 1);
7:
514:print("arg = ", arg, "\n");
491:arg mrecurse2(arg);
487:print("arg = ", arg, "\n");
467:print("arg = ", arg, "\n");
88:0.3.6 / February 4, 2014
459:print("Recursion test 1:\n");
14:
552:EEL source code is compiled into
518:arg fn(arg, fn);
445:The following is an example of a
138:GNU Lesser General Public License
647:Free compilers and interpreters
435:print("Hello, world!\n");
400:of dynamically typed elements.
193:Extensible Embeddable Language
1:
533:mrrecurse1(arg - 1, fn);
351:Automatic memory management.
425:can be written as follows:
302:, through a minimal set of
300:prototype-based programming
296:object oriented programming
65:; 19 years ago
668:
571:for managing VM contexts.
174:
103:
77:
510:mrrecurse1(arg, fn)
502:mrecurse1(arg - 1);
321:As a result of avoiding
298:, or more specifically,
652:Free computer libraries
90:; 10 years ago
386:- fixed type numeric
627:Kobo Deluxe homesite
479:mrecurse2(arg);
318:are also supported.
292:programming paradigm
234:Free and Open Source
213:programming language
209:platform independent
642:Scripting languages
498:mrecurse2(arg)
483:mrecurse1(arg)
423:hello world program
341:(as opposed to raw
145:Filename extensions
60:First appeared
18:
355:Exception handling
463:recurse(arg)
455:main<args>
431:main<args>
408:associative array
189:
188:
109:Typing discipline
659:
610:
604:
211:general purpose
205:realtime systems
165:
162:
160:
98:
96:
91:
73:
71:
66:
51:Designed by
19:
667:
666:
662:
661:
660:
658:
657:
656:
632:
631:
618:
613:
605:
601:
597:
589:
584:
550:
545:
453:export function
443:
429:export function
419:
348:Dynamic typing.
331:
316:metaprogramming
294:, but supports
288:
283:
230:
221:
157:
99:
94:
92:
89:
69:
67:
64:
44:object-oriented
12:
11:
5:
665:
663:
655:
654:
649:
644:
634:
633:
630:
629:
624:
617:
616:External links
614:
612:
611:
598:
596:
593:
588:
585:
583:
580:
562:register based
549:
546:
529:(arg, fn)
451:
427:
418:
415:
414:
413:
412:
411:
401:
391:
381:
371:
358:
352:
349:
346:
335:
334:C-like syntax.
330:
327:
287:
284:
282:
279:
229:
226:
220:
217:
187:
186:
172:
171:
167:
166:
155:
151:
150:
147:
141:
140:
135:
129:
128:
126:Cross-platform
123:
117:
116:
111:
105:
104:
101:
100:
87:
85:
83:Stable release
79:
78:
75:
74:
61:
57:
56:
53:
47:
46:
28:Multi-paradigm
25:
13:
10:
9:
6:
4:
3:
2:
664:
653:
650:
648:
645:
643:
640:
639:
637:
628:
625:
623:
620:
619:
615:
608:
603:
600:
594:
592:
586:
581:
579:
575:
572:
570:
567:
563:
559:
556:for a custom
555:
547:
544:
540:
536:
532:
528:
524:
521:
517:
513:
509:
505:
501:
497:
494:
490:
486:
482:
478:
474:
470:
466:
462:
458:
454:
450:
448:
442:
438:
434:
430:
426:
424:
416:
409:
405:
402:
399:
395:
392:
389:
385:
382:
379:
375:
372:
369:
365:
362:
361:
359:
356:
353:
350:
347:
344:
340:
336:
333:
332:
328:
326:
324:
319:
317:
313:
309:
305:
301:
297:
293:
285:
280:
278:
275:
271:
267:
263:
260:
255:
253:
249:
245:
241:
238:
235:
227:
225:
218:
216:
214:
210:
206:
202:
198:
194:
185:
181:
177:
173:
170:Influenced by
168:
164:
156:
152:
148:
146:
142:
139:
136:
134:
130:
127:
124:
122:
118:
115:
112:
110:
106:
102:
86:
84:
80:
76:
62:
58:
55:David Olofson
54:
52:
48:
45:
41:
37:
33:
29:
26:
24:
20:
622:EEL homesite
602:
590:
582:Applications
576:
573:
551:
542:
538:
534:
530:
526:
522:
519:
515:
511:
507:
503:
499:
495:
492:
488:
484:
480:
476:
472:
468:
464:
460:
456:
452:
444:
440:
436:
432:
428:
421:The classic
420:
417:Example code
403:
393:
383:
373:
366:- immutable
363:
320:
304:syntax sugar
289:
256:
246:port of the
231:
222:
196:
192:
190:
587:Kobo Deluxe
266:interpreter
240:Kobo Deluxe
636:Categories
595:References
569:call stack
449:function:
376:- dynamic
339:references
329:Highlights
308:functional
219:Philosophy
95:2014-02-04
40:functional
36:imperative
548:Internals
527:procedure
508:procedure
496:procedure
481:procedure
477:procedure
461:procedure
447:recursive
201:scripting
32:scripting
554:bytecode
343:pointers
323:pointers
281:Features
270:compiler
262:rheology
259:embedded
161:.olofson
23:Paradigm
525:mrr2 =
374:dstring
337:Opaque
312:modular
286:General
228:History
154:Website
133:License
114:Dynamic
93: (
68: (
539:return
437:return
384:vector
378:string
368:string
364:string
184:Pascal
523:local
404:table
398:array
394:array
388:array
252:XKobo
250:game
242:, an
314:and
237:game
191:The
163:.net
70:2005
63:2005
541:0;
439:0;
268:to
248:X11
244:SDL
203:in
197:EEL
176:Lua
159:eel
149:eel
17:EEL
638::
558:VM
516:if
489:if
469:if
406:-
396:-
345:).
310:,
274:VM
215:.
182:,
178:,
121:OS
42:,
38:,
34:,
30::
566:C
543:}
535:}
531:{
520:}
512:{
504:}
500:{
493:}
485:{
473:}
465:{
457:{
441:}
433:{
410:.
390:.
380:.
370:.
357:.
272:/
195:(
180:C
97:)
72:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.