Skip to content

Comment on History of John Backus's functional programming project (draft)parent

Comments

Remembering John Backus:

[...] At that time, John was interested in pure functional programming, with no side-effects on storage or the external world. I advocated extending the language to allow writing complete interactive applications. John conceded the importance of this, and came up with a scheme in which one would write a function to express the complete transformation of an application on the global state. I struggled with John’s variable free style, and suggested we allow lambda variables when defining a new functional form (higher-order function), but he stuck to his guns.

(In my project) I’ve reduced extensibility to the meta-composition rule, and I’m using an IO monad for interaction because I believe all functions should remain as simple as possible.

I have looked at the diagrams. If a side effect occurs between Program A and Program B, then referential transparency is violated. Referential transparency is the "sacred principle" of algebra; if it is violated, no algebraic transformation is possible—unless I am mistaken or we are talking about a monadic continuation.

Can we move this conversation to email? I am not sure what diagrams you are referring to.

In that first diagram (https://softwarepreservation.computerhistory.org/FP/Composin...), A and B are supposed to be pure functional programs; side-effects are modeled by each one outputting a new version of each modified input. In the second diagram (https://softwarepreservation.computerhistory.org/FP/Strict_H...), as actually implemented in FL, they stick to strictly leftmost-innermost evaluation order so that side-effects are at consistent (but this presumably prevents parallel evaluation).

Yes, it started with https://esolangs.org/wiki/FP_trivia in Delphi, and the project using the Lazarus-IDE was Pointfrip.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.