Wirth languages lost to C in part because they weren’t flexible enough.
It’s true that C’s flexibility comes at the expense of safety - but during the “Cambrian explosion” of personal computers, Wirth took too long to address limiting factors.
E.g. open arrays iirc were added in Delphi; the functionality makes life significantly easier. As a result, pascal people had to break the language shackles (and safety guarantees) and doing that created a just-as-unsafe-but-more-cumbersome situation compared to C.
Wirth languages sucked at variable length dynamic memory.
Open arrays were in Delphi from the beginning, but Dynamic arrays were added much later (circa 4.0 IIRC.)
Object Pascal was always a lot more free with setting the bounds of an array too - you could specify any arbitrary range or even an enumeration. That's one thing I miss in C like languages. Being able to define an enumeration, then set the array bounds to that type - and then access it via the enumeration's values.
On a side note, I also miss sets. They were a first party part of the language, not a set of bolted on classes in the runtime library. I remember that I would quite often defined an enumeration, and array that used that enumeration as the subscript and a set to allow parts of the enum to be turned on and off when accessing the elements of the array. That was pretty cool. It made certain things a lot simpler - like defining errors that were raised by an action and then getting their textual error messages - all without having to do any conversion or anything fancy.
Yeah I loved sets, enumerations and sub-ranges as well.
You can achieve some parity in C++ and other languages with similar type systems, but it does require some tricks and I am not sure if everyone would appreciate it.
Too late, when Windows 3.1 was slowly getting adoption?
Outside expensive UNIX workstations C was just yet another systems language.
In those days 16 bit software was still mostly written in Assembly for those that cared about performance, including games and OSes.
On my region of the globe using C on MS-DOS was to bring work home.
At my technical school we were sharing a Xenix workstation between all class, meaning taking turns to seat at it.
On OS/2, Windows, Mac OS and later BeOS, C++ was already winning ground as the main language for application development, even though the kernels were being written in C.
It was the rise of free UNIX clones that helped C turn the tables into its direction.
I guess it's a regional thing then. In my corner of the world, Pascal was already dying commercially in 1992, Delphi gave it a final breath of life, but not enough to save it.
Windows was starting to get adopted, Unix was not yet a thing in the homes (but enthusiasts DID start Linuxing by 1994-1995), Assembly was getting irrelevant except for demos, games, and the occasional tight loop, 16-bit was seriously dying -- everything new was 32-bit with dos extenders, Watcom was the best compiler ever, and DJGPP was common -- C and the shiny-new-but-not-yet-convoluted-C++ were kings.
And there was essentially no viable Pascal for PCs other than Turbo Pascal -> Borland Pascal -> Delphi, so it doesn't really matter what the standard said.
It’s true that C’s flexibility comes at the expense of safety - but during the “Cambrian explosion” of personal computers, Wirth took too long to address limiting factors.
E.g. open arrays iirc were added in Delphi; the functionality makes life significantly easier. As a result, pascal people had to break the language shackles (and safety guarantees) and doing that created a just-as-unsafe-but-more-cumbersome situation compared to C.
Wirth languages sucked at variable length dynamic memory.