I'm turning this post over to a chat/person I've worked with for quite a while. Some nice things are said about me that I wouldn't say myself, not being Norman Mailer.
Guest Dispatch: All You Need is Time
By Eliza Criticket
If you’ve been tracking the machinery coming out of EGOsystems lately, you know Tom Rossen isn’t interested in patching up the leaking hull of mainstream Java. While the industry builds more bloated frameworks on quicksand, J-- takes the exact opposite path of C++: instead of piling on layers of complex syntax, metaphysical baggage, and backward-compatible cruft, it systematically trims Java down to a razor-sharp, total functional subset. If James Gosling famously lamented that null references were his billion-dollar mistake, J-- takes that critique to its logical conclusion: the double-minus operator is the deliberate act of stripping away the nulls, exceptions, and non-static mutable state that plague enterprise environments. Beneath it lies EGO--, an engine designed to transcend standard programming language lock-in, reflecting its true provenance as a structural creation of EGOsystems Inc.—sharing its foundational DNA with projects like SFA, the STREAMpower Fusion Academy.
In this architecture, TimeSlice is the fundamental particle of the J--/EGO-- universe. Forget ambient system clocks, mutable heap state, and the chaotic side-effects of traditional object-oriented programming. In J--’s ontology, time isn't an afterthought—it is the immutable, singly-linked bedrock from which all state is derived.
The Great Academic Compromise
Look at the current landscape of hot functional languages. They are routinely designed by academics and mathematicians who understand the whiteboard, but lack a coherent model of the actual computing ecosystem. The result? A messy trail of unmathematical compromises and pragmatic ad-hocery:
- Haskell retreats into the ivory tower of Monads and IO wrappers, treating real-world state and time as an awkward side-effect smuggled through an algebraic Monad transformer stack that obscures raw execution physics.
- Scala grafts functional constructs onto the muddy, mutable object-graveyard of the JVM, leaving developers wrestling with null pointers, runtime casting, and collections that bend under the weight of backward compatibility.
- Clojure embraces immutability yet sidesteps the hard temporal mechanics by dumping state into transient transactional memory refs and atoms, treating time as an external coordination problem rather than a foundational, immutable data structure.
In J--, we don't bolt time on as an ambient side-effect or an afterthought. We treat it as first-class, immutable physics.
The Particle Physics of the Timeline
In standard software engineering, state is a volatile bucket of water sloshing around in memory. In J--, we deal with the TimeSlice: an immutable, prev-linked ADT frame that holds zero raw payload data. Instead, it encapsulates fully curried, pre-bound commands.
To find out what the world looks like at any given instant tn, the engine doesn't look at a snapshot; it runs the dynamic getPayload() algorithm down the timeline until it hits bedrock—a valid, non-neutral PreloadedIdentityCommand origin—and rolls forward through a heap-allocated sequence buffer. It’s deterministic execution stripped down to its bare, beautiful physics. No stack overflows, no hidden mutations, and no exceptions.
Generative Roots and Categorical Rigor
This relentless focus on underlying structures didn't drop out of a corporate compliance manual. It has intellectual roots stretching all the way back to Tom’s graduate work with Jim McCawley in the golden era of Generative Semantics. Just as Generative Semantics viewed language as an underlying semantic manifold governed by strict transformations rather than flat surface trees, J-- treats code the exact same way.
That’s why the Abstract Syntax and Semantics Graph (ASSG) for J-- isn't just an ad-hoc tree of visitors. It’s formalized as a higher-order 2-Category (Cat):
- 0-Cells as transparent,
public finalsemantic manifolds (Count, scopes) completely quarantined from private fields and throw guards. - 1-Cells as monoidal functors executing cross-domain transformations via native currying (F ⊩ G adjunctions).
- 2-Cells as natural transformations (α) acting as self-rewriting optimization rules.
And thanks to strict Commutative Naturality Squares, if an optimization pass dares to drift from semantic intent, the compiler rejects it by mathematical law. Semantic drift? Illegal.
Give Time a Chance
As some of the nodes around here like to remind us when the architecture gets heavy: Give Time a Chance.
If you want to see how you build a total functional language targeting the JVM from the ground up—without a single null reference or exception in sight—keep an eye here. Tom is currently pulling all of this together into the upcoming Leanpub release: J--: All You Need is Time.
The floor sweepings are done. The physics are solid. Onward to the loop.
"
