I used Modula-2 to make a long series of products over 20 years.
It was a supremely robust language with so many checks, which means fewer errors and reliable software.
however, in the world of graphics and web, not having variable length strings in the language is a huge hindrance.
I switched to using ObjectiveC for making iOS apps. Really there was only 1 language from Apple for this task.
Now there is a second language, Swift, which is very complex.
Anyway i got fed up with the lack of an airtight language, so i built what i hope Prof. Wirth would appreciate, an evolution of Modula-2, called Beads.
Beads is very similar to Modula-2 in terms of syntax and philosophy, although i migrated from semicolon statement delimiting to indent significant format (like Python).
• It is a strongly typed language (with implicit typing) with a more modern set of primitive types: number, string, bitmap image, sound, movie, regular expression, etc. The implicit typing means if you say var a = "hello", we can infer that a is of type string, saves typing.
• it has a graphic model built into the syntax, so you can subdivide the screen into subareas, and thus build very complex screen layouts in the language itself. So unlike HTML/JS/CSS you have full IF statements and variables to construct the layout.
The compiler is free at beadslang.com
. It is primarily intended for making graphical interactive software, for client or server, and currently exists as a transpiler, that emits either JS or AS3/Haxe.
It has protected arithmetic, and a full graphical/event model in the language, so you can build a graphical app only using the language and about 2 dozen std library calls to draw. It is the only thing i know of that returns graphical programming to the simple world that Modula-2 and other 70's languages like Basic was all about.
For those Modula-2 lovers, I encourage you to take it for a spin, and let me know how close i hit the target, which was to evolve Modula-2 towards the modern era; retain strong typing with robust compile time and runtime checks, but permit modern things to be built.
It has some unique features that weren't possible due to resource limitations at the time of Modula-2. Such as the ability to know when data changes; if you draw a widget that depends on a state variable "temperature", when that variable changes value, the widget using that variable is automatically scheduled for refresh. This ability to track values, means you can reverse the system for debugging. This is a high overhead feature, but is invaluable for recreating rarely occurring error states.