As always, Acorn stands humbly on the shoulders of giants. Herewith, a sincere thank you to the genius and generosity of its open-source predecessors.


Lua's lightweight, but powerful architecture became an invaluable, quick-start foundation for the Acorn virtual machine. Although the implementation varies in many places, Lua's algorithms for memory and garbage collection, basic data structures, thread and stack management, and byte code compilation and interpretation are prominently utilized.

Acorn deviates from Lua in the way the upper architecture is more object-oriented than functional. Lua certainly opens the door to O-O with meta tables, and the dot operator. However, Acorn's object-oriented features are baked in deeper and more pervasively: with Methods, Types, and a core library that is Type-based rather than functional. A different set of byte-code op codes were needed to abstract efficiently away from data type and operator specific assumptions.

Some of the key differences from the Lua architecture include:

In a gift that keeps on giving, future implementations of Acorn may benefit from LuaJIT's architectural improvements for faster performance (due to just in time trace compilation of byte codes), easier C Library integration, and more efficient garbage collection (in version 3).


In addition to being inspired by how Ruby encodes Values, much of Acorn's object-oriented capabilities and core Types is heavily influenced by Ruby, including dynamic creation of types, mixins, and operators as implied methods. Acorn also offers various brevity features from Ruby, such as conditional postfix notation, interpolations, and the way all Acorn functions and methods return at least one value, often specified implicitly.

Acorn deliberately deviates from Ruby syntax regarding symbol literals ('' vs. :), anonymous functions (-> vs ||{}), table key-value pairs (: vs. ->), member selection (() vs. []), variable prefix conventions, and creating new instances, methods, and types. Ruby offers many features Acorn does not, such as closures, type coercion, and weak keys.

XML, JavaScript et al.

The Acorn builder syntax and Parts were designed to offer efficient specification of static content comparable to what one can do with XML or JSON (with syntactic deviation and tighter integration with Acorn's Type methods).

Acorn fulfills a similar Internet-savvy scripting role as JavaScript, but uses a syntax more similar to the Ruby-like Coffeescript than JavaScript. Like Coffeescript (and Python before it), Acorn uses line indentation to implicitly demark curly-braced code blocks.

Acorn incorporates key features inspired from jQuery, Xpath, as well as the two-way binding offered by various frameworks.