Etymology
A language's etymology is its changelog. Each version below introduced a piece of grammar that survives in v1.
-
v1.0.0 First edition
Five operators frozen. The lexicon ships at 277 entries. The grammar is closed for v1; only the lexicon grows from here.
luna pipe "persona generate >> ghost \"post\" >> publish notion" -
v0.9.0 Sink and conditional
Added the sink (!) and conditional (?) operators. Both were originally separate verbs; demoted to grammar after pattern-matching them in user pipelines for two months.
/persona generate >> ? premium >> longform : short -
v0.7.0 Fanout
The parallel operator (||) joined the language. Previously emulated with shell ampersands; promoted once it became clear the join semantics were a runtime concern, not a user concern.
/ghost "post" || /imagine "hero" >> publish -
v0.5.0 Repeat
Added the postfix repeat operator (*N). Replaced a Python-style loop construct that nobody used. Concatenative purists nodded.
/persona generate >> ghost "post" *4 -
v0.1.0 Pipe and stage
Two productions: <pipe> ::= <stage> (>> <stage>)*, <stage> ::= <verb> <arg>*. The whole language was 200 lines of parser and a single test fixture. Everything since then is gardening.
/persona generate >> /ghost "post"
Influences.
- Unix pipes, McIlroy, Bell Labs, 1973. The original good idea: small tools, one operator, the value flows.
- Forth, Moore, 1970. Proved a programming language can fit in a postcard if you commit to concatenation.
- Joy, von Thun, 2001. Showed how to take Forth seriously as a functional language. Composition over application.
- Factor, Pestov, 2003. The proof that concatenative languages can have libraries, tooling, and an IDE.
- Make and shell, every Unix system, forever. The dependency graph is implicit; the value flow is explicit; you cannot have both at once and Luna Pipes picked value flow.