14 ms·
Oberon – The Overlooked Jewel [pdf]
- Xeoncross 9y agoI really don't like having to type the shift key so often on QUERTY. A language where uppercase keywords are the norm sounds like it would lead to RSI. Then again, we would probably have typescript, coffeescript, etc.. version of Oberon to solve this.
- hsitz 9y agoThe Pascal language is not case sensitive, nor, as far as I know, are any of its variants. From my experience with Delphi/Object Pascal back in the day, nobody capitalized keywords. You can see an example of typical code with lowercase keywords here: https://github.com/MarcoDelphiBooks/ObjectPascalHandbook/blob/master/01/HelloVisual/HelloVisualForm.pas https://github.com/MarcoDelphiBooks/ObjectPascalHandbook/blo...
- vidarh 9y agoIt is very common to see these languages typeset with uppercase keywords, though, but a lot of that certainly was the monochrome alternative to syntax-highlighting...
- fasquoika 9y agoFrom "The Oberon Programming Language"[0]: "Capital and lower-case letters are considered as being distinct....These reserved words consist exclusively of capital letters and cannot be used in the role of identifiers". So it seems that keywords do need to be in all-caps, at least if your compiler is compatible with Wirth's description (the standard?). [0]: https://people.inf.ethz.ch/wirth/Oberon/Oberon07.Report.pdf https://people.inf.ethz.ch/wirth/Oberon/Oberon07.Report.pdf
- mark-r 9y agoPascal was developed at a time when you couldn't count on both upper case and lower case being available. I learned it on a Control Data Cyber (6-bit character set) using Teletypes.
- pjmlp 9y agoNever heard of auto-formatting editors?
- teddyh 9y agoOr, you know, CAPS LOCK?
- bitwize 9y agoThis is why the capslock key was invented. :)
- pklausler 9y agoDoes the first row of your keyboard really have a U after the Q? Does the layout of the letters matter in an argument against using the shift key?
- bjoli 9y agoDevelopment in a language like that, you quickly start using editor macros. Even simple things like Emacs abbrev mode is enough to remove the vast majority of shift usage.
- tzahola 9y agoFrom time to time I find myself daydreaming about an alternative timeline where instead of C, it was the Wirth-family of languages that dominated.
- lboasso 9y agoThanks to Robert Griesemer (Phd student of Prof. Wirth), the Go programming language includes some design lessons taken from the Oberon language
- tempodox 9y agoI would be interested to know what those design lessons are. Is there a writeup of that somewhere?
- lboasso 9y agoWirth wrote many articles about the design of his programming languages, a nice starting point for Oberon/Modula-2 is: http://people.inf.ethz.ch/wirth/Articles/Modula-Oberon-June.pdf http://people.inf.ethz.ch/wirth/Articles/Modula-Oberon-June....
- pjmlp 9y agoFor example Go method declarations are taken from Oberon-2. The unsafe package kind of resembles SYSTEM, just that Oberon spec leaves it open the possibility to have Assembly intrisics in SYSTEM, given its goal as systems programming language.
- PeachPlum 9y agoI think that overlooks the contribution of Rob Pike, Russ Cox and others from the Plan 9 community. Plan 9 is very much influenced by Oberon, and the Acme text editor in particular.
- seanmcdirmid 9y agoThere is also Martin Odersky of Scala fame, pretty sure his advisor was Wirth as well.
- lboasso 9y agoFor those interested, you can find the latest Oberon system by Prof. Wirth here: http://people.inf.ethz.ch/wirth/ProjectOberon/ http://people.inf.ethz.ch/wirth/ProjectOberon/ You can run Project Oberon with this emulator (pre-built binaries available): https://github.com/pdewacht/oberon-risc-emu https://github.com/pdewacht/oberon-risc-emu
- pinewurst 9y agoYou can run it from your browser here: https://schierlm.github.io/OberonEmulator/ https://schierlm.github.io/OberonEmulator/
- lboasso 9y agoIf you just want to play with the Oberon-07 language (the one used to implement the whole system), there are several compilers available for different platforms. You can find a list here: http://oberon07.com/compilers.xhtml http://oberon07.com/compilers.xhtml This includes my own Oberon-07 compiler targeting the JVM: https://github.com/lboasso/oberonc https://github.com/lboasso/oberonc
- Koshkin 9y agoIt seems it would be hard to make Oberon the language to play well with "foreign" environments, such as the Java VM and the library. How does one implement interfaces, for example?
- lboasso 9y agoYes a custom foreign function interface is needed. In my compiler I did the bare minimum to bootstrap the compiler. Currently you can create a definition module that makes the bridge between the Java and Oberon worlds. For example the Oberon definition below: DEFINITION MathUtil; PROCEDURE ln(x : REAL) : REAL; END MathUtil. exposes the Java MathUtil.ln() static method: public class MathUtil { public static float ln(float x) { return (float) java.lang.Math.log(x); } } A client module can use now the Java implementation of ln: MODULE Client; IMPORT MathUtil; VAR x: REAL; BEGIN x: = MathUtil.ln(2.0); MathUtil.ln() END Client; For a complete example see https://github.com/lboasso/oberonc/tree/master/examples/fern https://github.com/lboasso/oberonc/tree/master/examples/fern
- mwexler 9y agoI remember wanting Oberon to be Pascal version 2, and that just wasn't what it was supposed to be. I wonder if that's really what prevented the massive growth that other langs have: it had so much "creator halo" that it was hard to have it's own identity vs. "the lang from the guy that made Pascal".
- mkempe 9y agoHistorically, Modula was Pascal v2. Modula-2 was arguably different enough to be v3. And so Oberon was v4.
- kjs3 9y agoPretty sure Wirth worked on/contributed to Modula-2+/Modula-3 at Digital and Mesa/Cedar at Xerox PARC between Modula-2 and Oberon. Modula-3 was certainly Modula-2 v2, and Mesa/Cedar was...something else. I don't really think the analogy follows. :-)
- eukgoekoko 9y agoThe article praises some features adherent to the runtime/standard library: file system, Hypertext-Based User Interface, but what does it have to do with the language itself? What about clunky COBOLique keyword set: PROCEDURE, BEGIN/END? What about FOR loops, not implemented in the original Oberon? Ironically, LISP dialects predating PASCAL-family are still alive, whereas Pascal/Modula/Oberon are dead as a dodo.
- lobster_johnson 9y agoMany people like the clunky syntax of Wirth's languages, and have been exceedingly productive in those languages. There's Borland's ObjectPascal products, of course (from Turbo to Delphi), which were extremely successful for many years and still survive today. Pascal is nowhere as popular today as in its heyday, but there are people still using Delphi as well as Lazarus, a modern open-source Pascal implementation that's compatible with Delphi. One of the most popular languages right now, Go, is heavily influenced by Modula and Oberon. Go is more complex, and opts for a more C-like syntax, but many of its concepts come directly from those languages. Another nascent language with a heavy ObjectPascal influence is Nim (which was created by a former ObjectPascaler). Ada is another Pascal dialect that is far from dead. Granted, I personally wouldn't want to use these languages today. Go and Nim are taking the programming language evolution further. But this article isn't about using Oberon today.
- eukgoekoko 9y agoNeither the article, nor your comment provide any substantial arguments, why the language itself should be perceived as a "jewel". All you have is just some references to inspiring success stories and an appeal to authority. What is cool about Oberon, really? (Apart your Wirth-fandom)
- Koshkin 9y ago> why... "jewel" Worth having a look at.
- 9y ago
- michrassena 9y agoFor those who are unfamiliar with the project, here are a few small photos of the custom-designed workstation based on an AMD bit-slice processor that the Oberon System ran on originally. http://www.ethistory.ethz.ch/rueckblicke/departemente/dinfk/forschung/weitere_seiten/lilith/index_EN/popupfriendly/ http://www.ethistory.ethz.ch/rueckblicke/departemente/dinfk/... https://en.wikipedia.org/wiki/Ceres_(workstation) https://en.wikipedia.org/wiki/Ceres_(workstation) Along with its predecessor Lilith, for running a Modula-2 system. There was even a Russian clone of the Lilith called Kronos https://en.wikipedia.org/wiki/Kronos_(computer) https://en.wikipedia.org/wiki/Kronos_(computer) Along with Plan 9, I see this project as a starting point for a deep dive into a world of alternative computing platforms. (edited for spelling, bit-slice)
- dboreham 9y ago"bit-slice" (assuming a mobile OS mis-correction) If you're interested in that field, this is the book: https://www.oldcomputerbooks.com/pages/books/K6246/mick-john-mick-brick-james-brick-advanced-micro-devices/bit-slice-microprocessor-design https://www.oldcomputerbooks.com/pages/books/K6246/mick-john...
- michrassena 9y agoa bit of mistyping on my part... I don't know much about bit-slice processors. They seem like an interesting historical footnote at this point. Are there any current applications for the technology?
- pkaye 9y agoBit-slice processor is where the hardware blocks are partitioned along bit boundaries. For example combine 4 chips of 4-bit wide data path to form a 16-bit processor. This was from when chips were not dense enough to fit a whole processor into one die.
- michrassena 9y agoAfter doing a tiny bit of reading, it seems in early minicomputer days bit-slice processors weren't an exotic technology at the time. I wonder why people didn't combine 16 chips to create 64-bit processors. Or did they?
- k__ 9y agoThe first and only time I heard about Oberon was when a fellow student told me quit his first CS degree. "They taught us stuff like Oberon? Why not Java or C? I want to get a job later!"
- TremendousJudge 9y agoAt my uni the first programming semester is Pascal, and the second used to be Modula-2. They only introduced C on the third semester. They changed it a couple of years ago, so now they never get to know Modula-2. I see their point in removing it (it's very old fashioned, more than modern Pascal in some ways), but I feel something of value was lost
- vram22 9y agoInteresting. I had read a BYTE magazine article about Modula-2, back in the day. This was after having been a fairly heavy Turbo Pascal user for a while. Never got to try it out, but from the article, I thought Modula-2 seemed like a good language, a sort of better Pascal in some ways, and good for systems programming. In those days BYTE used to have very good and interesting article about all kinds of both hardware and software topics, and not only mainstream (at the time) ones either. E.g. there was an issue dedicated to Lisp and another one dedicated to Smalltalk, IIRC. Later it got more commercialized, with less good content, shorter and less in-depth articles, and more ads. Some old BYTE articles or issues are there on the Internet Archive.
- stevesimmons 9y agoThe BYTE archive is here: https://archive.org/details/byte-magazine?&sort=-date&page=2 https://archive.org/details/byte-magazine?&sort=-date&page=2
- vram22 9y agoWow, thanks a lot. I anticipate many hours of interesting reading in my free time. Just had a quick look for now; here are a Lisp and a Smalltalk issue: https://archive.org/details/byte-magazine-1979-08 https://archive.org/details/byte-magazine-1979-08 https://archive.org/details/byte-magazine-1981-08 https://archive.org/details/byte-magazine-1981-08 , for anyone interested.
- romaniv 9y agoOne would think that in 2017 we would be using an OS that takes the best ideas from Xerox Park/Star, Oberon and Cloud 9. At least on new devices (like tablets) which don't have to keep backward compatibility.
- Santosh83 9y agoHow would a large company (or community project) be able to recruit hundreds of programmers well versed in these languages? The problem is s/w is built on existing knowledge and in the system programming domain that is C/C++ for the most part, and that's where you'll get man-power to the extent needed to build gargantuan OSes like Windows, MacOS, Linux and so on. And usually good s/w engineering principles were not the predominant factor in the inception of these systems anyway. They were commercially motivated, and hobbyist beginnings. And once you already have a big body of code...
- nickpsecurity 9y agoThat is the general principle that businesses operate on. They condition of their legacy stacks is usually bad, too, with lots of poorly-thought design. Some companies such as Jane St claim hiring people who can quickly pick up unusual languages leads to staff that's better at problem-solving in general. Unlike them, the Oberon and Pascal languages were designed to be simpler than what's currently standard for educational purposes. If you know an imperative language, you should be able to learn an Oberon dialect about as fast as you can read the syntax. For a more batteries included, see the Component Pascal dialect with Blackbox: http://blackboxframework.org/index.php?cID=home,en-us http://blackboxframework.org/index.php?cID=home,en-us It had some uptake in Russia and embedded. Still a really, niche player for sure but it did. Also, Astrobe has an Oberon IDE and platform for embedded. http://astrobe.com/Oberon.htm http://astrobe.com/Oberon.htm Finally, the most industrial one with longest time would be Free Pascal with Lazarus since it's sort of a Delphi port. http://www.lazarus-ide.org/ http://www.lazarus-ide.org/ IDE training, native libraries available, and ease of integrating C libraries are all I would be concerned about if just trying to crank out features. They'll certainly pick up the language(s) with no trouble at all.
- 9y ago
- Koshkin 9y agoI had once tried rebuilding an Oberon compiler and the standard library using itself - all from the sources. I will never forget this - it only took 0.15 seconds. Having said that, the language goes a bit too far trying to be "as simple as possible but not too simple", at least to my taste -- in a way that Go seems to be, only much more so. It also looks verbose - especially compared to C. So, while I marvel at the language and have a feel for its weird beauty, I don't think I'd be comfortable using it in my day to day activity - I guess, C and C++ have spoiled me...
- MaysonL 9y agoI used to develop in Oberon, and used a lot of keyboard macros - the verbosity of the language disappears when one keystroke turns ProcName into Procedure Procname (); VAR BEGIN END Procname;
- fiddlerwoaroof 9y agoI think if you look at it in context of the entire Oberon operating environment, it makes a certain amount of sense. While everything is written in Oberon, it seems to me that the average user would essentially be using oberon for roughly what shell scripts and AppleScript is used for: I.e. for writing little commandlets that automate frequently used functionality.
- pjmlp 9y agoIt was great, Oberon had a kind of REPL. Basically modules are loaded dynamically and any procedure that obeys to a specific signature could be called from the UI, via keyboard and mouse like the ACME editor on Plan 9. The way they get their input, depends on the signature. It could be like command line parameters, clipboard, or any selected UI element in another application.
- deleted 9y ago[deleted]
- vidarh 9y agoCompulsory Michael Franz (author of the linked paper) fanboy-ing: Prof Franz did his PhD under Niklaus Wirth. His thesis was on Semantic Dictionary Encoding - a method for storing a compact semantic tree representation of a program in what is effectively a prefix code (e.g. similar to Huffman coding) that it exploits beautifully to both compress the tree and to use heuristics (the same on the encoder and decoder) to generate templated code fragments to allow the code generator on load time to do less work. Published in '94, it unfortunately was totally overshadowed by Java. It's still one of my favorite papers, and one day I still want to go down the route of actually implementing SDE properly (there are implementations for Oberon - one of the early remarkable feats was that because of the more compact representation, on MacOberon it was on some hardware faster to load and generate code from these "slim binaries" than it was to just load a native binary, because the code generator was fast enough to beat the disk IO cost of loading a larger binary...) One of Franz' PhD students was Andreas Gal, who wrote the paper on trace trees and applied it to JIT'ing Javascript, and worked as CTO at Mozilla.
- Someone 9y agoThanks for the pointer. It led me to a few useful links. Michael Franz has a personal web page at http://www.michaelfranz.com http://www.michaelfranz.com. His thesis is at http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.1424 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.1.... I think http://hokstad.com/semantic-dictionary-encoding http://hokstad.com/semantic-dictionary-encoding is your work, so I assume it is a good description of what I can expect from reading that thesis.
- vidarh 9y agoThanks, that's useful. I totally forgot to include any links even though I was meaning to (and yes, that's my page at the end)
- vanderZwan 9y agoI'm a bit sad to see that it's the only article tagged: http://hokstad.com/semantic-dictionary-encoding http://hokstad.com/semantic-dictionary-encoding Did you ever get around to exploring SDE's in a Ruby context?
- magoghm 9y agoThe book "Project Oberon: The Design of an Operating System and Compiler" https://www.amazon.com/Project-Oberon-Design-Operating-Compiler/dp/0201544288/ref=sr_1_1?ie=UTF8&qid=1366902572&sr=8-1&keywords=project+oberon https://www.amazon.com/Project-Oberon-Design-Operating-Compi... contains a detailed explanation of the design for the Oberon compiler and operating system. Not only it is well written with clear explanations, but it also includes the full source code for the compiler and operating system in less than 550 pages! I learned some interesting compiler techniques from reading that book.
- lboasso 9y agoThe 2013 edition of that book (updated with the latest source code) is available at Wirth's website: http://people.inf.ethz.ch/wirth/ProjectOberon/index.html http://people.inf.ethz.ch/wirth/ProjectOberon/index.html
- useranme 9y agoFrom the paper: "the one and only system that almost all members of the Institute for Computer Systems (including the secretary!) used on a daily basis for all their computing tasks" Even the fonts were designed in-house.
- SwellJoe 9y agoAbout a decade ago, I worked with the guy who developed IBM's Oberon-2 system for OS/2 in the 90s. He'd always get a sort of wistful look about him when he talked about it. It made me want to give it a look, but there was never time.
- MaysonL 9y agoThe BlackBox Component Pascal IDE on the old Mac OS (originally Oberon/F) was the sweetest IDE I've ever used. The Windows version, still pretty good, has been open-sourced.
- prestonbriggs 9y agoFranz mentions Wirth's metric for compiler quality: Speed of self compilation. I first heard this idea, in a slightly different form, from Vickie Markstein (part of IBM's 801 team) in early '88. She suggested using this idea as an acid test for optimizations. For example, if the compiler with value numbering compiled itself faster than the compiler without value numbering, then she'd say value numbering was worthwhile. Given the organization of the 801 team, it's possible the idea was due to John Cocke or one of the other members. Doesn't matter much, I think. I've never had the opportunity to test optimizations using this approach, but I think it would be a fun way to approach the question of adding optimizations to something fast & simple like the Oberon compiler, the Plan 9 compiler, or the Go compiler. Indeed, for a _system_, like Oberon or Plan 9, where everything is compiled with the same compiler, we could go a step further and try adding the optimization, rebuilding everything, then timing the new compiler. That way any benefits the optimization brought to handling I/O and such would be properly credited and we'd (hopefully) see a steady improvement in the programmer's experience. Preston
- purplezooey 9y agoAh I thought were talking about the Bell's summer brew.
- orangeshark 9y agoThat was an interesting read. Are there any similar projects being worked on creating a simple designed system that can be used day to day? Maybe there is still an active group of Oberon users?
- mark-r 9y agoAnybody know when this was written? The latest citation is from 1998, and it talks about Oberon being 10 years old. It also talks about JIT for Java being a "current trend". > I believe that Wirth’s ultimate impact will be felt even stronger ten years from now than it is today, and that the legacy of his accomplished career devoted to The Art of Simplicity will be enduring. Unfortunately I don't see any sign of that. The actual trend seems to be in the opposite direction.
- prestonbriggs 9y agoPublished in 2000. See https://dl.acm.org/citation.cfm?id=645993&picked=prox&cfid=829975124&cftoken=96589339 https://dl.acm.org/citation.cfm?id=645993&picked=prox&cfid=8...