Active Oberon Language Report Update 2019
cas.inf.ethz.ch
cas.inf.ethz.ch
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
A full workstation OS, written in a strong type safe GC enabled systems language, providing UI interactions similar to Lisp and Smalltalk workstations from Xerox and Lisp Machines.
All of this in the mid-90s, where most PC users where still running Windows 3.x on their computers and Amiga was mostly coded in Assembly.
If you want some screenshots and overview of how it used to look like, https://www.progtools.org/article.php?name=oberon§ion=co...
This was for purposes of creating a top-down, predictive, recursive descent parser for Go.
I am curious on how Go is being parsed. LR, LL, or ?
I am also curious about the CellType and PortType of Active Oberon. Do these correspond to Go's ChannelType and possibly to OCCAM and CSP Send and Receive Channels?
One of the interesting additions over plain Oberon is the concept and support for active cells. Active Cells provide an abstract mechanism to define systems composed of computing elements that exchange information over message channels. Not new to anyone familiar with Go Channels etc buts its one of the nice things in Active oberon and provides support for both Actor models, concurrency and parallel programming.
How this applies to scalable systems and custom FPGA hardware is described in an older paper - see https://inf.ethz.ch/personal/felixf/pdfs/2012_ActiveCells.pd...
In addition to cells there is math support for tensors (via Math Array) and matlab like array processing as well.
From a language implementation perspective it provides quite a lot in a relatively small, clean and easy to follow code base.
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.”?
For me, it was so easy to think about loops that way, with an EXIT/condition in the middle of the loop body.
WHILE ~(lastIteration) & ~(Found(haystackPart, Needle)) DO
(* Advance the haystackPart. *)
END;
I can at least say that after the loop if lastIteration is true, then
the needle wasn't found in the haystack. While something like WHILE ~(found) DO
(* Stuff. *)
END;
Conveys next to no information. To say nothing about the fact that the
body of the loop will probably be full of: IF ~found THEN
(* Stuff. *)
ENDPersonally, I do like having BREAK/EXIT, but in the eyes of structured programming purists, a loop with an explicit conditional still has a single entrance and single exit, while BREAK/EXIT statements destroy this property.
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.
WHILE True DO
(* Stuff. *)
IF someCondition THEN
EXIT;
END;
(* More stuff. *)
END; 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.Also, you were jumping to FOR loops over arrays. But instead the sentinel values are much better suited for linked lists.
What a programming language allows shapes how you program in it. The Sapir-Whorf Hypothesis is probably much more true with programming languages than natural languages.
One of Wirth's mantras is "don't show me your code, show me your data structures and I'll immediately know if your code is any good".
There are certainly moments when I would like to have certain programming constructs. But then I have to solve the problem in another way.
But this happens in a lot of languages. Be it C, Ruby, Javascript, or Oberon (whatever version).
This company is still in business, selling Oberon compilers for embedded development.