If only the FPC compiler supported it and allowed combining units in Oberon with Pascal ones in one project!
The language specs: https://github.com/oberon-lang/specification/blob/master/The...
Maybe what we really want would be semantically close to Oberon+ but abandoning Wirth's surface syntax. (You could still respect the design discipline of allowing a simple fast compiler.)
making a mish-mash of variable declarations and code would make it quite easy to inadvertently add a new variable similar, but not identical to an existing one, for example.
It's good that procedures and functions in pascal are different. One of the big problems with C is that you can leave function results dangling, which works against the clean separation of purposes... procedures have side effects, functions tend not to (but can).
One of the most clever things in pascal is assignments := are very hard to confuse with tests for equality =. You're not likely to accidentally confuse them.
Show HN: New Oberon+ to C99 transpiler for near native performance - https://news.ycombinator.com/item?id=29591993 - Dec 2021 (2 comments)
The Oberon+ Programming Language - https://news.ycombinator.com/item?id=27864582 - July 2021 (4 comments)
The new Oberon+ programming language – modern simplicity - https://news.ycombinator.com/item?id=27855767 - July 2021 (4 comments)
Others? (Lots of original Oberon, of course)
https://oberon-lang.github.io/2021/07/15/motivation-for-a-ne...
(Granted I am touch typing and also using Colemak layout, so rarely ever move my hands. For people that hunt and pek, I believe curly braces are easier to type.)
I don't think there is much practical difference between curly-braced vs keyboard based syntax. Both are similarly easy to read, especially with syntax highlighting. After a while, your brain will automatically parse "begin" and "end" as a symbol, same as curly braces, so you won't notice the "noise".
As for the pros and cons:
Pascal style syntax is slightly better for new people learning to program. Learning how to even type those weird curly braces and understanding the difference between all the styles of braces just takes focus away from actually learning how to program.
Curly braced C-style syntax is better for people that already know how to program because everyone is already familiar with at least one curly braced language.
speaking as an ex professional delphi programmer here - i have written lots of object pascal code, and have no desire to write any more.
How about a treesitter-based editor extension that converts between begin/end and {/}, as if they were ligatures? Actually this might not even need treesitter.
It's a single-user workstation, developed from the CPU on up, compiler & language, OS with unique GUI, all documented in a book, and you can run it online in a browser via a JS emulator for the CPU: http://schierlm.github.io/OberonEmulator/
People used it at ETH as their main system to run the University!
Fascinating stuff!
An identifier declared in a module block may be followed by an export mark (* or -) in its declaration to indicate that it is exportedhttps://oberon-lang.github.io/2021/07/17/considering-generic...
Specifically in Oberon-07 when you have a module "Foo" with a type "Bar" you use it in another module as "Foo.Bar". With parametric modules, a "Foo<T>" module would need to be imported an a specialized form as -e.g.- "Foo<INTEGER>" and thus the "Bar" type would need to be used as "Foo<INTEGER>.Bar".
In my mind that was both the simplest and smallest change that would allow for the most flexibility (the parameters would be any token acceptable by the language, not just types, meaning that they could be used for constants or even affect other imports).
I did consider implementing a compiler for this, but then i decided that if i'm going to make a compiler for an incompatible language that already practically nobody uses, might as well make my own language that also changes some things i dislike about Oberon-07 (like the uppercase keywords, using # for the inequality string and * to export stuff from modules).
Here is how it looks like in Modula-2.
https://www.modula2.org/reference/isomodules/isomodule.php?m...
Free Pascal has threads.
[1] https://www.pcorner.com/list/PASCAL/TASKER4.ZIP/TASKER.PAS/
I asked the oracle
> Wirthian functional programming language would emphasize simplicity, elegance, and readability while incorporating functional programming concepts such as immutability, first-class functions, and recursion. It would provide strong typing, modularity, and a minimal standard library, staying true to Wirth's design principles.
It also tells me that Elm, Idris, PureScript, F* and Gleam share many of these same qualities.
The thing that I didn't appreciate about the design of Wirthian languages earlier is that he really focused on mechanical and compiler-writer sympathy, designing languages that were fast and easy to compile.
I just discovered Pascal-S, it is like Cool or ChocoPy, a subset language designed for compiler students to implement.
https://static.aminer.org/pdf/PDF/000/530/289/pascal_s_a_sub...
- Don't throw everything into a single global heap
- Don't rely on stop the world GC
- Support actors and zero-copy message passing
.. in other words, be like Pony's ORCA.
From here: https://oberon-lang.github.io/2021/07/15/motivation-for-a-ne...
And yet it carries over all of the inanities of the many Oberons before it like:
- Four different loops (while, for, repeat, and loop)
- Useless distinction between procedures and functions
- Randomly selected ASCII symbols to show what is exported and/or read-only
- extremely awkward and limited exception handling (you have to call a procedure that cannot hav a return type using a built-in pcall procedure that writes exception info into a variable you pass into it)
and so on.
All of Oberons are just walking around in circles re-implementing the same weird ideas again, and agian, and agian, and again.
I agree with the rest, but the rest of the language is great.
The design is well-balanced and simple, and you can do essentially everything you can do with Java exceptions, just without complicated syntax constructions; see https://oberon-lang.github.io/2022/05/15/towards-exception-h... for more details.
I think that having four different loops is better than jumping through four different hoops for different loop styles.
Uh? care to elaborate?
what's oberon+ for?
its interesting that there is supposedly an os in oberon that actual uses the same language for the shell or something or the kernel is written in it or something like that but this page just makes me think its not worth looking into after all