4 ms·
this is a reasonable historical point buried in some nonsense: >all sorts of people in the 1980s wanted a low level programming language, C was around, and so
by fsckboy 4y ago
this is a reasonable historical point buried in some nonsense:
>all sorts of people in the 1980s wanted a low level programming language, C was around, and so they seized on it. Any similar language would have done; it's just that C was lucky enough to be the one that came out on top, partly because of network effects.
any similar language would have done? there were no other similar languages for the low level programmers who wanted one, none, zero. So the "network effect" of C was that it had all the users in it because it was the only option.
There were some predecessors and pretenders to the throne--PL/I, BLISS, B, BCPL... pascal? forth? nah, c'mon--but they were not as good as C. C was small, and C had pointers that would increment by sizeof(type): indispensable.
The sudden need for a low level language for a lot of programmers at the same time was the birth of the microprocessor personal computer. These were new architctures, and there were no standard operating systems for them yet (there was competition for them, and the ones that emerged were bare bones) and programmers needed to write apps. Lotus 1-2-3 "won" by being written in assembly, there was still room for that choice.
Those other languages (mentioned above) existed on other architectures but not on these new microprocessors, and if you were going to start/port from scratch, you weren't going to reach for those, some were too big (PL/I), some were already archaic or tied to narrow architectures (BLISS was all DEC and DEC was very busy trying to pretend that microprocessors needed to be shoehorned into the minicomputer architecture), and none had any network effect to speak of in this adjacent community. If you were graduating with a CS degree at that time, you barely wanted to work on primitive microprocessors, they didn't have all the fancy CS features you were used to in school, the tech at that time had a much more (but by no means exclusive) self-taught and trade school by the seat of pants type engineering vibe.
C also had wonderfully unspecified behaviors to allow flexibility to the definition by the implementation on particular architectures (did your ISA detect 2s complement overflow? was your architecture 2's complement? if you need that, figure it out, if you don't, don't waste the cycles) and that was incredibly useful and incredibly efficient. (the people who went to the school-of-prissy-compiling who are throwing that all away now are polluting the world, spewing suffocating carbon dioxide more than a bitcoin miner using their optimizations. there's nothing wrong with what compiler writers want, they want features equally as cool are as cool as C's undefined behaviors (not really C's, the defined behaviors of various architectures), but you can implement these new features without stomping all over features that other people use)