(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…
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 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.
Active Oberon Language Report Update 2019
21–30 of 35 posts
Re: Active Oberon Language Report Update 2019
#22It’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 ?
Have you compared it to Go?
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?
Re: Active Oberon Language Report Update 2019
#23Re: Active Oberon Language Report Update 2019
#24Earlier quoted context omitted.
Have you compared it to Go?
I have compared both Modula-2 and Oberon-2 to Go, but have not compared Active Oberon to Go. 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?
Re: Active Oberon Language Report Update 2019
#25It’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 ?
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 ): 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 anyt…
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
Re: Active Oberon Language Report Update 2019
#26(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…
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 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;Re: Active Oberon Language Report Update 2019
#27Earlier quoted context omitted.
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 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.
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;
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.Re: Active Oberon Language Report Update 2019
#28Re: Active Oberon Language Report Update 2019
#29It’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 ?
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.