I found the Project Oberon book in SFSU library and read it cover to cover. Such a tight, elegant system. Pretty much complete: Oberon OS includes compiler for Oberon language!
Language was self-hosted (compiler written in itself) and Prof. Wirth had a heuristic: no feature could be added to the lang/compiler if it made compiling the compiler slower.
There are several emulators, in C, JS, Java, and Python, and there's Verilog so you can burn to FPGA and make a real workstation. People have.
The system has two kinds of OOP. There is the C++/Java/Python/etc. kind where you basically add methods to a record type, and there is the old school Smalltalk message-passing kind, where elements of the OS communicate through an extendable message bus.
The GUI system, especially with the "Gadgets" subsystem, is mind-blowing. It would take too long to go over it at the moment, but there are features there that still haven't made it into mainstream GUI systems. If I get a minute later today I'll come back and add a note detailing some of the awesome if someone else hasn't already filled in the picture.
Some of the gui stuff actually made it into Plan 9, see the acme editor for more info.
I love all of Wirths writing, he really does a lot to make complex topics approachable.
Note there's a lot more to OOP than adding methods to records, on the surface yeah, but "primitive" sub-typing just scratches the surface. This isn't a criticism, just a note so anyone interested can learn more, Pierce's Types and Programming Languages is a good place to start.
> The GUI system, especially with the "Gadgets" subsystem, is mind-blowing. It would take too long to go over it at the moment, but there are features there that still haven't made it into mainstream GUI systems.
Yes. Oberon with Gadgets was like having the capabilities of Delphi live in the GUI. You could literally select widgets and open an inspector tool and edit them. It also had a facility similar to OLE ( https://en.wikipedia.org/wiki/Object_Linking_and_Embedding ) implemented with message passing.
When I said these features still haven't made it into mainstream GUI systems I didn't mean that they weren't represented at all. But Delphi is an app rather than a built-in part of the OS/GUI. OLE was in Windows, but it didn't really take off AFAIK. Smalltalk integrated GUIs (Pharo, Squeak, etc.) are very similar, albeit with a very different language and runtime architecture, but again, Smalltalk didn't break into widespread mainstream adoption.
Politics, .NET has always been part of DevTools business unit, while C++ and Windows were under WinDev roof.
Longhorn's goals was to rebuild Windows on top of .NET, naturally there were performance issues with the state of .NET 2.0 capabilities.
However instead of working together , while improving the whole stack (languages and runtime) to make it possible, like Google teams have later done with Android and ChromeOS, they just deemed it impossible and started pushing for a reboot.
When Sinfosky of the Office team took charge (another C++ holdout at MS), they picked up all the Longhorn's ideas redoing them in COM.
It is no surprise how WinRT turned out to be COM 2.0 with him in charge of Windows 8.
Basically it combined a nice Model-View-Controller widget collection with facilities like live introspection and editing of widgets, and embedding widgets in (multiple) documents (edit a spline widget in one view and it changes in all the views/docs in which it's embedded)
It might sound a little plain vanilla now, but this was in 1990-1991.
I found the Project Oberon book in SFSU library and read it cover to cover. Such a tight, elegant system. Pretty much complete: Oberon OS includes compiler for Oberon language!
Language was self-hosted (compiler written in itself) and Prof. Wirth had a heuristic: no feature could be added to the lang/compiler if it made compiling the compiler slower.
There are several emulators, in C, JS, Java, and Python, and there's Verilog so you can burn to FPGA and make a real workstation. People have.
The system has two kinds of OOP. There is the C++/Java/Python/etc. kind where you basically add methods to a record type, and there is the old school Smalltalk message-passing kind, where elements of the OS communicate through an extendable message bus.
The GUI system, especially with the "Gadgets" subsystem, is mind-blowing. It would take too long to go over it at the moment, but there are features there that still haven't made it into mainstream GUI systems. If I get a minute later today I'll come back and add a note detailing some of the awesome if someone else hasn't already filled in the picture.