Hacker News new | ask | show | jobs
by mikulas_florek 3368 days ago
Isn't C 11 years older than Turbo Pascal?
1 comments

C was a UNIX only language, it had no relevance outside UNIX in the 80's.

Those of us using CP/M and other systems had access to K&R C dialects like Small C, not fully compatible with C.

In those days C was just another systems programming language, looking for a spotlight.

That spotlight came thanks to universities adoption of UNIX, which given AT&T prohibition to profit from it, it was sold at symbolic prices and a few AT&T researchers did provide tapes to universities. Which then started to adopt UNIX instead of paying commercial licenses for other OSes.

So when workstation startups like Sun and SGI started to look for OSes, they based their software stack on UNIX.

Before the widespread of UNIX out of university labs into the workstation market, C wasn't that relevant.

You see the same happening nowadays with Browser == UNIX and JavaScript == C.

Also C is actually 10 years younger than Algol or PL/I, both used to implement several mainframe OSes.

I disagree that C was looking for spotlight.

C was the system programming language of Unix. Many people wanted Unix, so they started programming in C, because that was the best supported language. In the late 70s, byte code interpreted Pascal was also popular on Unix because it allowed for bigger programs on the then current 16-bit systems.

It's pity that Modula-3 never got much traction. I guess that's part do to Modula's overly verbose syntax.

C works as long as the platform is sufficiently like Unix.

For example, in the MS-DOS world with near and far pointers, programming in C becomes utterly confusing.

These days, linker scripts and ELF hide a lot of stuff C cannot express.

> For example, in the MS-DOS world with near and far pointers, programming in C becomes utterly confusing.

C can still be really "interesting" on Harvard architectures (many popular micros, PIC and AVR for example). Though it isn't that bad, since the compiler sorts constants and the like automatically out and loads them into memory (which means that by default constants that are not optimized out - like strings - will be deduced from the available memory ... 64 to 2048 bytes on typical SKUs).