News for hackers. Stuff that matters.
Re:The paradigms of programming by mpweiher on Monday January 29, 2018 @05:01AM (#16256550)
I suspect that LISP has the same problem that Smalltalk-72 had: creating DSLs is "too easy" and unconstrained. Language design is tricky and very abstract and nobody is a good language designer in the heat of the moment.

Oh, and while very unconstrained in some sense, the syntax also strongly "suggests" some sort of applicative model, so call/return again.

So maybe too constrained where it shouldn't be, and too unconstrained where it would need to be more constrained.

Re:The paradigms of programming by hderms on Monday January 29, 2018 @11:26AM (#16258378)
What exactly would be an alternative to call/return? I've seen that term thrown around before but I don't know how to Google for it effectively. Is it an alternative to other execution models like fork-join or something?
Re:The paradigms of programming by mpweiher on Tuesday January 30, 2018 @04:38AM (#16264033)
There are a number of architectural styles that aren't call/return:

1. Dataflow

With the popular variant pipes + filters. There is also synchronous dataflow, which can be compiled to state machines. This has recently been bastardized as "FRP" (distinct from Conal Eliot's original FRP).

What's kind of amusing is that traditional programs typically get translated to dataflow variants twice: first, the compiler turns procedures into a dataflow graph and generates code from that, later most OOO speculative processors turn the computation into more or less a dataflow graph again.

2. Asynchronous messaging

See Erlang/Actor model. You send messages (calls), but they don't return.

3. Implicit invocation/broadcast

You send out messages/broadcasts. Clients can register. There is no 1:1 correspondence between call-sites and receivers. May also be asynchronous (but doesn't have to be).

4. Constraints

Both dataflow constraints (see spreadsheets) and "solver" constraints. You just specify the relations you want to hold.

5. Coroutines

Normal call/return runs the callee to completion. Coroutines interleave. The Floyd paper mentions nested coroutines, which I have to look at.

etc.

A good reference is Software Architecture: Pespectives on an Emerging Discipline by Shaw and Garland

Re:The paradigms of programming by hderms on Tuesday January 30, 2018 @07:21PM (#16270316)
Very thoughtful and educated response. I couldn't have envisioned a better answer when I decided to ask that question.
Re:The paradigms of programming by kqr on Monday January 29, 2018 @04:10PM (#16260644)