Programming-language Design

[Revised 2010-08-27]

In 1981, I read the special issue of Byte Magazine on the Smalltalk 80 programming language. Wow. Many very cool ideas there.

Object-oriented programming!

Overlapping windows!

Mice!

"Don't mode me in!"

Keyword syntax!

Transparent persistency!

(orthogonal persistency, orthogonal persistence, transparent persistence)

Only, it turned out that the Smalltalk implementation described in Byte wasn't really transparently persistent in the way that I would like. You could save your image, but there was no finer transaction.

Eventually I learned about the GemStone database management system. GemStone implements "Smalltalk on a disk". It's almost transparent. However, you have to delimit your transactions explicitly.

The transactions for a transparently persistent system should be its interactions with the outside world.

I determined to search for a programming language suitable for transparent persistency.

Inspiration

  1. K. Kahn and Vijay A. Saraswat: "Actors as a special case of concurrent constraint (logic) programming" in SIGPLAN Notices , October, 1990. In this article, Kahn and Saraswat at least partially describe a programming language they call Janus. See the Wikipedia article (mostly by me as of 2009-11). The Janus language that the Kahn/Saraswat paper describes includes logical variables that have two aspects, called the asker and the teller , that denote, respectively, the right to query the value of the variable and the right to determine the value (or something about it). These rights can be passed around independently of each other.
  2. Magnus Carlsson and Thomas Hallgren: Fudgets — Purely Functional Processes with Applications to Graphical User Interfaces , 1998 Ph.D. Thesis. In their discussion of how it is possible in a purely functional language to merge unsynchronized streams of event signals from varous input sources, Carlsson and Hallgren refer to the concept of an oracle , a value passed into the language from the computing environment, that conceptually magically knows which event will arrive first. An unlimited supply of oracles suffices to merge streams of messages in the order of the messages' availability, without breaking referential transparency.

2010-02-03 — Imperatrix Mundi

Although I have thought of starting a development path toward using a pure functional language without logical variables, I have decided for the time being to concentrate on a variant that would have logical variables. Since binding a variable to a value has sort of an "imperative" flavor, the language can exhibit such a flavor while nevertheless having a declarative (even equational) explanation. To reflect this imperative flavor in a purely declarative language, I have reached for a name containing the same root as "imperative", and come up with "Imperatrix Mundi" from the name of the poem "Fortuna Imperatrix Mundi" from among the Carmina Burana .


-> Current musing