As with most people, it seems, I first read about this in Raphael A. Finkel's book AdvancedProgrammingLanguageDesign, but he refers to (and uses examples from) R. L. Levien's paper "IO: A New Programming Notation", available at http://portal.acm.org/citation.cfm?id=70934&jmp=indexterms&dl=GUIDE&dl=ACM if you have an ACM membership. The language is also catalogued at http://www.kraml.at/stupid/io.html (BrokenLink; see http://web.archive.org/web/20030121155611/http://www.kraml.at/stupid/io.html), where there is a reference to what appears to be the sole implementation, Amalthea, available at http://www.guldheden.com/~sandin/amalthea.html . Io is based around the concept of continuation passing (see ContinuationExplanation and ContinuationPassingStyle), and there really isn't much more to it than that. For example if you look at this code tidbit write 5; write 6; terminate it looks fairly procedural. But what "write" actually takes as parameters is a number and a continuation. Thus, "5" is the first parameter, and "write 6; terminate" is the second parameter. "write" prints its first parameter and then invokes the continuation. If someone wants to expand on this explanation, feel free. ''Didn't Io have power loops? I must be misremembering.'' Yes you are. PowerLoops are just in the same chapter of APLD as Io's continuations ---- There is another, newer ProgrammingLanguage also called Io. See IoLanguage. ---- I wrote a page explaining the semantics of Io (as far as I understand them; I don't have access to the original paper) at http://canonical.org/~kragen/raph-io.html. ---- Thanks to my ACM Student membership (worth every dime!) I do have access. For starters, Io has a special syntax concerning "continuations" - actually, they're called "actions" in the paper, and they are the only control structure in the language - there are no functions, or procedures, they're actions. Anyway, if an action is the last argument to another action, it's written as: ; action whereas if it's not the last parameter, it's written as: (action) and, of course, there will be other parameters following. If you want to define an action the form is: operator''':''' action'''.''' I'm not sure how to get this language to do more serious output but it makes me want to find out. -- WaltRorieBaety ---- CategoryProgrammingLanguage