Intuitive concurrent programming in any language

(lf-lang.org)

29 points | by mpweiher 1 day ago

3 comments

  • samuell 26 minutes ago
    I like that the code example seems to indicate they took the concept of "ports" from flow-based programming, which might be one of it's absolute strongest points:

        player2.reveal -> player1.observe
        player1.reveal -> player2.observe
    
    That is, enabling data flow connections between individual inputs/outputs, and not just between components, which otherwise is too limiting, and typically causes a lot of extra syntax to handle that routing otherwise.

    Wrote about it in the context of workflow systems way back (https://livingsystems.cc/posts/workflows-dataflow-not-task-d...)

    • mpweiher 4 minutes ago
      Ports are a general feature of components in the software architecture literature (and corresponding systems).

      In addition, connectors also become structured.

      Objective-Smalltalk uses polymorphic connectors to adaptively and mostly automatically choose the level of granularity you want to operate at.

      https://dl.acm.org/doi/10.1145/3689492.3690052

      • samuell 0 minutes ago
        You are probably right, but I'm amazed at how it took so long before they became mainstream in data flow oriented libraries and DSLs.

        It's gotten better lately it seems, but a lot of tools skipped that part, which now requires tons of specialized syntax just for routing of multiple parallel streams.

  • Garlef 40 minutes ago
    I think the main example on the landing page is a bit counterintuitive?

    Rock Paper Scissors but the graph presents the reveal as a reaction to the observation? In a loop? And somewhere there's a min-delay of a magical 1 sec? Why 1 sec and not 0.1 sec? Can this build up and the players get out of sync? (A bit strange to 'just wait, lol' if the language aims at solving problems in distributed systems).

    Overall the example would be better if it separated the game from the players and also split out the repeat loop.

    Maybe let both player reveal to a host and then receive a result (and the choices) ~ This way both players can be sure that the choice of the other player is independent of the observation.

    (I know that the example is 'correct' in that the choice is made independent of the observation but I think the example could be improved if it solved some of the coordination problems involved in the scenario more cleanly through code architecture).

    Overall I quite like the idea of having this polyglot meta language!

  • XCabbage 1 hour ago
    I don't really understand what problem this is meant to solve at first glance. It'd be nice to see a simple example program involving concurrency written in plain Python, then a discussion of the annoying bookkeeping involved in avoiding concurrency errors and what traps would be easy to fall into, and then an example of how the same thing would be implemented using Lingua Franca and an explanation of how eliminates the bookkeeping and traps.