wtaysom
06/27/2025, 6:23 AMKonrad Hinsen
06/28/2025, 7:50 AMKonrad Hinsen
06/28/2025, 7:52 AMKonrad Hinsen
06/28/2025, 7:54 AMMarek Rogalski
06/28/2025, 8:28 AMKonrad Hinsen
06/28/2025, 1:13 PMKonrad Hinsen
06/28/2025, 1:17 PMKonrad Hinsen
06/28/2025, 4:19 PMTom Larkworthy
06/28/2025, 4:25 PMguitarvydas
06/29/2025, 12:23 PMKonrad Hinsen
06/29/2025, 12:33 PMTom Larkworthy
06/29/2025, 12:48 PMMarek Rogalski
06/29/2025, 12:48 PMTom Larkworthy
06/29/2025, 12:58 PMdirect connection between Lopecode and PBP(0D) -- @guitarvydasbased on my reading of this. Yes! Its a very similar programming model! In Observable each named cell has 1 output and n inputs which are late bound together to form a dataflow DAG. You can update the code for any cell and only the downstream cells are reevaluated. I see PBP allows multiple outputs per part, and technically the Observable runtime could also do this but currently the front end language Observable Javascript does not manifest that semantic, its only one output per cell. Roughly speaking a Part is a Cell. Also Observable Runtime / Lopecode its all clientside javascript so the environment is very different, but there are is a lot of conceptual overlap.
guitarvydas
06/29/2025, 1:24 PM... I see PBP allows multiple outputs per part ...brainstorming: From playing with electronics, I call multiple inputs "fan-in" and multiple outputs "fan-out". Fan-out seems to be eschewed by FP. Multiple inputs and multiple outputs in FP is an illusion created by the power of destructuring (one blob of data, containing many non-homogenous datums). Fan-out, IMO, means data coming at different times (like requests to servers and daemons). Function-based thinking rules this kind of thing out. For example, Morrison's FBP does not allow fan-out, mostly (I think) on the basis that it is mathematically difficult to express in typeset text (
/bin/*sh
took a stab at this using clumsy textual syntax like |2
and program-lets like tee
, but that clumsiness just makes the goodness go away)Tom Larkworthy
06/29/2025, 2:06 PMKonrad Hinsen
06/29/2025, 3:18 PMguitarvydas
06/29/2025, 3:43 PMguitarvydas
06/29/2025, 3:52 PMTom Larkworthy
06/29/2025, 6:06 PMA scheduled function can trigger other scheduled functionsOnly indirectly though (in runtime), due to late binding. So a schedule function publishes a value to a named location. There might not be a consumer of that value at the time of publishing. Later on you might later add the code to consume it, so the delivery to the next schedule function might occur much later. A synchronised function calling itself is recursion. A scheduled function could refer to its previous value, which is more like a fold over time. This is actually possible in observable by using the keyword "this", which refers to the prior value of the variable (docs).
When the definition is invoked, the value of this is the variable's previous value, or undefined if this is the first time the variable is being computed under its current definition. Thus, the previous value is preserved only when input values change; it is not preserved if the variable is explicitly redefined.
Some of your words imply scheduled functions are triggering other functions directly. This is not how it works in Observable runtime. The dataflow scheduler is like a trampoline that is managing invoking functions, and it manages gathering the data to populate the input args. The functions themselves jsut declare what inputs they want (what outputs of other functions they depend on). If those inputs do not exist, the function is not scheduled. If any of those inputs change, the function is called, and it emits a value, which is then used to chain onto other functions if the runtime deems necessary. The scheduled functions do not trigger each other! The runtime triggers them, and makes decisions about whether more functions need to be triggered or not based on the dependancy graph.Konrad Hinsen
06/30/2025, 6:33 AMTom Larkworthy
06/30/2025, 7:07 AMKonrad Hinsen
06/30/2025, 8:05 AMguitarvydas
06/30/2025, 1:07 PMfan-out
means that each downstream node gets an exact copy of a message. UNIX doesn't do this - once an output is taken, no one else gets a copy (unless it was piped through tee
first). Morrison mentions Linda when talking about FBP. I haven't studied Linda but I don't quite (yet?) see how copying fan-out would work in Linda. Fan-out is common in electronics design (electronics takes little nibbles of the message instead of doing full-blown copying ... the calculation of impedances is used to figure how much nibbling can be done before the circuit is adversely affected). AFAICT, the scheduler needs to know how many copies to make before deleting the original message.guitarvydas
06/30/2025, 3:50 PMKonrad Hinsen
07/01/2025, 7:21 AMguitarvydas
07/02/2025, 1:47 AMKonrad Hinsen
07/02/2025, 5:44 AMguitarvydas
07/05/2025, 2:31 AMKonrad Hinsen
07/05/2025, 6:37 AMguitarvydas
07/05/2025, 12:09 PMKonrad Hinsen
07/05/2025, 7:13 PMguitarvydas
07/06/2025, 7:44 AM