
Active Oberon Language Report Update 2019 - pjmlp
http://cas.inf.ethz.ch/news/2
======
bsaul
It’s the second time i see this language mentioned on HN. Reading about it
made me feel it was coming straight from the 80s, and i must say i didn’t find
anything special in its feature set (but i didn’t spend a lot of time). Could
anyone provide more info on what makes this language interesting ?

~~~
kryptiskt
The language in itself is just a member of the Pascal/Modula family stripped
to the minimum while still supporting modules and some form of polymorphic
objects. What is interesting is what Wirth et al does with it in the Oberon
book ([http://www.projectoberon.com](http://www.projectoberon.com)): building
a complete computing environment (including a kernel, compiler and GUI)
running on their own CPU. All in 9000 lines of Oberon code, no C or anything
else.

~~~
boznz
Just started reading the book and so far it is quite interesting and
informative and it looks like the problem they were trying to solve were that
of the massively complicated operating systems which seem to get in the way
rather than help. Funny how that resonates just as much today as then.

I have the digilent board from my FPGA experiments and Oberon looks like
pascal so should be pretty easy to pick up so I might give the examples a go.

Unfortunately VGA graphics and PS2 keyboards and mice seriously dont cut it
these days

------
ainar-g
(Only tangentially related to the OP, but what the hell.)

Does anyone here have an experience programming in Oberon-07? One of the most
interesting features of the language for me is the fact that it doesn't have a
BREAK statement. Which means that one must use a form of WHILE for linear
searches. Probably to force people to think in terms of structured programming
instead of the logic of “hidden GOTOs”. Does it ever bother you? Did you ever
had a thought like “Sheesh, this would be so much better with a FOR and a
BREAK.”?

~~~
bhaak
An elegant solution (if applicable) is placing a deliberate sentinel value at
the end of your data before looping.

[https://en.m.wikipedia.org/wiki/Sentinel_value](https://en.m.wikipedia.org/wiki/Sentinel_value)

Whereas usually loops have 2 tests for checking if the while loop should end
(end-of-data-reached? or break-condition-is-true?) you only need to check for
the latter.

This is a very Oberonesque programming optimization.

~~~
ainar-g
I'm sorry, but I don't see how that answers my question. Oberon-07 has real
FOR loops over arrays, so it doesn't need sentinel values. My question was
about an idiom like:

    
    
      WHILE True DO
        (* Stuff.  *)
        IF someCondition THEN
          EXIT;
        END;
        (* More stuff.  *)
      END;

~~~
badsectoracula
My guess is that Wirth's approach would be to avoid having too much logic in a
loop (if really necessary, break it into separate procedures) and if needed to
do something like

    
    
        WHILE ~someCondition DO
          (* Stuff *)
          IF ~someCondition THEN
            (* More stuff *)
          END;
        END;
    

In general from a quick look at the projectoberon.com source code (which is
largely written by Wirth) the vast majority of WHILE and REPEAT uses seem to
be less than 4 lines long.

------
kryptiskt
Compared to the Oberon in
[http://www.projectoberon.com](http://www.projectoberon.com) this is like
Oberon++. I mean, it's still a pretty bare bones language, but it has added
quite a few fancy features.

~~~
Rochus
Right. The whole point of Oberon is being as simple as possible. If you need
all the fancy stuff introduced with Oberon-2 or Active Oberon (which are not
the same lange as the one designed by Wirth) then there are better
alternatives, e.g.
[https://en.wikipedia.org/wiki/Object_Pascal](https://en.wikipedia.org/wiki/Object_Pascal),
or Java, or C#.

------
carapace
FWIW, in-browser emulation of Ye Olde Oberon system (w/ compiler):
[https://schierlm.github.io/OberonEmulator/emu.html?image=Ful...](https://schierlm.github.io/OberonEmulator/emu.html?image=FullDiskImageWithSource&width=1024&height=576)

[https://github.com/schierlm/OberonEmulator](https://github.com/schierlm/OberonEmulator)

------
dteiml
I was taught this language in 1st year of Oxford CS course. While I thought
it's a dead language at the time, I'm glad to hear I was wrong ;)

~~~
pjmlp
It is a niche language, but it still gets used.

This company is still in business, selling Oberon compilers for embedded
development.

[https://www.astrobe.com/](https://www.astrobe.com/)

------
gtirloni
I'm curious, would you use it in a business setting today? What's the killer
feature?

~~~
Rochus
No. It's not designed for that. It was designed as a minimal lanuage focussing
at the bare essentials required to implement a minimal operating system with
graphical user interface.

------
rsmckinney
Also for Wirth/Oberon fans: Oberon for the JVM —
[https://github.com/lboasso/oberonc](https://github.com/lboasso/oberonc)

------
justin66
Is it peculiar that the language report does not mention "active objects" in
its text? Is there a different but equivalent term in use?

------
saagarjha
Could we perhaps link directly to the PDF (at
[http://cas.inf.ethz.ch/projects/a2/repository/raw/trunk/Lang...](http://cas.inf.ethz.ch/projects/a2/repository/raw/trunk/LanguageReport/OberonLanguageReport.pdf))?

~~~
pjmlp
I posted the link to the overview page, because it provides more information
about the PDF not being yet final and where to discuss further the issues
until it gets the final seal of approval.

