[HN Gopher] Oberon (2009)
       ___________________________________________________________________
        
       Oberon (2009)
        
       Author : lproven
       Score  : 210 points
       Date   : 2022-08-26 09:55 UTC (13 hours ago)
        
 (HTM) web link (ignorethecode.net)
 (TXT) w3m dump (ignorethecode.net)
        
       | kissiel wrote:
       | What the hell is this site's encoding? However I try to decode
       | it, I get misdecoded 'u'.
        
         | progval wrote:
         | Originally UTF-8, then decoded as Latin-1, then re-encoded to
         | UTF-8. You can recompute the exact bytes in the page with this
         | Python code:                   >>>
         | 'Zurich'.encode('utf-8').decode('latin1').encode('utf-8')
         | b'Z\xc3\x83\xc2\xbcrich'
        
         | Someone wrote:
         | FTA: "When ETH ZA1/4rich started its own computer science
         | program in the 60s, buying computers from the US turned out to
         | be a bit of an issue. They were expensive and often unsuitable
         | for European use (what with our strange umlauts and stubborn
         | insistence on speaking languages different from English)"
         | 
         | I guess they started buying computers from the US :-)
        
         | perihelions wrote:
         | I think it's a double-encoding error. Text was encoded into
         | utf-8, whose bytes got misinterpreted as codepoints, and
         | encoded again. u in utf-8 is (c3 bc), and U+00c3, U+00bc are A,
         | 1/4 respectively.                   $ echo 'Zurich' | iconv -f
         | latin1 -t utf-8              ZA1/4rich
        
       | carapace wrote:
       | You can try Oberon OS in the browser, e.g.:
       | http://schierlm.github.io/OberonEmulator/emu-wasm.html?image...
       | 
       | Via Javascript emulator:
       | http://schierlm.github.io/OberonEmulator/
        
       | ekidd wrote:
       | Not only have I heard of Oberon, I've written code for it!
       | 
       | The Oberon programming language is a nicer-than-average
       | descendant of Pascal and Modula-2. The compiler was reasonably
       | fast even in the 90s.
       | 
       | The UI was strange enough to feel really interesting. As the
       | article mentions, you could type a command anywhere and click it.
       | And the older version I used had tiling windows, although this
       | seems to have changed.
       | 
       | But one especially neat feature is that the system was based
       | around a rich-text format that you could extend! I wrote a little
       | clock widget that I could instantiate anywhere, inside any rich
       | text, and it would give me a live time readout.
       | 
       | In practice, Oberon already felt like a toy system when I used
       | it, because it was missing tons of useful software. But as toy
       | systems went, it was rich and original and well-worth a couple of
       | weekends of exploring and coding.
       | 
       | If you enjoy the idea of operating systems that explored a
       | different path, this is one of the more interesting ones. If
       | you're fascinated by systems like the Lisp Machine, or SmallTalk,
       | or OLPC, where the entire system is meant to be easily
       | understandable and hackable, take a look.
        
         | slim wrote:
         | Also the whole OS was a 1.44' bootable floppy disk which booted
         | in 10 seconds on a 486
        
           | sleepydog wrote:
           | I think you meant it fit on 3.5" floppy drive (1.44 MB).
           | Fitting on a 1.44 foot floppy disk would be much less
           | impressive :P
        
             | mod wrote:
             | Bigger is better!
             | 
             | I'd love to see that disk. Maybe you'd wheel it out on one
             | of those TV carts all my teachers had.
        
               | Bluecobra wrote:
               | I think they did make 14" WORM optical disks at some
               | point:
               | 
               | https://i.redd.it/dgvtw0tmgxk81.png
        
               | aliqot wrote:
               | 8 inch floppies for the rest of us Phillistines
               | 
               | https://upload.wikimedia.org/wikipedia/commons/a/aa/Flopp
               | y_d...
        
               | karmakaze wrote:
               | I remember those 8" (WANG) floppies.
        
             | slim wrote:
             | absolutely :)
        
           | suprjami wrote:
           | Is there an image of this floppy floating around anywhere?
        
         | goatsneez wrote:
         | FYI, a flavor of Oberon will also fly to space soon it turns
         | out...
         | 
         | https://arxiv.org/abs/1709.03404v1
        
           | i_don_t_know wrote:
           | Interestingly, one of the authors (Felix Winkelmann) created
           | Chicken Scheme and their Oberon compiler appears to be
           | written in it.
        
           | Rochus wrote:
           | That's an interesting paper, thanks for the link. Though the
           | resulting language is barely Oberon anymore, since even type
           | extension is removed, not only dynamic memory management (and
           | with it the GC). It seems to have less features than Oberon-0
           | described in Wirth's compiler book.
        
           | 082349872349872 wrote:
           | > _...all memory accesses are indirect ... module-data is
           | position independent and may be moved in case memory should
           | fail due to radiation damage._
           | 
           | I once used a debugger that shipped with a rather snarky
           | easter egg command: "find my bug". One of its more useful
           | suggestions was "Maybe a cosmic ray error? Use smaller
           | chips!".
        
             | PcChip wrote:
             | Wouldn't smaller chips make the problem worse?
        
               | 082349872349872 wrote:
               | I think it jocularly meant "use something with fewer
               | gates and a smaller cross section", not "use a smaller
               | feature size". Or I could easily have misremembered: this
               | was all last century.
        
               | AnimalMuppet wrote:
               | > Or I could easily have misremembered: this was all last
               | century.
               | 
               | Don't understate the difficulty of remembering. This was
               | all last _millennium_.
        
               | aliqot wrote:
               | Important not to also understate that some of us spent
               | more time in the former than the current.
        
               | tanakian wrote:
               | True! Smaller and closer the units, more probability that
               | the particle would hit something useful.
        
       | [deleted]
        
       | mhd wrote:
       | The timeline does skip a bit too fast over Medos-2[1], the
       | predecessor of the Lilith's operating system, using Modula-2.
       | That plugs the gap between the Alto-Oberon timeline, with Oberon
       | basically being both a continuation of that and a simplification
       | of Smalltalk and the whole software environment in total
       | (surprise: Wirth is not a fan of it [2][3]).
       | 
       | [1]: https://www.research-
       | collection.ethz.ch/handle/20.500.11850/...
       | 
       | [2]: https://people.inf.ethz.ch/wirth/Articles/LeanSoftware.pdf
       | (PDF)
       | 
       | [3]: https://en.wikipedia.org/wiki/Wirth%27s_law
       | 
       | [Edit: corrected reference to Ceres, which was the Lillith
       | _successor_ ]
        
       | romwell wrote:
       | Never heard of?
       | 
       | Come on! It's the most interesting thing yet to happen in desktop
       | computing.
        
         | rbanffy wrote:
         | I made the same complaint when Apple discontinued the Newton.
         | It was their most interesting computer. In the long run, an
         | evolutionary dead-end (Unix won), but still interesting.
        
         | lproven wrote:
         | I personally tend to agree with you, and yet, as a researcher
         | and writer about OSes and so on, I never even heard of it until
         | a few years ago. It is, sadly, quite obscure.
        
       | scroot wrote:
       | The Oberon book (by Wirth, updated in 2013) is excellent in that
       | it describes the entire Oberon system, from the processor on up
       | in a single volume.
       | 
       | https://people.inf.ethz.ch/wirth/ProjectOberon/PO.System.pdf
        
         | whartung wrote:
         | For whatever reason, that PDF is incomplete. The ToC goes
         | through Chapter 16, but the text includes only up to Chapter 9.
         | 
         | Part 2 is:
         | https://people.inf.ethz.ch/wirth/ProjectOberon/PO.Applicatio...
         | 
         | Part 3 is:
         | https://people.inf.ethz.ch/wirth/ProjectOberon/PO.Computer.p...
         | 
         | A fun point about the 3rd part. If you've ever been flummoxed
         | by the basics of floating point math, part 3 discusses the
         | fundamentals in 2 pages with a big fonts. One of the most
         | succinct discussions I've seen on FP.
         | 
         | I can't seem to find the original 1992 edition in PDF. It feels
         | like a lot of information (not just source code) is culled from
         | the later versions (2005, 2013) of this book.
        
       | zelphirkalt wrote:
       | Too bad the link in the article is offline:
       | http://bluebottle.ethz.ch/ and
       | http://www.ocp.inf.ethz.ch/wiki/OCP/Downloads takes forever to
       | load somehow.
        
         | lproven wrote:
         | "Bluebottle" is now called A2 and it's on Github now:
         | 
         | https://github.com/btreut/a2
         | 
         | I've done quite a bit of editing on the Wikipedia article,
         | including bringing stuff across from Russian Wikipedia (via
         | Google Translate).
         | 
         | https://en.wikipedia.org/wiki/A2_(operating_system)
         | 
         | The most active user and development community for A2 seems to
         | be in Russia. There's a Telegram group too but I don't speak
         | the language so I can't follow very much of it at all.
        
           | indeyets wrote:
           | This link seems to be active too
           | http://cas.inf.ethz.ch/projects/a2/
        
       | mwexler wrote:
       | This was going to be the next Pascal... back when Pascal was a
       | thing. I do remember chatting with some Borland folks about how
       | they would be supporting it (Turbo Oberon?), but they weren't
       | really very enthusiastic about it. Of course, that was early 90s
       | and they were still shipping floppies, so...
       | 
       | (edit: didn't remember the year, so left it as a range)
        
         | mhd wrote:
         | You're missing one step here, as the "next Pascal" was Oberon's
         | predecessor Modula-2. For which there were some 8/16-bit
         | compilers around, including a _Turbo Modula-2_.
         | 
         | Didn't seem to work out back than for a few reasons, one
         | probably simply being that "Pascal" had a certain name
         | recognition. Also, OO was coming around which Modula-2 didn't
         | have, and by the time Oberon was invented, _Object Pacal_ was
         | already a thing.
        
           | gtirloni wrote:
           | I remember being impressed by Modula-3 back then. I wish it
           | wasn't so difficult to compile the compiler.
        
             | mhd wrote:
             | Ah, Modula-3, one of my perennial favorites. Definitely a
             | different continuation of Modula-2 than Wirth's own Oberon.
             | Agree on the tooling issues. If it would've "sold" better,
             | so many languages of the last two decades could've been
             | avoided.
        
       | lboasso wrote:
       | If you want to try out only the Oberon language, you might be
       | interested in oberonc [0] an oberon-07 self-hosting compiler for
       | the JVM. There are other several Oberon implementations for
       | different platforms listed here[1]
       | 
       | [0] https://github.com/lboasso/oberonc
       | 
       | [1] http://oberon07.com/compilers.xhtml
        
         | Rochus wrote:
         | [1] is not complete; this one is missing:
         | https://github.com/rochus-keller/Oberon/ ;-)
        
           | _fz_ wrote:
           | Project Oberon 2013 emulator and RISC compiler in Go:
           | https://github.com/fzipp/oberon
           | https://github.com/fzipp/oberon-compiler
        
             | Rochus wrote:
             | Looks like quite a diligence; I wrote an Oberon to C++
             | transpiler some years ago; here is a C++ version of the
             | Oberon system: https://github.com/rochus-
             | keller/OberonSystem/tree/master/CP.... My Oberon+ compiler
             | generates CIL bytecode and C99 source code. Here is a
             | version of the Oberon system which runs on .NET (cross-
             | platform, without emulator): http://software.rochus-
             | keller.ch/OberonSystem_SDL_CLI_Assemb.... And here is the
             | corresponding C99 version: http://software.rochus-
             | keller.ch/OberonSystem_ObxIDE_Cgen_20.... Both are directly
             | generated from the sources in https://github.com/rochus-
             | keller/OberonSystem/tree/FFI, using SDL2 for platform
             | independence.
        
       | Koshkin wrote:
       | I remember trying out an Oberon-07 compiler some years back. The
       | speed at which it worked was impressive: it was able to build
       | itself and the standard library modules in a small fraction of a
       | second.
        
         | JulianMorrison wrote:
         | Pascal family languages parse quickly because they won't let
         | you use anything before it's defined.
        
           | lproven wrote:
           | True, AIUI, but there's a bit more to it than that.
           | 
           | This paper is very readable and talks about Niklaus Wirth's
           | _ruthless_ approach to compiler optimization. https://citesee
           | rx.ist.psu.edu/viewdoc/download?doi=10.1.1.90...
        
           | jdvh wrote:
           | That's not why Pascal compiles quickly. Resolving undefined
           | symbols isn't difficult or slow, it just means that you have
           | to keep track of what's resolved and what's unresolved and
           | that takes up memory, which was very precious back in the old
           | days of Pascal. Pascal is designed for very fast single-pass
           | compilation, but symbol resolution is only a small part of
           | it.
        
           | [deleted]
        
           | fm77 wrote:
           | Well, not really. Consider the following:
           | type           ItemPtr = ^Item;                SomeOtherType
           | = record             a,b,c:integer;           end;
           | Item = record             Data:string;
           | Next:ItemPtr;           end;
           | 
           | The first time the parser hits "Item", its not defined.
        
             | pklausler wrote:
             | Pascal require(s|d) a "forward" declaration on such a type,
             | no?
        
           | lloydatkinson wrote:
           | Probably a controversial opinion, but I absolutely wish this
           | was more common. It's a thing in F# as well. With JS/TS
           | projects I always ensure the ESLint rule for only using
           | what's been declared before is enabled.
           | 
           | I don't want to scroll up and down a file constantly when
           | referring to previous things that might reference something
           | at the bottom of the file, which then references something
           | near the top, which then references something in the middle,
           | which then references something at the bottom again... I
           | despise working in that manner.
        
             | quickthrower2 wrote:
             | I find it a non issue when you can use go to definition and
             | go to previous position shortcuts.
        
         | muth02446 wrote:
         | I am trying to do something similar here: http://cwerg.org
         | 
         | Starting with a very efficient compiler backend.
        
       | samsquire wrote:
       | I am interested in alternative GUI tech. If you find this
       | interesting you might find my declarative frontend idea
       | interesting called additive-guis
       | 
       | https://GitHub.com/samsquire/additive-guis
       | 
       | The idea is you define how the GUI should appear by describing
       | it. The GUI changes in real time based on what you describe.
       | 
       | And I also designed a GUI primitive I called GUI thunking,
       | inspired by Haskell. The idea is you can chain together behaviour
       | on a GUI by interacting with the future directly.
       | 
       | https://GitHub.com/samsquire/gui-thunks
        
         | aliqot wrote:
         | You might be interested in Acme and Rio from the Plan9 system!
         | It had some interesting UI paradigms like 3 button clicking and
         | highlight to instantiate.
         | 
         | Additive guis seems like a really cool approach that I wish we
         | had more of these days given that everything seems to be web-
         | based anyway. Most interfaces sadly want to be a mishmash of
         | MacOS and a catch-all mobile operating system.
         | 
         | https://en.wikipedia.org/wiki/Rio_(windowing_system)
         | 
         | https://9p.io/wiki/plan9/Using_acme/index.html
        
         | tanakian wrote:
         | >The idea is you define how the GUI should appear by describing
         | it. The GUI changes in real time based on what you describe.
         | 
         | That's how Oberon Gadgets were working. Later the same idea was
         | used in Blackbox Component Builder.
        
       | nightpool wrote:
       | What does "HLL" stand for here? Wikipedia offers "High-level
       | language", but I can't quite get that to fit in this context.
        
         | alexisread wrote:
         | It does mean high level language, and in this context it's
         | trying to illustrate that Oberon is used to write the OS and
         | drivers, despite having GC, a repl, objects and other high-
         | level constructs (compare with C for example).
         | 
         | The general assumption is that if you don't have exact control
         | over memory and threading, you can't write an OS.
        
         | lproven wrote:
         | Yes, high-level language. (I submitted this post & wrote the
         | title.)
         | 
         | Oberon is _both_ the programming language _and_ the operating
         | system, including the IDE and the compiler and the UI.
         | 
         | "Oberon" is the name of the whole thing, and it's about 30K LOC
         | in total. The entire thing is smaller than a typical Linux
         | console-mode text editor.
         | 
         | The original OS -- that is the entire thing, from kernel to
         | tiling UI to compiler -- was about 12K LOC:
         | http://www.edm2.com/0608/oberon.html
         | 
         | The compiler is about 4K LOC:
         | https://dercuano.github.io/notes/oberon.html
         | 
         | In Linux terms it is hard to even comprehend how tiny this OS
         | is.
        
           | nightpool wrote:
           | Kind of a strange thing to mention in the title given that it
           | doesn't show up anywhere in the article at all (which is
           | entirely about the UI/UX)
        
             | lproven wrote:
             | The article is the best introduction and overview I know.
             | There are many more comprehensive sites.
             | 
             | The revival is worth a look:
             | 
             | http://www.projectoberon.com/
             | 
             | This academic paper is highly readable and interesting:
             | 
             | https://news.ycombinator.com/item?id=15704806
             | 
             | Wikibooks has excellent docs in depth:
             | 
             | https://en.wikibooks.org/wiki/Oberon
             | 
             | But I often cite the Ignore the Code post when someone
             | doesn't know what Oberon is. I used it in a comment
             | elsewhere on HN, and thought "why not submit it?" and here
             | we are. The word "language" wouldn't fit in the title,
             | AFAICR.
        
         | [deleted]
        
       | butterisgood wrote:
       | This seems to talk about the variant called Active Oberon. It's
       | an interesting and expressive language that's fairly active.
       | 
       | It can run native or hosted. It can build binaries for your host
       | or for Oberon itself. The Fox compiler is pretty neat!
        
       | samoit wrote:
       | This operating system looks pretty much like Plan9. I do not know
       | if there is any relation between those two.
        
         | Jtsummers wrote:
         | The main thing it shares with Plan 9 is in the Acme editor
         | which was inspired by Oberon.
         | https://news.ycombinator.com/item?id=32606415
        
           | samoit wrote:
           | Thanks
        
             | tanakian wrote:
             | Inferno got more influence from Oberon system, because in
             | Inferno userspace programs were working in the same address
             | space.
             | 
             | But in Oberon everything worked in the same address space.
        
       | dang wrote:
       | Related:
       | 
       |  _Oberon OS Walkthrough (2009)_ -
       | https://news.ycombinator.com/item?id=25786470 - Jan 2021 (59
       | comments)
       | 
       |  _Oberon (2009)_ - https://news.ycombinator.com/item?id=6498878 -
       | Oct 2013 (31 comments)
       | 
       |  _Oberon, a delightfully insane system_ -
       | https://news.ycombinator.com/item?id=593323 - May 2009 (30
       | comments)
       | 
       | (Lots of previous Oberon threads generally so maybe I won't list
       | them)
        
       | KingOfCoders wrote:
       | Had to learn at university :-)
        
         | jon_adler wrote:
         | Same. Professor John Gough was heavily involved in Modula-2 and
         | Oberon compilers at the time. I really liked using it.
        
       | haspok wrote:
       | The zooming reminds me of Prezi, except that Prezi is in 3D...
       | (maybe Oberon is where they got their original idea from?).
       | 
       | As interesting as it sounds and looks, I cannot imagine
       | constantly zooming in and out (or panning) just to switch
       | windows. Maybe I am so indoctrinated with the standard Windows
       | task switcher concept that I don't want it to work in any other
       | way. I was also completely lost when I tried to create a Prezi
       | presentation instead of Powerpoint.
       | 
       | On the other hand it is great to see something different in the
       | UI world. I remember only one such other concept that didn't make
       | it into mainstream: the UI where you just move the mouse, but
       | don't need to click...
        
         | galaxyLogic wrote:
         | Instead of zooming I think a better approach is Windows-within-
         | Windows. Or is that the same thing? You don't need to "zoom" so
         | much as "enter" into a sub-desktop. Which is different than
         | multiple desktops side-by-side.
         | 
         | Smalltalk had/has this feature. You create a new "project-
         | window". You can then "enter" it and within it you can open any
         | number of windows including project-windows.
         | 
         | This works really well with programming where you are
         | performing a task which requires a set of windows to be open, a
         | class-browser, method-browser, change-list-window, debugger
         | etc. As you are programming you soon discover you will need to
         | do something else "first", perhaps fix a bug. You open a new
         | project-window and "enter into it" to do that. Your current
         | context of whatever you were doing remains as is in the parent
         | window. Perhaps you leave an open debugger there halted at a
         | given stack-frame, so you can continue that debugging later.
         | Maybe even tomorrow.
         | 
         | When your bug is fixed you close its sub-project-window and
         | come back up to what you were doing before.
         | 
         | If you can't fix the bug immediately you can leave its project
         | window in place but exit into the parent-project and do
         | something else there while keeping the bug-fix project open,
         | and visible as a window-icon in its parent project-window.
         | 
         | The same approach could be adopted by the whole OS, and in a
         | sense Smalltalk is an OS. So I'm waiting for MS or Linux or Mac
         | come up with something similar. Not "multiple desktops" but
         | "nested desktops". Or is there something like that already
         | (outside of Smalltalk)?
        
           | 4bpp wrote:
           | Up until the mid-2000s, a lot of complex GUI applications
           | (such as Visual Studio 6) in the Windows world used a
           | paradigm somewhat ambiguously named MDI (cf.
           | https://documentation.help/Win32/MDI%20Frames.htm) which is
           | what you describe sounds like. Unfortunately, UI design/HCI
           | fashions turned against it hard and it went all but extinct;
           | last I checked, few GUI toolkits even support it. Gtk was on
           | the vanguard of the anti-MDI _Bildersturm_ since its
           | inception, and Qt 's implementation
           | (https://doc.qt.io/qt-6/qmdiarea.html) already suffered from
           | bit rot when I checked it out some 10 years ago.
        
       | s-video wrote:
       | I installed the Oberon OS (A2) emulator and showed it to my
       | friend. We burst out laughing at that program that makes a
       | skeleton run across the screen. If you keep executing it, it just
       | spawns more skeletons and we had a skeleton parade.
        
       | smm11 wrote:
       | Linux installs that didn't understand your video card had the
       | zoomable desktop nailed down in the late-90s.
        
       | pacod wrote:
       | When I started to study computer sciences in Germany in 1991, we
       | used Oberon on X11 terminals during the the initial "Praktische
       | Informatik I" lecture as our first programming language. Oberon
       | being new, the professor said he wanted to make sure that
       | everyone starts under the same conditions and with no pre-
       | knowledge. So we wrote our linked lists, hash tables, trees,
       | sorting algorithms etc. in Oberon.
       | 
       | That time almost all students had a track-record coding on Apple,
       | Commodore or Atari homecomputers and/or had worked with Turbo-
       | Pascal and -C. Because the Oberon system was not very stable nor
       | user friendly, the Oberon environment was met only with little
       | support by the students. For example I remember that the compiler
       | crashed reproducible on certain inputs. There also was no
       | debugger and the editor did not meet expectations.
       | 
       | After finishing the lecture, most students (including) me, never
       | touched Oberon again. But hey, let's re-visit it after 30 years
       | again and see how it feels today.
        
       | dfawcus wrote:
       | As I described it to some folks recently, Go can be simply
       | characterised as a slightly stripped version of the Oberon-2 (or
       | Component Pascal) language, recast in a C like syntax, and with a
       | number of small additions.
       | 
       | Removed from Oberon-2: Sets, Type Extension (classful OO scheme)
       | 
       | Added by Go: Maps, Slices, Strings, Interfaces, Channels,
       | Coroutines.
       | 
       | Such that I suggested it is well worth reading the Oberon-2
       | language report.
       | 
       | As to the coroutines, possibly Oberon-2 had them in its standard
       | module library (as Modulo-2 did)?
        
         | Rochus wrote:
         | > Go can be simply characterised as a slightly stripped version
         | of the Oberon-2
         | 
         | Well, not really; there are not much similarities between
         | Oberon and Go besides the receiver syntax of Oberon-2 bound
         | procedures (which was invented by Mossenbock btw) and the fact
         | that both are garbage collected. In your list "removed from
         | Oberon" you should add type inclusion (Go doesn't even have
         | implicit coercion); there is an intersection of keywords and
         | also := appears in Go, but the semantics are rather different;
         | coroutines were defined as an option in the Oakwood guidelines,
         | but by different people than the language authors; I never met
         | an Oberon compiler which implements them.
        
           | dfawcus wrote:
           | Yeah - I skipped the type inclusion, as I just viewed it as a
           | misfeature, assuming we're talking about the implicit casts
           | between different number types.
           | 
           | As to ':=' in Go, yeah - a new thing over Oberon-2. Since
           | assignment in Go uses C style '=' whereas Oberon uses Pascal
           | style ':=', I certainly was not confusing them.
           | 
           | The characterisation came about because of an implicit
           | complaint (from C programmers) about a choice of Go for a
           | project. Now never having used Oberon-2, but having read the
           | report, I used the comparison to a stripped version it as a
           | way of showing how simple the language actually was.
           | Something like 25 pages being sufficient to describe it.
           | 
           | The things which struck me were:                  O2 MODULE
           | becomes Go package (and similar syntax use)        O2 NEW
           | retained as Go new, but &Foo{} generally preferred        O2
           | export of symbol via '\*' tag becomes Go export via capital
           | letter.        O2 Open arrays replaced by Go slices or
           | strings.        O2 WITH because Go 'type switch'        O2
           | 'type guard' becomes Go 'type assertion'        O2 VAR
           | parameters to PROCEDURES become Go pointer parameters to
           | funcs
           | 
           | But in the end it is very much a subjective thing, so unless
           | using the non classful parts of Oberon-2 reveals significant
           | differences, I'd have to stick with my evaluation.
        
             | Rochus wrote:
             | > Something like 25 pages being sufficient to describe it.
             | 
             | Wirth attached importance to the fact that there are only
             | 16 pages; on closer inspection, however, one realizes that
             | not everything has been specified and the omission of
             | redundant descriptions easily leads to ambiguity in the
             | given writing style.
             | 
             | > in the end it is very much a subjective thing
             | 
             | The differences and little similarities, as far as
             | specified, are objectively ascertainable. But of course
             | there are far more important things. From my point of view
             | Oberon (including Oberon-2 and especially Oberon-07) is too
             | minimalistic for non-academic projects anyway. That's why I
             | threw my hat into the ring with Oberon+ (http://www.oberon-
             | lang.ch ); its specification is still small with about 50
             | pages.
        
           | tanakian wrote:
           | coroutines module comes with Oberon S3 system. also Ulm's
           | Oberon compiler has coroutines module.
        
             | Rochus wrote:
             | Thanks. I don't know the Ulm compiler, and I unfortunately
             | don't have System 3 (can you please provide a link with the
             | source code and/or a working Linux binary?), but I have the
             | source code of V2 and V4 (both ETH and Linz versions, from
             | 1992 to Linz 1.7) where there are no coroutines.
        
         | mseepgood wrote:
         | > Added by Go: Maps, Slices, Strings, Interfaces, Channels,
         | Coroutines.
         | 
         | Also added by Go: Type parameters (generics)
        
           | dfawcus wrote:
           | The characterisation was against Go 1.15 as that is what is
           | current in the version of Debian we're using (11?).
           | 
           | So other than noting that Go 1.18 adds Generics but they can
           | be ignored due to us targeting 1.15, they weren't mentioned.
           | 
           | As I recall the another thing we get in 1.18 (as a side
           | effect of the Generics constraints mechanism) is a slight
           | improvement in static checking for certain constructions of
           | type switch.
        
       | groos wrote:
       | Oberon was a mostly successful experiment in minimalism. Once
       | when I was surprised by a compile error that I didn't think was
       | correct, it didn't take me too long to pinpoint the line in the
       | Oberon compiler source (written by Wirth) which was causing it
       | and understand why it was the way it was. You cannot do this with
       | any 'modern' system today.
        
       | btbuildem wrote:
       | Interesting to learn about this! It's not as drastically
       | different as expected from the initial write-up.
       | 
       | The zoom-to-switch-context reminds me of Figma (a design tool) --
       | personally I like the metaphor of managing hierarchy with scale
       | while mapping spatial relationships to functional ones.
       | 
       | The idea of mixing "data" and "code" is intriguing. I might have
       | to play with an install locally!
        
       | ducktective wrote:
       | I think tilling WM workflows are more practical than the UI
       | design the article is describing:
       | 
       | >Everything is a Command Line
       | 
       | Tilling WMs naturally favors TUI apps and opening up a quick
       | terminal in which you input text to do your task.
       | 
       | >To launch applications or execute commands, you first type them
       | somewhere and then middle-click them
       | 
       | keybinding meta+d: dmenu-run
       | 
       | >Everything is Zoomable
       | 
       | Tilling WMs with workspaces (or tags) are more efficient than
       | context switching by trying to find the desired window via
       | zooming in and out.
        
         | zokier wrote:
         | > Tilling WMs naturally favors TUI apps
         | 
         | I don't see how that is the case at all
        
           | rbanffy wrote:
           | I think that it could be because text stream based apps (such
           | as a TTY and the utilities that make no assumptions about
           | screen geometry) are friendlier than, say, a web browser
           | rendering a page that assumes its canvas is 1920 pixels wide.
           | 
           | OTOH, you can make a TUI that (rightfully) thinks the
           | terminal window is always 80x25 (because God made the VT-100
           | that way for a reason) and it'll be very hostile to any
           | tiling WM.
        
         | DaiPlusPlus wrote:
         | > Tiling WMs naturally favors TUI apps
         | 
         | More like: "Tiling window managers only work well with
         | resizable TUI apps" - there's still far too many text-mode
         | programs that assume fixed-size console buffer dimensions
         | (think: software still using ancient versions of ncurses) -
         | also assuming that your chosen terminal emulator is capable of
         | dynamically resizing (and re-flowing) normal stdout text.
        
           | ducktective wrote:
           | The most widely used GUIs (web apps) are already resize-
           | friendly (like Bootstrap or flex box).
        
             | DaiPlusPlus wrote:
             | Those aren't TUIs unless they somehow work in Lynx.
        
           | mhd wrote:
           | I don't know what definition of TUI we're using, but if we're
           | talking about ncurses style whole-terminal-window GUI,
           | there's no inherent advantage. Responsiveness being limited
           | by character width actually sets harder limits for "TUI"s.
           | 
           | It _does_ favor the kind of text-centered UI done by Oberon-1
           | and imitated by Plan 9 's ACME, where there's little to no
           | use of x-y addressing and text just flows.
        
       | loloquwowndueo wrote:
       | The text-based UI reminds me of the Acme text editor from Plan 9
       | (it's now also available for other OS so easy to try) :
       | 
       | https://en.m.wikipedia.org/wiki/Acme_(text_editor)
        
         | pdubroy wrote:
         | Acme was inspired by Oberon, and Oberon was inspired by a
         | system called Cedar[1] which was created at Xerox PARC.
         | 
         | From "Acme, A User Interface for Programmers"[2] by Rob Pike:
         | 
         |  _> Cedar was, however, the major inspiration for Oberon
         | [Wirt89], a system of similar scope but much smaller scale.
         | Through careful selection of Cedar's ideas, Oberon shows that
         | its lessons can be applied to a small, coherent system that can
         | run efficiently on modest hardware. In fact, Oberon probably
         | errs too far towards simplicity: a single-process system with
         | weak networking, it seems an architectural throwback._
         | 
         |  _> Acme is a new program, a combined window system, editor,
         | and shell, that applies some of the ideas distilled by Oberon.
         | Where Oberon uses objects and modules within a programming
         | language (also called Oberon), Acme uses files and commands
         | within an existing operating system (Plan 9). Unlike Oberon,
         | Acme has does not yet have support for graphical output, just
         | text. At least for now, the work on Acme has concentrated on
         | producing the smoothest user interface possible for a
         | programmer at work._
         | 
         | [1]:
         | http://www.bitsavers.org/pdf/xerox/parc/techReports/CSL-83-1...
         | 
         | [2]:
         | https://www.usenix.org/legacy/publications/library/proceedin...
        
           | 082349872349872 wrote:
           | Niklaus Wirth spent a sabbatical at PARC[0] in 1976, so the
           | inspiration was direct (or at least via Mesa).
           | 
           | [0] in fact, he's said he built the FPGA Oberon[1] because
           | his favourite mouse[2] was a departure gift from PARC, but of
           | course, he can't buy any system today that would allow him to
           | keep using it, so he built one. Now that's a yak shave.
           | 
           | [1] https://news.ycombinator.com/item?id=32606760
           | 
           | [2] I've seen a not-still-in-use wooden mouse from the
           | Englebart days, but I believe Bucky's is plastic.
        
       | mhd wrote:
       | > Oberon is very much in active use at ETH Zurich. We used it as
       | one of our main operating systems.
       | 
       | The article being from 2009, this must've been an interesting
       | period for the students, as back then the introductory
       | programming course was using Eiffel, taught by Bertrand Meyer
       | himself.
        
         | jeffreygoesto wrote:
         | I remember a cooperation with some ETH people (Sjur Vestli and
         | his master brain Roberto?) trying to use realtime oberon to
         | enter the midsize league of robocup end of the 90s. Never
         | happened to participate which was a pity.
         | 
         | Ah. Found some traces:
         | https://www.ifr.mavt.ethz.ch/research/xoberon/
        
         | ThePadawan wrote:
         | My 0.02CHF: I studied at ETHZ from 2008 to 2015, and I've heard
         | about Oberon once or twice back then, and read about it at
         | least twice that much on HN.
         | 
         | Never used it, never knew anyone who used it, never knew anyone
         | who worked on it (though I believe the chair had slots for
         | theses available at the time).
        
           | bluelu wrote:
           | I graduated 2007 at the ETHZ.
           | 
           | When I started studying, some student pcs were even running
           | Oberon (no login was required). Only some IT students used
           | them as it was too complicated for students from other
           | departments. They were then later replaced with linux/windows
           | machines.
           | 
           | If my memory serves me right, when you bought a laptop
           | through the university neptun program, you had oberon
           | preinstalled too (or at least a dvd to install it) was
           | provided.
           | 
           | As for Bertrand Meyer, I also visited his programming class.
           | I still remember that he really focused on invariants, and
           | you had to write each code line basically twice.
        
             | kitsune_ wrote:
             | I just had a flashback, we had to do a weird exercise with
             | hats and long strings between students in Meyer's class
             | when he talked about inheritance.
        
             | Shacklz wrote:
             | > that he really focused on invariants
             | 
             | Oh the horror those classes were. Meyer is a great guy, and
             | in hindsight I appreciate his ideas quite a bit. But the
             | idea to take Eiffel for an introductory course, the
             | questionable exercises (being encouraged/forced to write
             | the code twice, once as invariant and once for the actual
             | execution) plus the terrible Eiffel-IDE made those classes
             | very easy to loathe.
        
               | ThePadawan wrote:
               | I like to look back on my college years and ask myself
               | "well, what did I actually learn".
               | 
               | And looking back, "I learned to deal with being
               | completely overwhelmed with shitty tools, questioning if
               | the opposite party has any clue what they're talking
               | about, then had to work out how to pass that class" seems
               | like one of the most useful career skills to pick up in
               | your first year.
               | 
               | Who cares about the programming language.
        
             | flwidmer wrote:
             | Mandatory reference: https://vole.wtf/coder-serial-killer-
             | quiz/ I'm sure everyone who was in his classes played this
             | game :D
        
           | flwidmer wrote:
           | I was there from 2006 to 2012. The OS course (I think that's
           | third or fourth semester) was being taught with Active
           | Oberon. Must have been in 2007 or 2008, so might have changed
           | right after. Eiffel, Oberon, Event-B are just the most
           | notable examples of things that we were being taught that
           | have never become mainstream.
        
             | cestith wrote:
             | When I started uni the program was switching from Pascal
             | for existing CS majors to Ada for new majors.
        
             | pjmlp wrote:
             | Yet those are the kind of things universities are great,
             | one get to learn about technologies that changes one's
             | point of view (ideally), something that self taught or
             | professional schools hardly achieve.
        
               | ekidd wrote:
               | I think that my ideal CS education would include 3
               | things:
               | 
               | 1. "We're going to ask you to build real software, with
               | real tools, in a group. Even if it's only for one
               | course."
               | 
               | 2. "We're going to ask you to do some theory and write
               | some proofs."
               | 
               | 3. "We're going to show you some wild stuff that looks
               | like it belongs on an alternate timeline."
               | 
               | (3) might be something like Oberon, or Racket, or some
               | eccentric faculty project. Or even just teaching all your
               | CS majors Haskell, if you don't have any genuinely
               | eccentric faculty projects to inflict on students.
               | 
               | Innovation is often driven by people who are aware of
               | what might have been.
        
               | mhd wrote:
               | I think the choice of _first_ language really says a lot
               | about the whole program. More so today than yesteryear,
               | where there was a larger contigent of people with prior
               | exposure to programming.
               | 
               | Do you start more abstract, and if so with functional,
               | imperative or OO underpinnings? Do you intend to switch
               | languages rather soon or later?
               | 
               | The good thing about Oberon, language set aside, is that
               | you could get started without a lot of adminstrative
               | debris. No 80% of the screen covered in an IDE, not even
               | a big ol' "public static void main" that you're told to
               | gloss over.
               | 
               | I can see good arguments for sticking to one language
               | throughout many courses, too. Sadly that often means C++.
        
               | pjmlp wrote:
               | Well, that is how CS is mostly taught in European
               | universities, across their software engineering degrees.
               | 
               | For those that want CS theory only, there is applied
               | mathematics into computation majors.
        
               | throwaway17_17 wrote:
               | I think had I been a student with those options I
               | wouldn't have ended up a lawyer by profession. The
               | American university's CS, in general, is not that
               | appealing (with a few exceptions obviously).
        
               | ThePadawan wrote:
               | > Or even just teaching all your CS majors Haskell, if
               | you don't have any genuinely eccentric faculty projects
               | to inflict on students.
               | 
               | We got taught Eiffel Freshman year, C and Haskell
               | Sophomore year, and after that, whenever a course used
               | another language (Java, C#, C++), the prof just said
               | "you'll pick it up".
               | 
               | (That's leaving out the usual-for-academia-but-still-
               | weird stuff like MATLAB and Verilog)
        
           | huerlisi1 wrote:
           | Did start there in 1999. We had some Oberon exposure, but not
           | that much. There were some workstations upstears in the
           | computer room that did run the OS. Those were almost never
           | occupied... So we simply used them to connect to some Solaris
           | workstations using X forwarding:-)
        
           | Shacklz wrote:
           | You probably had some classes with Gutknecht at some point,
           | who apparently contributed significantly to Oberon.
           | 
           | That being said, I'm in the same boat as you. I have
           | definitely heard more about Oberon here on HN than at ETHZ.
        
       | pjmlp wrote:
       | I surely have used it, during 1996 - 2000.
       | 
       | Thanks to Oberon I learned what is possible to achieve with GC
       | enabled systems programming languages, it was this experience to
       | lead me to play archeology on our library, Usenet, gopher, FTP,..
       | and discover what the world of programming languages outside Bell
       | Labs actually like.
       | 
       | Young pupil fell astray from UNIX church never to look into it
       | again with the same wonder.
        
         | nivethan wrote:
         | As someone with wide eyed wonder at Bell Labs what
         | languages/OSes would you recommend to get as far away from the
         | unix world?
        
           | pjmlp wrote:
           | Plenty, http://progtools.org/article_new.php?name=safe_system
           | s&secti...
           | 
           | Or you can start with Burroughs, VAX/VMS, Mesa/Cedar, Lisp
           | Machines, Smalltalk, IBM i, z/OS.
        
       | ElevenLathe wrote:
       | Oberon is also a great beer from Bell's in Kalamazoo, MI.
       | 
       | https://bellsbeer.com/beers/oberon-ale/
        
         | Rochus wrote:
         | cheers
        
       | mwcampbell wrote:
       | > Oberon is very much in active use at ETH Zurich. We used it as
       | one of our main operating systems.
       | 
       | I wonder if any blind students, or other disabled people who need
       | accessibility tools, had to confront the general lack of
       | accessibility in simple, niche GUI systems such as this one. I
       | suppose someone could have been given the assignment to extend
       | Oberon with a screen reader or other accessibility tool, ideally
       | without having to implement their own speech synthesizer first.
        
         | samatman wrote:
         | It seems (and this surprises me not at all) that this was
         | addressed in 1998 in Linz, Austria:
         | https://www.dinf.ne.jp/doc/english/Us_Eu/conf/csun_99/sessio...
        
           | mwcampbell wrote:
           | Very cool, and forgive me for not doing more research myself.
           | Also, I should have thought of using a Braille display
           | instead of a speech synthesizer, since for that, all they
           | would have had to do is send commands to a device connected
           | to a serial port. Of course, that would be more complicated
           | now with USB, never mind Bluetooth.
        
             | gostsamo wrote:
             | Check the prices of braille displays though.
        
               | samatman wrote:
               | ETH Zurich can afford them.
        
             | unnouinceput wrote:
             | You know, serial to usb convertors (and vice-versa) do
             | exists, and are like $5 only.
        
         | [deleted]
        
       | jrm4 wrote:
       | Dangit. This is the sort of thing that's equal parts frustrating
       | and exciting, in that I've had a lot of these ideas independently
       | and this is the first time I'm discovering that someone has
       | implemented them. Especially this infinite canvas idea, which I'm
       | very confident would work wonders for me (and many other people)
       | mostly owing to the power of "spatial memory," which I feel like
       | is a wildly underused human feature. (e.g. memory palaces)
        
         | joshspankit wrote:
         | An important thing to be aware of is that spatial memory is not
         | universal, and thee is quite a bit of variation among those who
         | have the ability to use it successfully.
         | 
         | I don't say this to discourage. Quite the opposite: I say this
         | to say if someone doesn't understand the benefits of your ideas
         | don't take it as a general "this will not work" but instead go
         | share them with someone else
        
         | chillpenguin wrote:
         | Croquet's Greenlight app has the canvas idea in a web app. Also
         | it is multi-user. Worth checking out.
        
       ___________________________________________________________________
       (page generated 2022-08-26 23:00 UTC)