Modula-2 and Oberon (2007) [pdf]
citeseerx.ist.psu.edu
citeseerx.ist.psu.edu
He kept on "reducing complexity" while re-building what is essentially the same, rather primitive, language. ANd he kept throwing the baby out with the bathwater.
One of the Oberons had three different loop constructs, and only one of those could be terminated early. Because reasons. Then a newer Oberon reduced the number of loop constructs, but also removed the ability to terminate them early. Then a newer Oberon... ad infinitum.
And you can see it in all the langage variants he built: he insisted that the core of the language be small at the expense of usefulness to the point of uselessness. And purely irrational academic fixation (such as function vs. procedure or the aforementioned loops).
Was he instrumental in creating a good teaching language, and one of the first good high-level languages (Modula/Pascal)? Yes. Did he do anything noteworthy after that? I honestly doubt it as he was pursuing this idree fixe of a "small language where you can remove nothing more".
The standard joke is "Europeans refer to him by reference, as Nicklaus Wirth, and Americans - by value, as Nickel's Worth."
Knuth ties into this because he published a response "Structured Programming with go to Statements", examining many situations where goto statements are hard to avoid in the standard structured programming paradigm.
More recently I discovered why the use of the go to statement has such disastrous effects, and I became convinced that the go to statement should be abolished from all "higher level" programming languages (i.e. everything except, perhaps, plain machine code).
"Harmful" seems to me a perfectly appropriate characterization of the words "disastrous" and "abolished". If anything, it tones them down.
However, I do believe his aspiration to make things simpler is genuine. Occasionally, he may have gone beyond the 'sweet spot', but as an academic, this way of tinkering and trying out different things is something that is second nature. I admire that he wrote a language, compiler, OS and - later - also designed the hardware of his own workstation. That's the kind of teacher you want: "look, how easy it all is!".
His compiler book, which can be read in a day, remains a marvel of clarity and brevity.
What is interesting about Oberon is that it is a complete (i.e. OS + compiler + HW) usable system that can be understood in its entirety by a single human being within one lifetime.
As far as I know it's also the only system currently in existence that fullfills that promise.
Just the language part of Oberon is not optimal for running on the regular personal computer systems we used or are currently using. But AFAIK that was never its purpose either.
Well, Unix including the C programming language were essentially implemented by two guys (Thompson und Ritchie); at least in the beginning Unix was small enough to "be understood in its entirety by a single human being within one lifetime". The same applies to Linux (implemented by only one guy in the beginning). Also the Oberon System (written by Wirth and Gutknecht) became bigger and more complex during the years it was used at ETH; barely anyone has full detail knowledge of e.g. the whole Oberon System V4. We can assume that if the Oberon System had been more successful, it would have shared the fate of original Unix and Linux, and became too big to be understood in its entierty by a single person.
You are not expected to understand this.So, more like "take inspiration from me, and see how simplicity can be done".
Wirth has spent most of his life in an academic environment which have shaped his opinions on teaching programming. He believes strongly that teaching programming is most effective when students can grasp the entirety of a small language.
Below are a few quotes from Wirth taken from a 2018 interview. I find myself agreeing with his opinions:
On designing a programming language:
"...a language designer picks ideas from others, facilities, features, and has the task of putting them into a coherent whole, into a framework. And that is less easy than people might think, because you want to have as much power in the language as possible, yet a compact structure and compact syntax. And that you can get I think only through experience with language design."
On teaching a first programming language
"..as I did in the Pascal times, the foundations have been laid when a person learns his first programming language. That’s the key. In order to do a good experience, you have to have a clean language with a good structure concentrating on the essential concepts and not being snowed in. That is my primary objection to the commercial languages – they’re simply too huge, and they’re so huge that nobody can understand them in their entirety. And it’s not necessary that they’re so huge."
On further development of Oberon:
"The incentive came from colleagues mentioning that they had learned very, very much from my book called Project Oberon, which is one of the very few describe a full system and its development in detail. That’s something in computer science that is wrong. People learn to write before they have learned reading."
Worth’s contributions may not seem significant to some, today, because he did make this contributions; championing simplicity and portability. In a lot of ways we stand on his shoulders. Anyone who feels shorted or that they don’t get their nickels worth should also read about the Oberon System which was a complete computer with peripherals and a ui.
https://www.withsecure.com/en/solutions/innovative-security-...
Go has all the same features as Oberon has, in regards to systems programming, it is a matter of anyone finding it worthwhile to actually design a graphical OS with it.
I will conceed it lacks a very important one from Oberon, proper dynamic loading. Also the plugin packages are mostly abandoned across several releases.
However in this day and age, probably it would make more sense to do the dynamic loading capabilities of Oberon commands available via OS IPC instead.
Go is missing both two new features Wirth introduced in Oberon compared to Modula (see section 5.2 of the referenced HOPL paper): type extension (i.e. inheritance) and type inclusion (no implicit coercion in Golang at all).
Taking a closer look there are only few similarities between Oberon and Go; both are garbage collected; Go uses the same separate receiver syntax element in method declarations as Oberon-2; and there is an intersection of keywords and also := appears, but the semantics are rather different.
COM has done just great during the last 30 years without class inheritance.
Although I still think Active Oberon is the best descendant from original Oberon, I am not a fan of the minimalist design Wirth persued afterwards.
In any case, Oberon's best days are behind it, hence why I would rather see some Go inspired approach to those ideas, even if I am not a big fan of Go's design.
Maybe if you insist that parallel processing is part of the language (which you likely do if you prefer Active Oberon). Personally I think this can be well delegated to libraries to keep the language simple. Oberon+ doesn't use dedicated syntax even for exception handling; also "green" or regular threads, and channels and the like can well be covered by libraries or FFI. I'm neither a fan of Go's design, but with the ongoing work on Oberon+ I'm confident that its best days are yet to come.
So to offer a bare bones language in 2022 without an OS that is at least at the same level of Blue Bottle, let alone what consumers expect from a modern OS is really not attainable.
It remains a nice language to look at as language nerd, and at the end of the day, pick something else when delivering software into production with the expectations that Swift, C#, Kotlin and so on can fulfill.
That's not even true if you mean the Oberon OS.
The idea - as described in the referenced HOPL paper - was the focus on the essentials of a language, which from my point of view is still a very valid goal, as you can see by just looking at the success of Go.
Swift, C#, Kotlin are at the other extreme of the spectrum, not too far away from modern C++ or Ada, where the language designers seem to want to integrate everything that anyone could ever want. That makes about as much sense as everyone today thinking they have to drive an SUV, and leave the bicycles or other economical means of transport as "a nice thing to look at" for the "transportation nerds".
Oberon-07 isn't it.
Worth's quest to reduce Oberon's usability to a language without the libraries and related OS infrastructure that made it interesting to use in first place?
See, this could have been a healthy discussion about Oberon, instead it went sour.
It's partly inspired from Oberon (although I started it without knowing about Oberon), but I'm still working my way through the book and language as I develop my own. I'm sure it's going to a decade+ project to have something valuable, but I'm hungry for any feedback I can get at this early stage.