Removed all code that uses OpenGL from Image.
[io/quag.git] / addons / Flux / samples / Slideshow / slides_oopsla.txt
blob1a461f79c94626a8bd99175c099e45c530235c3f
1 Io
2         a small programming language
4 overview
5         prototype-based
6         simple, consistent syntax
7         everything is a dynamic message
8         code is data and runtime modifiable
9         all objects can be actors
10         coroutines
11         futures 
12         bundled with official bindings
14 the language
15         no keywords
16         no statements (only expressions)
17         expressions are composed only of messages
18         supports lexically scoped blocks
19         objects can have multiple parents
21 message syntax
22         foo
23         foo(a)
24         foo(a, b)
26 operators
27         expression:   a * 2 * b
28         compiles to:  a *(2) *(b)
30 assignment
31         expression: a := 2
32         compiles to: setSlot(ÒaÓ, 2)
33         expression: a = 2
34         compiles to: updateSlot(ÒaÓ, 2)
36 loops
37         while(x < 10, ...)
38         for(i, 1, 10, ...)
39         loop(...)
40         10 repeatTimes(...)
42 conditions
43     a := if(b == 1, c, d) // conditions are expressions
44     if(a == b) then(
45             ...
46     ) elseif(...) then(
47             ...
48     )
50 enumeration
51         someList := list(ÒaÓ, 2.3, ÒfooÓ) 
52         someList foreach(i, v, 
53                 writeln(i, Ò : Ó, v)
54         )
55         // foreach also works on Maps, Strings, Buffers, etc
57 blocks and methods
58         foo := method(a, a + b) // object scoped
59         foo := block(a, a + b)  // lexically scoped
61 scoping
62         no globals 
63         variables are local by default
65 expressions
66         a := people select(person, person age < 30)
67         names := people map(i, person, person name)
69 "macro" example
70         glChunk := method(
71                 glPushMatrix
72                 sender doMessage(thisMessage argAt(0))
73                 glPopMatrix
74         )
75         glChunk(glTranslated(1,2,3); glRectd(0,0,100,100))
77 objects
78         Account := Object clone do(
79                 balance := 0
80                 deposit := method(amount,
81                         balance = balance + amount
82                 )
83         )
85 example
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)
92         100 double
93         ==> 200
95 introspection
96         Number double := method(self * 2)
97         Number getSlot(ÒdoubleÓ) code
98         ==> Òmethod(self *(2))Ó
100 concurrency
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
107 server bindings
108         SGMLParser (supports XML and HTML)
109         Socket (async, libevent, supports async DNS)
110         Transparent Distributed Objects
111         Vector (supports SIMD/altivec) 
112         Regex
113         SQLite3
114         MD5
115         Blowfish
116         CGI, URL
118 desktop bindings
119         OpenGL, GLU, GLUT
120         Audio (PortAudio)
121         Font (FreeType, caches in texture)
122         Movie (ffmpeg)
123         Ion user interface toolkit
125 collector
126         non-moving
127         tri-color
128         write-barrier
129         generational
131 platforms
132         unix
133             osx, linux, bsd, irix
134         windows
135             cygwin, mingw, msvc
136         other
137             symbian, syllable, zeta
139 next?
140         1.0 real soon now :-)
141         incremental transparent persistence
142         improved transparent distributed objects
143         docs for Ion
144         bug tracker
145         revision control
146         official wiki