Iota is an XML-based concurrent programming language, designed by Dr. Gavin Bierman and Dr. Peter Sewell of the University of Cambridge Computer Laboratory. The iCare system is a compiler, interpreter, and runtime system for Iota, and was developed by Ewan Mellor in parallel with the design of the Iota language.
iCare is written in Java, and licenced under The MIT Licence.
The design of iCare is described in detail by Ewan's dissertation. Iota itself is discussed at the Iota home page, and in its corresponding paper and technical report.
Iota's most significant features are its support for XML manipulation and concurrent programming.
Iota incorporates XML as first-class data values. No APIs are needed to create XML values; they can be written verbatim in your code. For example, the following is valid Iota code:
<meaning of="life">7*6</meaning>
Iota provides the powerful facility of pattern
matching. This enables compact and highly readable code. The
following code accepts a piece of person markup as an argument
and returns its age attribute value:
fun getAge <person
age=a> => a;
Iota provides a high-level model of concurrency, using parallel execution and communication via named channels. Channels can be created and values can be send down or read from channels. Security is captured by restricting access to the name of a channel. This notion of concurrency is based on work on the π-calculus.
(** * A talk server. Listen on port 10000. Once someone connects, send * everything from stdio to that connection, and everything from that socket * to stdio. *) let val socket = Iota.IO.listen(10000) in (socket ?* fn x => Iota.stdio ! x) || (Iota.stdio ?* fn x => socket ! x) ; (** * A talk client. Connect to localhost, port 10000. Once connected, send * everything from stdio to that connection, and everything from that socket * to stdio. *) let val socket = Iota.IO.connect("localhost", 10000) in (socket ?* fn x => Iota.stdio ! x) || (Iota.stdio ?* fn x => socket ! x) ;