Acorn is a golden love child who inherits valuable features from many languages, such as:

Acorn is more than the sum of its borrowed features. It contributes a number of useful improvements:

Acorn is no franken-language, whose dissimilar limbs have been crudely sewn together. Its concise, consistent grammar is more like a pleasing cordial whose excess water has been boiled away, leaving behind a bouquet of flavors that mingle together in sweet harmony.

if you know its heritage languages, Acorn should feel conceptually and grammatically familiar. However, it does vary from their terms and grammar conventions here and there. For example:

Feature Comparison Chart

The following chart compares Acorn's features with equivalent features from Lua, Javascript and Ruby.

Acorn Lua Javascript Ruby
Core types
- Null
- Bool
- Integer
- Float

- Range
- Symbol
- Text
- List
- Index
- Type

- Method
- Closure
- Yielder

- nil (Nil)
- Boolean
- Number
- Number

(missing)
- String
- String
- Table
- Table
- Table (metatable)

- Function
- Closure
- Co-routine (thread)

- null / undefined
- Boolean
- Number
- Number

(missing)
- Symbol (ES6)
- String
- Array
- Map
- Object

- Function
- Closure
- Generator

- nil (NilClass)
- TrueClass / FalseClass
- Integer
- Float

- Range
- Symbol
- String
- Array
- Hash
- Class

- Method
- Proc
- Fiber
Text
- mutable
- Unicode indexing

- immutable
(no)

- immutable
- partial (16-bit)

- mutable
(no)
Dynamic Types
- classical inheritance
- prototypical inheritance
- multiple inheritance

(missing)
- prototypical inheritance
(missing)

(missing)
- prototypical inheritance
(missing)

- classical inheritance
(missing)
- multiple inheritance
Variables
- global: explicit
- local: explicit/implicit
- closure: explicit/implicit
- instance: explicit
- class: namespaced

- implicit
- explicit
- implicit
(missing)
(missing)

- implicit
- explicit/implicit
- implicit
- this.
- namespaced

- explicit
- implicit
- implicit
- explicit
- explicit
Assignment
- embedded/sequential
- parallel
- arithmetic

(missing)
- parallel
(missing)

- embedded/sequential
- parallel
- arithmetic/shift/logic

- embedded/sequential
- parallel
- arithmetic/logic
Property and Method Use
- [] indexing
- property get/set
- function call
- arithmetic methods
- method get/set
- calculated method call
- new constructor: +
- method chain/cascade

- [] (__index/__newindex)
property get/set
- function call
- arith/shift/bit methods
- method get
(missing)
- .new
- method chaining

- [] (arrays only)
- property get/set
- function call
- built-in arith/shift/bit
- method get
- computed property names
- 'new' constructor
- method chain

- [] method
- property get/set
- function call
- arithmetic/shift methods
- method get/set
- .method(name).call()
- 'new' constructor
- method chain
Method Definition
- first-class methods
- parameter defaults
- ... variable parameters
- block scope for locals
- multiple return values
- implicit return

first-class functions
(missing)
- ...
- block scope
- multiple return values
- explicit return

- first-class functions
- parameter defaults
- ...
- function scope
(missing)
- explicit return

- first-class methods
- parameter defaults
- *variable parameters
- method scope
- multiple return values
- implicit return
Closures
- bind by value
- explicit/implicit closures
- get/set capability

- bind by reference
- implicit closures
(missing)

- bind by reference
- implicit closures
(missing)

- bind by reference
- implicit closures
(missing)
Conditional Control
- <=> comparisons
- if block
- while block
- ~~ matching
- match block
- each block
- if/while/each clauses

- __eq, __lt, __le
- if block
- while block
(missing)
(missing)
- for block
(missing)

(missing)
- if block
- while block
(missing)
- switch block
- for block
(missing)

- <=> comparisons
- if block
- while block
- ~~ matching
- case block
- for block
- if/while modifiers
Content Handling
- this blocks
- build blocks
- this operators
- @ resource inclusion

(missing)
(missing)
(missing)
(missing)

(missing)
(missing)
(missing)
(missing)

(missing)
(missing)
(missing)
(missing)

_