Date: Tue, 28 Mar 2017 15:32:06 -0700
From: Bret Victor
Subject: Re: Logic Circuit Jam
If you have the 3-inverter ring oscillator, it just won't converge.

I realized that this probably isn't the case, assuming that the rule is actually wishing for the card to be lit.  That wish would get fulfilled (and the claim claimed) by a illuminator process, which runs after rules converge.

The rule (for a wire, say) says that if (someone claims) that my neighbor card is lit, wish that I am lit.  I can't claim I'm lit -- it's not true yet!  I wouldn't actually get lit until the illuminator fulfills that wish by both physically projecting onto me and claiming accordingly that I am indeed lit.  So it's not quite a round-trip through the world (cameras aren't involved), but I won't see my neighbor as lit until it's actually physically illuminated, which creates a delay.


On Mar 28, 2017, at 3:13 PM, Toby Schachman wrote:

Another interesting idea that came out of this discussion was about lag.

Rules as they're currently conceived execute instantaneously until they all converge. If you have the 3-inverter ring oscillator, it just won't converge.

A way around this would be to make your rules refer to the state of the world in the past, either the previous "frame", or a specific time (e.g. 1 second ago).

Josh had the idea that one could have a "lag" token that you'd place on an area. This would give all the rules in that area a lag time (which could be adjustable).

Alex pointed out that the framerate of eToys gave a lag time for free and that this was generally helpful for understanding the behavior of the system.

On Mon, Mar 27, 2017 at 9:36 PM, Bret Victor wrote:
Also wanted to mention -- one of the most exciting parts of the jam for me was watching all the demos and thinking "people could do it any of these ways, and they would all work".  With a sufficiently good set of pre-built recognizers and sufficiently good ways of defining rules, someone could come in and build a working logic circuit kit in Toby-style or Paula-style or Josh-style or Bret-style.  They're all different, and they're all fine.

When designing a typical programming system, there's often a feeling of a strong "grain" -- there's some "right" way of writing a program that feels most natural in the language, and you're designing the language to try to maximize the elegance/parsimoniousness of a program written the "right" way.  At the jam today, I enjoyed the feeling that our system wouldn't be strongly grained at all.  The real world has so many degrees of freedom, there are so many ways of doing anything in the real world.  Realtalk should be useful however anyone wants to use it, instead of imposing its own style on anyone.

(fwiw, it's true that I used to worship Larry Wall, but that was a long time ago and I'm embarrassed by that.) 

(fwiw also, Python has never sat well with me.)

Of course, there's the question of interoperability -- if I put my logic gates on a table with Toby's gates, can they play together?  Could they be made to play together?

(At least they can sit on the same table together, which is already better than logic gates from two different computer applications.)