[HN Gopher] An Overview of TUNIS: A UNIX Look-Alike Written in C...
       ___________________________________________________________________
        
       An Overview of TUNIS: A UNIX Look-Alike Written in Concurrent
       Euclid (1982)
        
       Author : lproven
       Score  : 90 points
       Date   : 2022-09-12 14:04 UTC (8 hours ago)
        
 (HTM) web link (archive.org)
 (TXT) w3m dump (archive.org)
        
       | Cyph0n wrote:
       | As a Tunisian, I'm very curious how the name came to be!
        
         | jan_g wrote:
         | Toronto UNIversity System
         | 
         | https://en.wikipedia.org/wiki/TUNIS
        
           | Cyph0n wrote:
           | Thanks for linking!
        
       | bregma wrote:
       | Spent 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.
        
       | russfink wrote:
       | This post is of historic significance. Paper is from 1970.
        
         | Rochus wrote:
         | The 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).
         | 
         | 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 wrote:
         | Date 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 wrote:
           | Meanwhile JOVIAL is from 1958, ESPOL/NEWP from 1961, PL/I
           | from 1964....
        
       | eternalban wrote:
       | Holt's 'short introduction to concurrent euclid':
       | https://dl.acm.org/doi/pdf/10.1145/947923.947931
        
         | mikewarot wrote:
         | I 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/...
        
           | andsoitis wrote:
           | Python.
        
             | musicale wrote:
             | Javascript when I feel like writing it that way for fun
        
         | 082349872349872 wrote:
         | p73 for what I found to be the most unique feature of Euclid:
         | its antipathy to aliasing.
        
           | mikewarot wrote:
           | I 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.
        
             | jerf wrote:
             | There 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 wrote:
               | re: 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.
        
               | jerf wrote:
               | "But I do think dynamic scripting languages have their
               | place."
               | 
               | My thought isn't actually static/dynamic, but rather the
               | _amount_ of dynamicness. I suspect we could get 99%+ of
               | the benefits of static languages at a fraction of the
               | runtime cost if someone redid a dynamic language from
               | scratch today to be dynamic only in selected ways. You
               | pay a lot of runtime performance in Python to be able to
               | do things like at any time edit a method three levels up
               | the inheritance hierarchy, but you almost never actually
               | _do_ that sort of thing.
               | 
               | One idea I cite often is to have a declaration phase
               | versus a runtime phase, because the vast, vast bulk of
               | "dynamicness" is achieved at startup. A JIT could be
               | really aggressive about a lot of optimizations if the
               | language itself guaranteed that after a program (or a
               | module, or a function, or whatever makes sense in the
               | end) declares itself "done being dynamic" that there will
               | be no more changes.
               | 
               | In fact I think there's a niche for a high-performance
               | "mostly" dynamic language with threading built in from
               | the beginning in the next 5-10 years. Static languages
               | are getting most of the attention right now, and there's
               | reasons for that, but I think there's a niche here that
               | is not being well explored.
               | 
               | Personally I'm having a hard time using dynamically-typed
               | languages right now because the amount of performance I'm
               | throwing away almost makes me nauseous. That's a
               | combination of the problem with being too dynamic, as I
               | said, and multi-decade-old implementations not being able
               | to be multithreaded very easily. I think a language that
               | solved those two things could be very interesting.
        
               | zozbot234 wrote:
               | Modern static languages generally support opt-in
               | "dynamic" facilities. For instance, C++ has its RTTI
               | support, Haskell has 'Dynamic' and Rust has the 'Any'
               | trait.
        
             | 082349872349872 wrote:
             | https://en.wikipedia.org/wiki/Restrict is an attempt to
             | declare that the programmer has avoided aliasing.
             | 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.
        
       | ncmncm wrote:
       | I 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 wrote:
         | > 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.
        
       | [deleted]
        
       | mhd wrote:
       | Pascal, Euclid, Ada - any other languages from the Algol family
       | named after mathematicians? Probably stopped after Wirth himself
       | deviated from the "pattern".
        
         | Athas wrote:
         | Also by Wirth:
         | https://en.wikipedia.org/wiki/Euler_(programming_language)
        
           | adrian_b wrote:
           | Euler 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.
        
             | ncmncm wrote:
             | C and C++ could still be fixed. Unfortunately not with
             | postfix ^. Unary -> might work.
        
         | messe wrote:
         | Even Algol could be considered indirectly named after a
         | mathematician: Muhammad ibn Musa _al-Khwarizmi_ - latinised as
         | _Algoritmi_ - _Algorithm_ - _Algorithmic Language_ - _Algol_.
        
           | ianai wrote:
           | Naming stuff after the discoverer/scientist/etc absolutely is
           | a thing across every discipline I've ran into.
        
             | 082349872349872 wrote:
             | Except computer languages are not named after their
             | designers[0] but as a tribute.
             | 
             | Not in the Algol family: Haskell
             | 
             | In the Algol (indeed Euclid) family: Turing
             | 
             | As yet vaporware(?): Noether
             | 
             | [0] generally, anyway: AWK is infamous; and I have some
             | suspicions about CPL and MCPL ... once may be coincidence,
             | but twice? Also, what about Popplestone's POP-n languages?
             | ... and the "Wolfram Language" should be no surprise to
             | anyone who's read the eponym's book.
        
               | cestith wrote:
               | Many languages are named after people, groups of people,
               | animals, and companies including fictional or
               | mythological characters. Some of them are indirect, being
               | named after something else named after the
               | person/beast/character.
               | 
               | Alice, Babbage, Curry, Dylan, Eiffel, FAUST, Godel, Hume,
               | Idris, Joule, Karel, Lua, Mercury, Nemmerle, Orwell,
               | Python, Sather, Turing, WATFOR, Yorick, and Zeno to my
               | understanding all named after people, groups of people,
               | companies, gods, etc.
               | 
               | Then there are others besides Wolfram Language named
               | after one or more contributors, like awk.
               | 
               | There are animals, plants, and gemstones - Zebra, Ant,
               | Perl, the older Pearl, Ruby, Crystal, Elm, Oak, Maple (to
               | represent Canadians, so kind of a two-fer), Emerald,
               | Cobra, Mouse...
               | 
               | I don't know that anything is peculiar to the Modula
               | family here.
        
           | sidpatil wrote:
           | Heh. I always thought it was named after the star system [1].
           | Never knew.
           | 
           | [1] https://en.wikipedia.org/wiki/Algol
        
       ___________________________________________________________________
       (page generated 2022-09-12 23:00 UTC)