On The Origin Of Features
Thanks to an angel on the blog staff at the ISO C++ web site, my last C++ post garnered quite a few hits that were sourced from that site. Thus, I’m following it up with another post based on the content of Bjarne Stroustrup’s brilliant and intimate book, “The Design And Evolution Of C++“.
The drawing below was generated from a larger, historical languages chart provided by Bjarne in D&E. It reminds me of a couple of insightful quotes:
“Complex systems will evolve from simple systems much more rapidly if there are stable intermediate forms than if there are not.” — Simon, H. 1982. The Sciences of the Artificial.
“A complex system that works is invariably found to have evolved from a simple system that worked… A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over, beginning with a working simple system.” — Gall, J. 1986. Systemantics: How Systems Really Work and How They Fail.
A we can see from the figure, “Simula67” and “C” were the ultimate ancestral parents of the C++ programming language. Actually, as detailed in my last post, “frustration” and “unwavering conviction” were the true parents of creation, but they’re not languages so they don’t show up on the chart. π
To complement the language-lineage figure, I compiled this table of early C++ features and their origins from D&E:
Finally, if you were wondering what Mr. Stroustrup’s personal feature-filtering criteria were (and still are 30+ years later!), here is the list:
If you consider yourself a dedicated C++ programmer who has never read D&E and my latest 2 posts haven’t convinced you to buy the book, then, well, you might not be a dedicated C++ programmer.
Gall’s book is a mandatory read.
Page 3 of http://www.slideshare.net/galleman/fault-tolerant-systems was used when we “invented” a triple redundant fault tolerant process control computer in the 80’s
Yes indeed, it’s simply brilliant. I’ve also got the later version “The Systems Bible”. The gall of that man! π
Just made a quick pass through your paper. Nice job.
Is that the 3rd edition?
Yes. Paperback, red border
In have both. Systematics and Bible. Thanks
D&E … the best C++ book.
This is wrong in so many ways. A is for APL, B is for Basic (oversimplified introductory language because rigorous logical expression is too much to ask of beginners), C is for C because it came after B. C is like PHP, a bad copy.
C++ is two steps back after two steps back after decades of lost progress and forgotten advanced programming language theory that was already a reality that has taken language development. We teach people functions when we should be teaching them APL as a way of expressing complex logical operations as executable code.
The nirvana of stateless code are functional expressions written in languages like J where the values are implied and don’t need to be explicitly declared even when referenced directly.
It’s not “wrong”. The figure simply shows the progressive growth of C++ and which of its features came from which other languages.
I’m a bit of a zealot and have trouble communicating my ideas clearly.