A few fun future features:
Replicas
Following from Luke's suggestions from last week, here's take two on the replica syntax, and a (sort of) implementation on top of RT2017:
Instead of replicating the entire page, an "In" block defines computation to run on another machine. I think it reads a lot better. I'm still using the word "replica" for the object that appears in the other area, but maybe it's more of a "emissary"? In any case, it's neat to see it as an object.
In area (area): End
In areas { area1, area2 }: End
In your original area: End
In every area: End
The "In" syntax exactly parallels the directed statement syntax.
Claim (dog) is a good boy [in area (area)].
Claim (dog) is a good boy [in areas { area1, area2 }].
Claim (dog) is a good boy [in your original area].
Claim (dog) is a good boy [in every area].
"For important negotiations we don't send telegrams, we send ambassadors." --
Alan Directed statements are our telegrams, and "In" blocks are our ambassadors.
Here are the pages that you see in the video:
Memories
I was starting to sketch out the networking implementation for directed statements, and I wanted to hold on to some state, so I found myself thinking back to some of the Realtalk 2020 state ideas.
Remember "Spot" is a "dog".
Forget "Spot" is a "dog".
Remember (only "Spot") is the best "dog".
Remember (only "Sparky") is the best "dog". -- replaces the previous one
As many "variable parts" as you want:
Remember (page) has width (only 11) and height (only 17).
Clearing the slot:
Forget /something/ is the best "dog".
(That pattern-matching forget should probably forget all matching memories, but currently only works if the /something/ lines up with an (only)).
Accessing:
When (you) remembers /dog/ is a "dog": End
Both replicas and memories wanted custom translations, so I spent some time on the "new" translator today. Details forthcoming, but a quick summary:
(1) I think it's ready to be swapped in as the RT2017 translator. I test-suited it across all the ghost pages and got them all translating identically, so it probably works. It solves the bootstrapping problem by using itself to generate a translator that doesn't use realtalk syntax, and patches it onto a boot page.
(2) Translators are more object-y and decoupled. Objects claim the translations they can do. You can lay out objects in a pipeline (or whatever) and watch each one work in turn. You can aggregate them by sticking them in a box. It's easier to mix and match little languages.