Are you an EPFL student looking for a semester project?
Work with us on data science and visualisation projects, and deploy your project as an app on top of Graph Search.
Io is a pure object-oriented programming language inspired by Smalltalk, Self, Lua, Lisp, Act1, and NewtonScript. Io has a prototype-based object model similar to the ones in Self and NewtonScript, eliminating the distinction between instance and class. Like Smalltalk, everything is an object and it uses dynamic typing. Like Lisp, programs are just data trees. Io uses actors for concurrency. Remarkable features of Io are its minimal size and openness to using external code resources. Io is executed by a small, portable virtual machine. The language was created by Steve Dekorte in 2002, after trying to help a friend, Dru Nelson, with his language, Cel. He found out that he really didn't know much about how languages worked, and set out to write a tiny language to understand the problems better. Io's goal is to explore conceptual unification and dynamic languages, so the tradeoffs tend to favor simplicity and flexibility over performance. Pure object-oriented based on prototypes Code-as-data / homoiconic Lazy evaluation of function parameters Higher-order functions Introspection, reflection and metaprogramming Actor-based concurrency Coroutines Exception handling Incremental garbage collecting supporting weak links Highly portable DLL/shared library dynamic loading on most platforms Small virtual machine In its simplest form, it is composed of a single identifier: doStuff Assuming the above doStuff is a method, it is being called with zero arguments and as a result, explicit parentheses are not required. If doStuff had arguments, it would look like this: doStuff(42) Io is a message passing language, and since everything in Io is a message (excluding comments), each message is sent to a receiver. The above example demonstrates this well, but not fully. To describe this point better, let's look at the next example: System version The above example demonstrates message passing in Io; the "version" message is sent to the "System" object. Operators are a special case where the syntax is not as cut-and-dried as the above examples.
Rachid Guerraoui, Naama Ben David
Anastasia Ailamaki, Georgios Psaropoulos
Martin Odersky, Nicolas Alexander Stucki