Clone this wiki locally
The design of Paws’ Nucleus, the design that will eventually be standardized and specified for Nucleus / interpreter implementations to follow, has gone through many periods of refinement and revision. We call these individual intermediate designs “stratum,” when referring to design specifics that were introduced or discarded at a particular point in the past.
When we have sufficiently refined the design and implemented it in several languages / environments to some extent, we will ratify the design into a formal specification for other implementations, and proceed to ensure each intermediate implementation previously produced properly adheres to the newly ratified specification. Thusly, the “last” stratum of the design is identical to the formal specification (i.e. “Paws Stratum 7” is identical to “Paws 1”, as opposed to “Paws 2”, assuming Strat 7 is the last phase of minor adjustments to the language.)
A brief, chronological history of the design of Paws.
The original Paws design. Characterized by conflation of Fullness and Nucleus interests; very complex “lookups” and inheritance designs, implicit intentions of much of the language to reside in nukespace.
The first major re-design, following suggestions of replacing much of the language’s core semantics (regarding, at the time, lists and lookups) with an objectspace formed of nested routines, wherein all structured data was code (à la lambda calculus.)
After major issues reconciling data-as-code with overall the goals of Paws, that entire design was discarded, and a return was made to the basics Strat 1 semantics
Much of the language was simplified from the original complex mess, and more evolved plans for a very ascetic “microkernel” architecture were laid out. Strat 3 saw much of the complexity of design and many of our flagship features ‘removed’ from the design, with plans to later implement them libside as a part of Fullness.
A brief flirtation with re-applying data-as-code to the newly simplified Strat 3 semantics. Also discarded.
An iterative re-design; tending towards the extremes of asceticism.
The most major change from Strat 3 to Strat 5 was the removal of routines as a nuketype, with intentions to implement them libside in terms of executions (our “continuation” datatype.) Involves major redesigns of almost every remaining element (as individually few in number as they may be of the Nuclear design.
Side-effected changes of that include a shift from “argumentative” to “coproduction” interface-design for Nuclear APIs, the removal of scope and variables of any form from the design (also to be implemented libside), and others.
Primarily replaced the old graph-touching “callers” machinery with a libside convention of “priming” executions for elective caller-passing.
Otherwise, only minor changes.
Replaced the complex “naughty”-based graph-climbing juxtaposition handler system with a more direct, and simple, system involving a mutable attribute of Things themselves.
Lost in the fog. Lots of architectural changes, but almost all of them minor by comparison to those coming earlier. Everything in the Nucleus solidifies into a coherent whole, we start looking for smaller, more specific bugs in the design we've put together.
In addition to more actual architectural changes, two major changes to the project itself:
- Yet again, major chunks of as-of-yet vague parts of the design were intentionally segregated and put off, so that the parts that are well-understood could be nailed down and implemented. This includes most of the ‘interesting’ stuff: distribution, insanities, time-travel, …
- Almost everything in the entire design was examined for silliness and NIH in terminology, and all that was excised for the purposes of producing a precise, comprehensible specification.
As a counterpoint to both of those (nominally negative) developments, the combination allowed me to complete the first version of a stable, complete, and comprehensive specification, in 2014, for the parts that were left. Hopefully allowing us to move forward with the project, both in terms of implementations, and in terms of exploring the less-well-defined parts that were chopped out of this version of the specification.
Of everything that's been removed, hopefully, at this point we can begin to bring our plans back, chunk by chunk. Beginning here with federation and distribution, at the very least. In addition, this should be the first version with an enlightened and evolved specification, instead of something hacked together by myself, a mere neophyte to these matters.