7 ms·
An Overview of TUNIS: A UNIX Look-Alike Written in Concurrent Euclid (1982)
- eternalban 4y agoHolt's 'short introduction to concurrent euclid': https://dl.acm.org/doi/pdf/10.1145/947923.947931 https://dl.acm.org/doi/pdf/10.1145/947923.947931
- 082349872349872 4y agop73 for what I found to be the most unique feature of Euclid: its antipathy to aliasing.
- mikewarot 4y agoI read it, and I don't really get it. X is used out of scope, which is why we try to eliminate global variables, and use appropriate names. It seems like a huge over-reaction.
- 082349872349872 4y agohttps://en.wikipedia.org/wiki/Restrict https://en.wikipedia.org/wiki/Restrict is an attempt to declare that the programmer has avoided aliasing. https://en.wikipedia.org/wiki/Separation_logic https://en.wikipedia.org/wiki/Separation_logic is a very fancy attempt to reason in the presence of possible aliasing. History says the Euclid approach was a huge over-reaction, but consider also the naive memcpy: while(count--) *dst++ = *src++; which works just fine ... as long as the destination and source buffers don't overlap (are not aliased). You might consider no-aliasing imperative to have been an attempt to stake out a halfway position between "pointers are the goto of data structures" wild west full imperative, and "no mutation, even when unaliased" strict functional, disciplines.
- jerf 4y agoThere are many such things in historical PL design. I consider immutability in Erlang to be another example... what Erlang needed was processes to not be able to send each other mutable references. Full immutability in data achieves that goal, but is an over reaction. It was sufficient when the type system simply doesn't have references in it. Another example is the whole dynamic scripting language world considered as a reaction to the terrible static world of the 1990s. Yes, the 1990s were too static, no question, but that didn't mean we needed to turn all objects into hash tables, be able to dynamically re-write classes on both the class and the instance level, and just generally make everything, everywhere so dynamic that the language spends the majority of its runtime basically checking to see that nothing has dynamically changed since last time it did something. The PL design world is learning and growing and I find it an interesting story over time. Unfortunately when proving out a theory takes a minimum of about 20 years from thousands of programmers it's a slow process. (Also, while my comments above are certainly in some sense criticisms of the languages, I actually don't intend them as criticisms of the people involved. It is still an amazing achievement to move the state of the art ahead at all in such a harsh environment; I'm not angry that they didn't in one fell swoop fix all problems forever, even for decades not yet here.)
- cmrdporcupine 4y agore: dynamism/late-binding; it was seen as very exciting at the time. At least to me. Maybe under the influence of Self and Smalltalk, which were doing interesting things with object behaviour composition using delegation and slots and all sorts of late-bound magic. It definitely let people experiment. In JavaScript especially a thousand (inelegant) flowers bloomed and then some practices were codified into later revisions of the language and the door shut on that kind of experimentation. I'm a big fan of static type systems generally. But I do think dynamic scripting languages have their place. In particular as prototyping/scripting languages embedded in larger more robust runtimes. e.g. the original goal of JavaScript (which has now become a full blown application development language). AutoCAD had/has its lisp dialect. Emacs its own (ok it's more than just embedded scripting in that case). Many FPGA and HW eng tools use Tcl. Various games have Lua etc etc. This is a useful pattern potentially.
- mikewarot 4y agoI found this example[1]. At first blush, it looks like someone really hated semicolons. It's un-natural to me, with strong code smell. I do like that the end of a block repeats the name, to ensure matching. [1] https://www.cs.oswego.edu/~odendahl/coursework/csc443/notes/07-monitors/euclid-eg.html https://www.cs.oswego.edu/~odendahl/coursework/csc443/notes/...
- russfink 4y agoThis post is of historic significance. Paper is from 1970.
- Rochus 4y agoThe report is dated september 1981; the link points to the revised 1982 version; the author is Ric Holt (https://en.wikipedia.org/wiki/Ric_Holt https://en.wikipedia.org/wiki/Ric_Holt). He was also involved in the implementation of the Euclid programming language used for Tunis. It's remarkable that Euclid was originally designed by Butler Lampson at Xerox PARC, where also Smalltalk, Mesa and Cedar were invented.
- rst 4y agoDate given on the cover sheet is 1982. (Very early versions of Unix were already running in Bell Labs in 1970, but the kernel was still entirely written in assembler, it may not have had a hierarchical file system yet, and certainly didn't have fork().)
- pjmlp 4y agoMeanwhile JOVIAL is from 1958, ESPOL/NEWP from 1961, PL/I from 1964….
- mhd 4y agoPascal, Euclid, Ada - any other languages from the Algol family named after mathematicians? Probably stopped after Wirth himself deviated from the "pattern".
- Athas 4y agoAlso by Wirth: https://en.wikipedia.org/wiki/Euler_(programming_language) https://en.wikipedia.org/wiki/Euler_(programming_language)
- adrian_b 4y agoEuler is an important programming language, because it was one of the first programming languages which had pointers (in 1965). Moreover, it was the first programming language where the implicit value of a pointer was the address contained by it and an explicit operator was used to access the pointed object (in the previous language with pointers, CPL, they behaved like the references of C++, i.e. their implicit value was the pointed object). Unlike in C, where due to a design error the "*" indirection operator is a prefix operator, in Euler the indirection operator (which was a middle dot) was rightly a postfix operator (this was later inherited by Pascal). Of course, Euler also had the "address of" operator ("@" in Euler, as a prefix operator), which is needed to assign values to pointers.
- deleted 4y ago[deleted]
- bregma 4y agoSpent many an hour writing OS code in CE (Concurrent Euclid) using the `ed` editor on an IBM 3270. Still have my copy of the scrabble book. Good times for sure.
- Cyph0n 4y agoAs a Tunisian, I’m very curious how the name came to be!
- jan_g 4y agoToronto UNIversity System https://en.wikipedia.org/wiki/TUNIS https://en.wikipedia.org/wiki/TUNIS
- Cyph0n 4y agoThanks for linking!
- kazinator 4y agoI'm guessing they might have wanted TUNIX, but that would have been flagged as a trademark violation, causing problems for the U of Toronto.
- taskforcegemini 4y agohow so? the technical university of vienna, austria, used to have a linux distribution with that name. It was spelled "TUn!x", though. The name translates to "do nothing" in german.
- ncmncm 4y agoI find dead-end projects like this very interesting, in aggregate. So much original work went in, and then it died. Likewise Symbolics, Apollo Aegis, BeOS, OS/2, MacOS9, Lisa, Pink, Plan9. UNIX itself has turned out to be one, almost (BSDs and MacOSX excepted). SerenityOS might not!
- skissane 4y ago> UNIX itself has turned out to be one, almost (BSDs and MacOSX excepted). Unix’s success story was about the interfaces, the APIs, not the original implementation of them - even though BSDs (and through them macOS) are direct descendants of the original implementation, I doubt much Bell Labs code actually survives. But the Unix API will likely outlive us all.
- pjmlp 4y agoBeing free beer with source code is what made that descendency possible in first place. Had it been on sale with prices similar to VAX/VMS and others, it would been an history footnote most likely.
- user3939382 4y agoI always wonder about this, I wonder how many lines of code from the 70s are running in my iPhone.
- ncmncm 4y ago'70s, likely not. But zlib code is probably copied in a hundred, maybe a thousand times, in a dozen versions.
- user3939382 4y agoI figure there must be at least some from the original BSD code.
- 4y ago