The earliest language for programming the connection machine had been a dialect of Common LISP called *LISP .
*LISP programs were executed by the front-end, and referred to memory in the Connection Machine processors through LISP objects called pvars (parallel variables). These objects contained information about a field in the Connection Machine memory where some contents were held, together with type information. Values were stored one per PE. So a pvar was essentially like a simple distributed array (as in CFD, for instance). However the point of view was slightly different.
The names of instructions that return pvars as their values ended with !! (supposed to be suggestive of two parallel lines). The names of other special parallel operations (which did not essentially return a pvar) started with *. *LISP operations could be carried out in a subset of the CM processors. The currently selected set was specified by using special forms such as *all, *when, *cond and *if.
Communication between processors had to specified explicitly with suitable pvar functions. A nearest neighbour update might look like
(*set a (+!! (pref-grid-relative!! a (!! 0) (!! -1)) (pref-grid-relative!! a (!! 0) (!! 1)) (pref-grid-relative!! a (!! -1) (!! 0)) (pref-grid-relative!! a (!! 1) (!! 0)) ))where pref-grid-relative!! is a kind of shift operation.