goer@SOPHIST.UCHICAGO.EDU (Richard Goerwitz) (02/16/90)
> unfortunately, i haven't yet gathered enough external funding and/or > academic rank to spend much time on development and distribution of > my real-time derivative of Icon, Conicon. ^^^^^ Did you really think you could toss this one off without being asked for more information? :-) What is Conicon? -Richard L. Goerwitz goer%sophist@uchicago.bitnet goer@sophist.uchicago.edu rutgers!oddjob!gide!sophist!goer
kelvin@ASTRO.CS.IASTATE.EDU (02/16/90)
Conicon is a contraction for concurrent Icon. Conicon is designed to
provide the high-level power of Icon to real-time programmers. The
implementation of Conicon differs somewhat from that of Icon. In particular,
we use a special real-time garbage collection algorithm designed in part
by me, and a different virtual machine encoding which allows real-time
response to interrupts (certain machine instructions in Icon's virtual
machine represent potentially unbounded amounts of computation. Since
it is not possible to switch contexts in the middle of executing a particular
instruction, the worst-case time required to execute a virtual machine
instruction represents a lower bound on the time required to respond to
a high-priority interrupt.)
Also, Conicon provides several new (and different) programming paradigms:
1) The stream data type represents an unbounded sequence of values.
Generally, you can treat this like a pipe from a concurrent process,
or as an I/O connection to the outside world (to A/D converters,
keyboards, terminals, modems, etc...). In Conicon, string scanning
is replaced with stream scanning. The integration is, I think, fairly
clean and natural. Streams are described more thoroughly in the
paper mentioned in my earlier mail:
A Stream Data Type that Supports Goal-Directed Pattern Matching on
Unbounded Sequences of Values - Kelvin Nilsen
Computer Languages, Vol. 15, No. 1, Jan. 90.
I can provide reprints to anyone who is interested in this.
2) Conicon supports concurrent processes. These processes are
spawned in one of two ways. First, Icon's create operator serves
in Conicon to create a concurrent process instead of creating
a coexpression. A stream which represents the sequence of values
generated by the spawned expression is automatically created when
the process is spawned. Second, Conicon introduces yet another
operator: binary !, which is interpreted as "concurrent alternation."
For example,
every write(1 to 3 ! 5 to 7)
might output the sequence:
5, 6, 1, 2, 3, 7
There are a variety of useful programming techniques that can be
based on the concurrent alternation operator. These techniques,
and other aspects of concurrency in Conicon are discussed more
thoroughly in a paper submitted to Software -- Practice & Experience.
We have not yet heard back from the referees. If anyone would like
to see a draft, please send me mail...