[comp.lang.icon] Conicon - What?!!

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...