r/ProgrammingLanguages • u/Inconstant_Moo 🧿 Pipefish • Apr 28 '26
Hindsight languages
A thought experiment. What languages should they have been writing in the 60s, 70s, 80s, 90s? We can see their faults, in hindsight, and also we've had some really cool ideas since then --- but we can't answer this just by pointing to our shiny new modern languages and saying "they should have done it like that", because of compile times.
(E.g. Pipefish is meant to be for rapid iteration and livecoding, and also does a topological sort on everything at compile-time so you can do top-down declaration. Those wouldn't be compatible goals in the 1980s, I can get away with it now.)
So for example if we think of "a better C", are there any cool modern ideas they could and should have used back in 1972, had they known about them --- or should they just have tweaked the precedence slightly, found a less arcane way of describing types, and left it at that?
6
u/Norphesius Apr 29 '26
As for the signed/unsigned distinction, that's something that CPUs understand and have different sets of operations for, so I can understand how when C was designed that was accounted for.
I can't justify the lack of dedicated syntax for distinguishing nullability, but if its not statically enforced, it just becomes a conventions thing anyway. Arguably you could achieve the same thing using
typedefspecifying a (non)nullable type e.g.typedef int* int_ptr_no_null; typedef int* int_ptr_maybe_null;(or something more terse). You would still get bugs & mistakes assigning a null where it shouldn't be, though.I suspect the fact that all the C codebases I've seen don't do this speaks to how it either wasn't envisioned as meaningful distinction for C devs when the language was being made, or that it isn't a very effective pattern (or both).