[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)