atlantis
I saw Dune the week after it opened, which was fortunately timed only 70 or so weeks after last reading Agamemnon. For all the time spent pontificating about justice there doesn't seem to be much of a challenge as to why Tantalus was punished in the first place. The gods presumably knew they could revive Pelops so why'd they act so mortified at the dinner table? That punitive approach traded the relationship Pelops could have had with his father for five or six generations of family conflict, which Aeschylus could only resolve with "Orestes less wrong because penis".
I also happened to pick up Always Sunny again and saw the Hellenization of Philadelphia. Where Catholicism goes Zeus follows. How much of that is reflected from the experience of home life in areas like Philly or Dublin and how much from classics education? On the one hand the stories are comforting as a form of solidarity, then they become a sort of justification themselves for perpetuating painful cycles. I recognize these forms and find understanding by them, but I'm not bound by them. And when the kinship itself becomes repressive where's there to turn? Appalachia? The Wissahickon? In pursuit of a different pantheon of different gods, letting slip the occasional "better" instead of "different". Brewing hooch and following the moon to freedom.
Before the movie I was wondering if Atlantis could be real, if it could be buried beneath the Irish island, if lungs and thumbs are mythologized as technologically advanced from their underwater kingdom, and what it would mean to be half human and half mermaid. I also merged together all the latest source code projects into one new repository.
Most of the concepts are the same, though the names have changed a
bit. Internally there's a base layer of abstract types to define
statements and their execution. Then the filesystem
and
processor
modules implement the concrete statements from ytree
and execvm
. I retained poseidon
and ursula
, each of which
now generates a stream of statement objects. I also carried forward
the "manager" role to do the actual execution. I kept tar
, which
serializes any filesystem objects from its input to a tarchive format,
and I added sh
, which attempts to serialize any command objects
from its input to a POSIX shell script format. That one is especially
spicy, but it seems useful so it's there. I split off flounder
as
a separate "print only" manager, which is like a bland dry run. And
then there's ariel
, the one manager that actually does the
"typical" execution. She's supported by an "assistant", which
implements the actual syscalls needed to do her work. As a baseline
there's zoidberg
, who does as close to nothing as possible. Then
there's sebastian
, who makes read
, write
, and execve
calls "locally". And in progress is krabs
, who uses sebastian
to start an external process that will run the syscalls "remotely",
the biggest little microkernel under the sea!
Finally, for all my consternation about what computation even is it
turns out the answer is "magic". To tie all those pieces together I
now have one single entry point, the trident
. His power is to
manifest The First Parser, which he uses to parse his arguments into a
script generator and a manager, which he then sets in motion parsing
and executing Atlantean objects.
The language looks mostly the same:
local atlantis = require("atlantis") return function (values) coroutine.yield( atlantis.v1.proc.cmd { argv = {"echo", "hello", "world"} } ) end
I waffled previously about ursula.execv
and whether there should
be two command constructors. The answer turned out to be no!
poseidon
avoids this by requiring his input to have been
serialized beforehand. Since he's relying on "carrier language"
constructs I figured it's OK for ursula
to do the same, and it
makes the most sense for the squid to implement the long jump. Using
coroutines also makes the internal API nice and clean since both
monarchs act as pythonic generators. Execution is nearly identical as
well, but for a few extra tokens:
And it is still possible to pipe ursula
into poseidon
, but we
need a supporting cast. Here flounder
is used to "convert" the lua
script to yaml, which poseidon
can run (with the help of ariel
(with the help of sebastian
)).