2 a small programming language
6 simple, consistent syntax
7 everything is a dynamic message
8 code is data and runtime modifiable
9 all objects can be actors
12 bundled with official bindings
16 no statements (only expressions)
17 expressions are composed only of messages
18 supports lexically scoped blocks
19 objects can have multiple parents
28 compiles to: a *(2) *(b)
32 compiles to: setSlot(ÒaÓ, 2)
34 compiles to: updateSlot(ÒaÓ, 2)
43 a := if(b == 1, c, d) // conditions are expressions
51 someList := list(ÒaÓ, 2.3, ÒfooÓ)
52 someList foreach(i, v,
55 // foreach also works on Maps, Strings, Buffers, etc
58 foo := method(a, a + b) // object scoped
59 foo := block(a, a + b) // lexically scoped
63 variables are local by default
66 a := people select(person, person age < 30)
67 names := people map(i, person, person name)
72 sender doMessage(thisMessage argAt(0))
75 glChunk(glTranslated(1,2,3); glRectd(0,0,100,100))
78 Account := Object clone do(
80 deposit := method(amount,
81 balance = balance + amount
86 account := Account clone
87 account deposit(10.00)
88 writeln(Òbalance:Ó, account balance)
90 Everything is an Object
91 Number double := method(self * 2)
96 Number double := method(self * 2)
97 Number getSlot(ÒdoubleÓ) code
98 ==> Òmethod(self *(2))Ó
101 url := URL with(Òhttp://www.iolanguage.comÓ)
102 url fetch // sync message
103 f := url @fetch // future message
104 url @@fetch // async message
105 // futures auto-detect deadlocks
108 SGMLParser (supports XML and HTML)
109 Socket (async, libevent, supports async DNS)
110 Transparent Distributed Objects
111 Vector (supports SIMD/altivec)
121 Font (FreeType, caches in texture)
123 Ion user interface toolkit
133 osx, linux, bsd, irix
137 symbian, syllable, zeta
140 1.0 real soon now :-)
141 incremental transparent persistence
142 improved transparent distributed objects