Knowledge (XXG)

Extensible Embeddable Language

Source 📝

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:)

Index

Paradigm
Multi-paradigm
scripting
imperative
functional
object-oriented
Designed by
Stable release
Typing discipline
Dynamic
OS
Cross-platform
License
GNU Lesser General Public License
Filename extensions
eel.olofson.net
Lua
C
Pascal
scripting
realtime systems
platform independent
programming language
Free and Open Source
game
Kobo Deluxe
SDL
X11
XKobo
embedded

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.