What a sad week.
Rob Pike reports that Dennis Ritchie also has passed away. Ritchie was one of the pioneers of computer science, and a well-deserved Turing winner for his many contributions, notably the creation of C — by far the most influential programming language in history, and still going strong today.
Aside: Speaking of “still going strong,” this is a landmark week for the ISO Standard C Programming Language as well. Just a couple of days ago, the new C standard passed what turned out to be its final ballot,[*] and so we now have the new ISO C11 standard. C11 includes a number of new features that parallel those in C++11, notably a memory model and a threads/mutexes/atomics concurrency library that is tightly aligned with C++11. The new C standard should be published by ISO in the coming weeks.
[*] ISO rules are that if you pass the penultimate ballot with unanimous international support, you get to skip the formality of the final ballot and proceed directly to publication.
Bjarne Stroustrup made an eloquent point about the importance of Ritchie’s contributions to our field: “They said it couldn’t be done, and he did it.”
Here’s what Bjarne meant:
Before C, there was far more hardware diversity than we see in the industry today. Computers proudly sported not just deliciously different and offbeat instruction sets, but varied wildly in almost everything, right down to even things as fundamental as character bit widths (8 bits per byte doesn’t suit you? how about 9? or 7? or how about sometimes 6 and sometimes 12?) and memory addressing (don’t like 16-bit pointers? how about 18-bit pointers, and oh by the way those aren’t pointers to bytes, they’re pointers to words?).
There was no such thing as a general-purpose program that was both portable across a variety of hardware and also efficient enough to compete with custom code written for just that hardware. Fortran did okay for array-oriented number-crunching code, but nobody could do it for general-purpose code such as what you’d use to build just about anything down to, oh, say, an operating system.
So this young upstart whippersnapper comes along and decides to try to specify a language that will let people write programs that are: (a) high-level, with structures and functions; (b) portable to just about any kind of hardware; and (c) efficient on that hardware so that they’re competitive with handcrafted nonportable custom assembler code on that hardware. A high-level, portable, efficient systems programming language.
How silly. Everyone knew it couldn’t be done.
C is a poster child for why it’s essential to keep those people who know a thing can’t be done from bothering the people who are doing it. (And keep them out of the way while the same inventors, being anything but lazy and always in search of new problems to conquer, go on to use the world’s first portable and efficient programming language to build the world’s first portable operating system, not knowing that was impossible too.)
Thanks, Dennis.
I’m late the comment party but many years ago, back when many people thought that Pascal would rule the roost. I read a comment important thing with C was that a good grad student could write a back end for the compiler to support a new arch in around 250-300 hours. Then you cross compile the compiler and Unix, and with some tweaking, you were good to go.
Far as I understand there wasn’t any other tool you do that with.
Respected Sir, I am not qualified to talk of FORTH simply because I do not know that language.I will accept your point as it is. The issue is not which is better ;the issue, I think , is whether DMR deserves this, this much, attention.Also when eulogising DMR no body takes away others’ importance. Is it expected of a DMR admirer to list everyone who preceded him and say, ” along with them I praise DMR”?
Let us praise Moore more! No problem.
And there are other things apart from portabilty.
All said and done, Sir, I praise those who Iknow and who I understand.My only request is “Be positive”.
( I think my response was to a referernce to PASCAL)
Thank you for point about FORTH.
T.Rathinavelu
What was first? The egg? Or the chicken ? Does it matter?
Anyway, TODAY I don’t think a programmer can call himself a programmer without having knowledge of C (or closely related programming languages)… So… Enjoy you’re life as you still live.
Grace!
Hope we’ll meet someday on a little puffy cloud in the sky :)
My sincerely Condolence to his Family.
From ROMANIA.
Sir,
No body denies Pascal is good.But you are clearly unaware of the field of computer scince and Application of Languages, as well as the broad spectrum of variants of Hardware, even today; or atleast your knowledge is not deep enough to appreciate the nuances of this field.
Do not bother yourself about things you probably will never understand.
T.Rathinavelu, 9840249988(India)
[email protected]
The[re] is a proposal on the the FreeBSD mailing list to dedicate the forthcoming 9.x release of the operating system in honor of Dennis Ritchie. I can honestly think of no better tribute that this considering all that his work has given us.
http://bsdnews.net/index.php/2011/10/14/a-part-of-unix-died-this-week/
He showed the world how to make a language inspired in how a hardware topology looks like and not like Mathemathics would like to implement a system — the actual inspiration of many other languages, that ended up in bulky languages.
He noticed the simple fact that a computer is made from an “address” and a “data bus” and thus you should have a strong pointer oriented design. A second important point — clearly stated in K&R book — a “library oriented design” … and then he conquered the world…
Herb
I also taught myself C from K&R. Most of my first C programs came from reading K&R, Great memorial.
Dave
Great Man..!! R.I.P Dennis Ritchie..!! We will miss you..!!
he his a inventer and a creator it’s feeling bad we miss you dennis:
Just show me a modern device which is not running UNIX or C!!
R.I.P. Dennis!
I don’t know about compilers written in Pascal, but your memory of MacOS has one problem: while the OS was, as far as I can tell, written in Pascal, it wasn’t compiled. It was written in assembler, on a pretty hefty (for the time) 8MHz M68000, which had the approximate power of the 80286 in the somewhat later PC AT (am I dating myself yet?). As far as I can tell, Pascal simply failed in being able to create a good OS, although it was usable as a design language. About ten years before the first Mac came out, Ritchie was involved in porting Unix using C. I really don’t know of anything reasonably contemporary and comparable.
So much of that rings bells Kaleberg. Thanks, though it makes me feel old too.
I believe that the world is indebted to this man, his book (The C Programming Language K&R) was my milestone.
Most of today’s mostly talked programming languages have truly evolved from the ubiquitous ‘C’ programming language. If this wasn’t been invented, the IT industry today would’ve been completely different, if not worst. On the other hand ‘Unix’ one of the greatest OS’s which again inspired for the births of other OS kernels like Linux, which today has many distributions and being used extensively in the server market. All these were gifted to the computing world by this genius, Denis Richie, who should always be remembered and admired by whoever involved in the computer world.
Sad, very sad. I had no pity when I heard about Steve Jobs. But this man… it’s different. I will never forget my excitement when I started learning C ten years ago. Thanks for C, UNIX, your contribution to OS development! Rest in peace.
Sorry but John Backus was far more influential. Ritchie simply riffed on Fortran, which was at least as portable C almost two decades before C was conceived. For quite some time almost the entire scientific programming world worked in Fortran. Backus would later point out the huge flaw in all Fortran family languages including C, C++, Pascal, Java, and many more in his 1978 Turing Award Lecture.
That said, Ritchie did take over the entire world of computer science, and systems, programming with C for a time. Not too many people besides Backus can say that. An amazing life all and all.
Thanks Dennis Ritchie for everything…..The real master of modern technology is no more and the commercial world has hardly taken cognizance of this great loss. He was a true inventor and today’s gadgets run on something he and his team invented in the 1979’s. I salute You!!!!
RIP Dennis … your contributions to our world were immeasurable.
C is highly portable, that is beyond dispute, but it is not THE most portable language invented “back then.”
FORTH is even more portable, and is almost always the first high-level language ported to new hardware because of its simplicity. Its invention precedes C by about three years. (1970 vs 1973)
Furthermore, it along with LISP is its own operating system! FORTH can support ANYTHING that C can do as well. Charles Moore, the inventor of FORTH, was a contemporary of Dennis Ritchie too.
LISP too is an even more viable candidate for the title of the world’s first portable operating system, and IT predates C and Unix by MORE THAN a decade.
Just as Steve Jobs was not the creator of the PC, an all-too-common myth being propagated too much lately, Dennis Ritchie was not the creator of the world’s first portable operating system. He simply wasn’t, and the popularity of the product does not make it so.
Why, oh why did he have to use “=” for assignment and “==” for equality comparison!
R.I.P
No matter C or Unix, I see the truth of simplicity. The simplicity to make things consistent with the situation (hardware limitation and our needs) at the time and even till now. The simplicity to make people doing things more rather than asking or arguing more(this is what industry world respects, I think). C is not only portable and efficient among machines but also among us.
On the other hand, C is just a state of art, a realistic and successful practical one branched from the long term pursue in computation science.
——————————————————————
“8 bits per byte doesn’t suit you? how about 9? or 7? or how about sometimes 6 and sometimes 12?”
you can learn this fact even in modern lisp system.
A great man
printf(“Goodbye, World!”);
RIP DMR
In the early 70s I was doing a stripped down version of PL/I to support the Magic operating system which supported a variety of multimedia and interactive applications, so I remember the era well. There were a number of cross platform low level languages before C came out; I was familiar with BCPL and PL/I, but rumors and acronyms abounded. They ran on a number of machines and were used in system level programming. Some even generated decent code. (Prime, for example, used an excellent PL/I compiler developed by a Multics PL/I veteran.)
C was much more in the vein of BCPL, a much lighter language than PL/I, and much more oriented towards the machine. The goal of PL/I was to let you ignore the machine, unless you had no choice, as for I/O control stuff. BCPL’s weakness was that it didn’t have enough data types, even as computers grew more facile. It just had words, sort of like C but with just one integer/pointers/float data type. C was a big improvement in both cases.
Ritchie wasn’t working in a vacuum, and no one thought that a language like C was impossible. All sorts of people had been working towards what he developed, but he managed to reach to sweet spot at a good time, by which I mean he actually shipped something useful. Don’t laugh. That took a lot of judgment, talent and hard work. The fact that AT&T was eating its own dog food, using C to build the UNIX operating system, was extremely important. The fact that UNIX was widely distributed because of it was free for educational institutions and ran on the PDP-11 which came in a broad range of architectures turned it into one of the classics.
P.S. I remember C on the Cray with its 60 bit word, and the implementation had char, int and float all 60 bits long; it always made string manipulation feel kind of wasteful. They just don’t make machines like that anymore. I also remember C on the DEC Alpha with its 64 bit pointers and all the C programmers amazed when their 32 bit pointer code broke. Modern C, and more importantly, modern programming standards and conventions make this much less likely.
P.P.S. It seems like the original UNIX paper just came out yesterday. I’m getting old.
James Gosling also just made the point well: http://nighthacks.com/roller/jag/entry/i_ve_run_out_of.
“Before C, programming languages just weren’t up to the task: the overheads were just too large. The sophistication of systems was really held back by the difficulty of writing large pieces of software in assembler. C was like JATO for code.”
I could be completely wrong about this, but my (almost certainly faulty) memory is that (a) quite a few compilers at MS were written in Pascal (which may explain why they were slow) because the strong typing tended to reduce bugs, and (b) the original Mac OS was mostly written in Pascal.
As David said, the achievement wasn’t a portable language — for that you can point all the way back to COBOL.
C was a portable systems programming language — portable and efficient and capable of expressing general-purpose demanding applications.
How many production compilers, operating systems, language runtimes, etc., have been written in COBOL, Fortran, or Pascal?
Not to downplay Ritchie’s accomplishments, which are far in advance of anything I’ll ever do, but one sort of unintended side effect of C’s popularity is that now every CPU architecture is some optimized derivative of a PDP. Regardless of what kind of processing you’re trying to do–even if it is as disparate as database transactions, text processing, or scientific number crunching–it has to be shoehorned into something that C can readily compile to, and that means it has to look a lot like a 50 year old architecture that just happened to be what was lying around at Bell labs.
I for one love programming in C because it gets me close to the machine, but I do miss the idea that there is more than one “right” way to design a CPU.
It obviously wasn’t impossible to have one language on a number of different systems, since most available computers had FORTRAN or COBOL compilers. It obviously wasn’t impossible to have a language for system implementation, handling very low-level constructs, because different computer manufacturers were working with that.
What was obviously impossible was to provide a language on a number of different computers that was sufficiently low-level and efficient to be used as a system implementation language, while still being expressive enough to be used as a general-purpose language like ALGOL.
Wonderful write up Herb, thanks for sharing those “bits” on Dennis. You’ll also be remembered for pushing the language to the next level.
A giant, gone.
Let’s not diminish his contributions by making false claims. C followed in the tradition of Algol, which also spawned Pascal, which per Wikipedia was maybe a year ahead of C. Pascal had very well-defined ability to work on multiple architectures, thanks to its (generally despised by C adherents) insistence on strong typing.
IIRC, the UCSD Pascal system ran on some 40 different computers in the 70s and Western Digital even made a 16 bit machine designed for it, one of the very first true 16 bit home PCs.
C obviously was seen as more flexible and productive, eclipsing Pascal everywhere except in the classroom, where Pascal’s more explicit typing helped clarify basic concepts. But I don’t know why anybody would say that it was thought impossible to have one language on a host of architectures in the 70s.
Bjarne’s statement that C helped you write code that is “b) portable to just about any kind of hardware” is a bit of an overstatement, not to mention his claim that people said it couldn’t be done; dmr worked on Unix in part as a reaction to his work on Multics, which was also written in a high level language with an efficient compiler. And C’s machine model is so simplistic that it never really could adequately support a PDP-10 or Cray X-MP (as I know from experience).
The real point in what he said is in a way is even more powerful: C was/is good enough that basically every processor these days is a “C machine” — byte addressable, 8 bit bytes, sizeof (char *) == sizeof (int *) etc. Anybody who started programming after the early 80s probably can’t imagine programming anything else. Essentially, C fit _a lot_ of the hardware (basically, IBM-style hardware, though it was developed for the PDP-11) so people stopped building hardware that didn’t look like a PDP-11. A virtuous network effect.
Remember he forever!
GREAT INVENTOR & REVOLUTIONARY MAN!!! R.I.P. IN PEACE!!!
Mauro Deponti Senago
El pasado 9 de octubre falleció Dennis Ritchie, el padre del lenguaje C y del sistema operativo UNIX.
A partir del lenguaje C derivaron muchos otros lenguajes como C++, java en todas sus variantes, y muchas de las propuestas de este lenguaje se impregnaron en la evolución de la mayoría de los lenguajes modernos de programación.
El sistema operativo UNIX influenció a todos los sistemas operativos hasta la actualidad. De los ejemplos, modelos, abstracciones y teorías incorporadas a UNIX, se derivaron la mayor parte de las funcionalidades de los sistemas operativos modernos, como Windows, Linux y en particular OS X. Estas abstracciones sobre sistemas operativos y formas de procesar información influenciaron también al hardware promoviendo funcionalidades en los procesadores modernos para implementar las ideas vertidas en UNIX en forma eficiente en las nuevas arquitecturas de computadores.
Ciertamente esta es una pérdida de alguien que si bien no estuvo en la vidriera mundial, sus ideas son las que dan soporte hoy a todas nuestras cyberactividades mediante sistemas de información.