Date: Fri, 3 Apr 2020 22:38:19 -0700
From: Bret Victor
Subject: report
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:

[IMG_2676.MOV]

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:

Attachment: replicas-2.pdf


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.

[IMG_2686.MOV]

A sticky statement:

    Remember "Spot" is a "dog".

Unstick the statement:

    Forget "Spot" is a "dog".

    

A mutable slot:

    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


Translator

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.