Follow

Copy of my twitter post of Aug 31, 2018:

A bit about programming languages.

It feels like there are two distinct programming languages that PL designers habitually mix into one.

1) Calculating language. It's code lives inside box with explicitly specified inputs and outputs. There is no IO, nor time inside the box. Program might be executed lazily or eagerly. Instructions might be executed sequentially, or may remind some kind of graph, in which exact path of execution is not clear. The main thing is that there are inputs and expected outputs. Reminds code in Prolog or Haskell.

2) Managing language. It's code runs inside loop-ring, instructions always executed eagerly and sequentially. Unlike boxes, there is a time inside ring, and it flows into one direction. Programs written in this language do all IO: receive data, process it using boxes from the first language, save state, send data outside. This language also describes components of the system and their dependencies.

Reminds Erlang with it's receive-after-end and send. Reminds supervisor config, kubernetes service config.

If we split these languages yet use them together, it may lead to something interesting. It may produce more powerful abstractions specific for tasks of each language. It may lead to something more convenient, more effective in terms of computer-human interface.

Just realized that Realtalk in DynamicLand does exactly that. It has Managing Language with its Claim, When and Wish IO instructions. It has Lua as a Calculating Language, which code can be treated as a pure function by Managing Language.

Sign in to participate in the conversation
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.