[HN Gopher] Concurrent Pascal and SuperPascal programming langua...
       ___________________________________________________________________
        
       Concurrent Pascal and SuperPascal programming languages, and more
        
       Author : Rochus
       Score  : 41 points
       Date   : 2023-12-03 10:27 UTC (12 hours ago)
        
 (HTM) web link (brinch-hansen.net)
 (TXT) w3m dump (brinch-hansen.net)
        
       | lukego wrote:
       | The Architecture of Concurrent Programs (his book) is a real
       | treasure. I read that on a tip from Ralph Johnson way back when
       | on the C2 wiki.
       | 
       | Special purpose operating systems e.g. with disk driver (for
       | input) and a compiler (the application) and a printer driver (for
       | output.)
       | 
       | Those were the days!
        
       | rossjudson wrote:
       | Some of the earliest papers here (1966!!) document histories that
       | are too easy to lose.
       | 
       |  _Reproducible testing of monitors_ (1978!) outlines test
       | creation techniques that are still in use today.
        
       | Rochus wrote:
       | The SuperPascal paper was submitted to the IEEE Software journal
       | 30 years ago in November 1993; it appeared in the May 1994 issue.
       | 
       | SuperPascal was also remarkable because it (together with his
       | previous language Joyce) manifests a paradigm shift by Per Brink
       | Hansen from the monitor to the CSP channel concept. The latter is
       | prominent today because it is also used in the popular Go
       | programming language.
        
       | mrkeen wrote:
       | http://brinch-hansen.net/papers/1999b.pdf
       | 
       | > Hoare (1972) had introduced the concept of a conditional
       | critical region that is delayed until a shared data structure
       | satisfies a Boolean condition. In a shared class, I expressed the
       | same idea by means of an await statement, which can occur
       | anywhere within a critical region (Brinch Hansen 1972).
       | 
       | > At the time I was concerned about the inefficiency of
       | conditional critical regions which retest Boolean conditions
       | repeatedly until they are true. As an alternative I decided to
       | let the programmer control the frequency with which scheduling
       | expressions are reevaluated. I did this by associating explicit
       | queues with shared variables. Critical regions can delay calling
       | processes in these queues and resume them later (Brinch Hansen
       | 1972).                   public void send(int m)         { while
       | (full == max) await(e);
       | 
       | This ended up as a feature in software transaction memory as the
       | 'retry' function - without the inefficiency of busy-waiting and
       | without the programmer needing to pick a frequency of scheduling:
       | send m = do             when (full == max) retry
       | 
       | https://hackage.haskell.org/package/stm-2.5.3.0/docs/Control...
       | 
       | > Retry execution of the current memory transaction because it
       | has seen values in TVars which mean that it should not continue
       | (e.g. the TVars represent a shared buffer that is now empty). The
       | implementation may block the thread until one of the TVars that
       | it has read from has been updated.
        
       ___________________________________________________________________
       (page generated 2023-12-03 23:00 UTC)