||[Oct. 24th, 2008|07:48 am]
The Io programming language looks extremely interesting.
It's an ultra-minimal ultra-late-bound prototype-based object-oriented language. The minimalisim seems to scale: the example code written using the comically minimal core looks much the same as the real code found inside the tarball (e.g. OpenGL bindings). Io looks like an interesting candidate for hosting on the Cola system.
Here're a few things I find interesting about Io based on a very quick glance:
Perhaps knowledgeable readers could point out other features of interest?
- Objects are just collections of named slots and everything else is a message. To execute a method a
call object (activation record) is created that can produce the argument values on-demand, so the method can choose its own evaluation strategy. That means
if can evaluate its arguments specially whereas most code can simply evaluate left-to-right and store the values in named slots of the
call object for use during execution.
- Names are unified. Every name is resolved to a slot by depth-first search up the object-tree (parent pointers). The top-level object
Lobby includes slots with names like
Object, etc so the name search will always find these. So you don't need to distinguish the names of local variables, slots, classes, keywords, etc - these are all the same.
I'm in a very privileged position at the moment: I just asked Alan Kay what he thinks of letting the receiver of a message choose how/when/if the message's arguments are evaluated. He's strongly in favour and said that some Lisps had FEXPR variants that worked the same way (controlling evaluation with sane scoping) and it's a shame that macros as we know them won out in Common Lisp. He suggesting rereading what The Early History of Smalltalk
has to say about Smalltalk-72, his personal favourite of the Smalltalk family.
Takashi Yamamiya dug up a copy of a Smalltalk-72 implementation on top of Squeak
for me too.
Great working environment hereabouts :-)