On 13-12-23 05:08 AM, Thomas Backlund wrote:
> ... What is the reason you say that removing "call/return" is so
> vital to FBP?
> ...
Call/return causes implicit synchronization between components. The
caller is effectively "blocked" until the callee does a return.
Snipping this synchronization between components is FBP's secret sauce.
In my opinion, one-way sending is a "more atomic" element of software
construction than is call/return (aka RPC). You can easily build
call/return with one-way sends (one wire for "call", another return wire
for ACK), but it is much harder to build one-way sends if all you've got
is call/return, i.e. one has to build a message delivery "kernel" to
break out of a von Neumann architecture.
For example, this implicit synchronization is why people find it "hard"
to build protocol stacks (an easy task in FBP). I've never seen an
implementation of the full 7-layer OSI model, because call/return
languages make it overly difficult.
For example, call/return is the reason that epicycles, like operating
system fully preemptive processes, were invented, replete with hoary
multi-tasking "issues".
Call/return is why node.js was invented. NoFlo was, then, invented to
cure the problems created by node.js ("everything-is-a-callback" makes
it hard to get textual code correct).
Getting rid of call/return also makes it ridiculously simple to draw
meaningful diagrams of software architectures, diagrams which can be
automatically compiled to executable code.
> Gotta love that you implemented it on "bare-metal" without ans
> OS... Hall of fame for that. :)
I was getting pretty good at rolling-my-own RTOS's until we ran into a
problem which needed faster response times than could be had with
context switches.
Using FBP leads to the revelation that operating systems are really just
libraries of "reusable" code that are supposed to make computers more
accessible to programmers.
FBP allows one to snap together an operating system out of reusable and
custom components, so why bother using an O/S? :-)
pt