Bjarne Stroustrup Awarded 2015 Dahl-Nygaard Prize
mikejuk writes Bjarne Stroustrup, the creator of C++, is the 2015 recipient of the Senior Dahl-Nygaard Prize, considered the most prestigious prize in object-oriented computer science. Established in 2005 it honors the pioneering work on object-orientation of Ole-Johan Dahl and Kristen Nygaard, who designed Simula, the original object-oriented language and are remembered as "colorful characters." To be eligible for the senior prize an individual must have made a "significant long-term contribution to the field of Object-Orientation," and this year it goes to Bjarne Stoustrup for the design, implementation and evolution of the C++ programming language. You can't argue with that.
It's Sladhdot. Watch me..
'When I invented the term Object Oriented, C++ was not what I had in mind.' - Alan Kay.
I am TheRaven on Soylent News
I think that OO is possibly the worst thing that ever happened to computer science. Nice try, but it turns out that in practice, inheritance is a bad idea. Luckily C++ doesn't force one into OO like the more pure languages do. That's why I like C++.
Contribution to Object Orientation? That's like an award for hammer-based carpentry.
As Stroustrup himself has explained several times, C++ is a multi-paradigm language. You can use it to do C-style system programming (indeed, using the exact same library and system calls without the overhead of a translation layer), object-oriented programming, or generic programming, and mix and match within the same app, library or even the same class definition. And there's no bytecode virtual machine overhead.
So to say that it's not a pure OO language, well no, it wasn't designed that way.
Who knew that there was an annual award for such a specialized field? It's surprising that Stroustrup hasn't gotten this award already. Based on the Wikipedia entry about this prize, it looks like in 2013 and 2014 they couldn't think of anyone else who created a popular object-oriented language. Maybe somebody should tell 'em about Guido Van Rossum and James Gosling. And what about the STL guy who was just interviewed here? Not to mention the Objective-C guy, whoever he is. (I'm sure I've left many other deserving candidates out - sorry about that.)
You are missing the point, you can't do true OO programming with C++
Fortunately, more people are starting to recognize that. I'm amazed it took this long.
Where's Tablizer? He's owed some vindication.
Required reading for internet skeptics
Why is inheritance a bad idea?
It couples polymorphism/dynamic dispatch to implementation sharing. These concepts can be used orthogonally through other means which gives much better flexibility. One example is what Go does with interfaces for one polymorphism/dynamic dispatch and composition for implementation sharing. You can do this style in C++ as well, and it often works out better than massive type hierarchies. Its much easier to re-factor (thus requires less upfront design) and avoids the problems of multiple inheritance. It can get you lower coupling too.
What is true OO and how C++ prevents me from doing it? Show some code.
Well it's been many, many years since I've used it, which was back in the late 80s and early 90s. My impression from this time is that C++ is unquestionably a work of genius, but that I didn't particularly like it. Part of that is that we didn't really know how to use it effectively. In that era most object oriented programmers used concrete inheritance way too much. Part of that is due to aspects of what we thought an OO language should have that turned out to add complexity while being only marginally useful in practice (e.g. multiple concrete inheritance and operator overloading).
But in terms of meeting its design goals C++ is a tour de force of ingenuity -- even if some of those goals are questionable by today's standards. The very fact that we know some of those features aren't necessarily ideal is because they were taken out of the realm of academic noodling and put into a practical and highly successful language that could tackle the problems of the day on the hardware of the day. It's hard to overstate the practical impact of C++ on the advancement of both theory and practice of software development.
Any prize for contributions to OO programming pretty that didn't include Stroustrup in its first recipients would be dubious.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
What is true OO and how C++ prevents me from doing it? Show some code.
It's like a resume question from Evil Overlords, Inc. software division.
I thought Dahl-Nygaard was an Indian soup.
But a question for those who have: Does it still win with dynamic memory allocation? How granular is the dynamic memory allocation? Complete like C? or it is a bastardized version where the common block sizes could be defined at run time and then it runs without ever calling free()? I could imagine the language getting malloc() but not free() to retain speed.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
Because its requirements, chosen by its designer, were misguided and impossible to achieve with a clean, elegant design.
Attempting to be compatible with C was a terrible mistake. The resulting language complexity, inconsistency, and limitations resulted in an unsafe language much harder to use than is justifiable.
What would have been wrong with just creating a compiler which was both a C compiler, and also a compiler for a clean OO language.
Programs could have had C functions in some source files/directories, (considered unsafe, of course), and clean OO modules in other files / directories. An easy way of using data in some C types such as basic numbers, arrays, and strings within the OO language could have been crafted, and a no-muss-no-fuss way of calling C functions from OO and vice versa could have been included.
What was lacking was the courage to drag programmers away from C rules and conventions enough to create a simple and powerful OO language.
The ugly compromise approach set back OO programming momentum, cost millions of person-years of unnecessary debugging effort and allowed many, many continued buffer overflow exploits etc. that ruin the reputation of software in general.
Where are we going and why are we in a handbasket?
Like they say:
C++ combines the speed and power of assembly language with the readability and high level language features of assembly language.
"I would try out the [C++] language [at AT&T] as it was being developed and make comments on it. It was part of the work atmosphere there. And you'd write something and then the next day it wouldn't work because the language changed. It was very unstable for a very long period of time. At some point, I said, no, no more. In an interview I said exactly that, that I didn't use it because it wouldn't stay still for two days in a row. When Stroustrup read the interview he came screaming into my room about how I was undermining him and what I said mattered and I said it was a bad language."
"[C++] certainly has its good points. But by and large I think it's a bad language. It does a lot of things half well and it’s just a garbage heap of ideas that are mutually exclusive. Everybody I know, whether it’s personal or corporate, selects a subset and these subsets are different. So it’s not a good language to transport an algorithm—to say, "I wrote it; here, take it." It’s way too big, way too complex. And it’s obviously built by a committee. Stroustrup campaigned for years and years and years, way beyond any sort of technical contributions he made to the language, to get it adopted and used. And he sort of ran all the standards committees with a whip and a chair. And he said "no" to no one. He put every feature in that language that ever existed. It wasn't cleanly designed—it was just the union of everything that came along. And I think it suffered drastically from that."
Ken Thompson; cited in Seibel, Peter (2009). Coders At Work. p. 475.
Yes. And it is "see" "ploose" "ploose" for those in the know.
Where are we going and why are we in a handbasket?
I've spent over a decade writing C++ code professionally for financial, insurance and CRM systems. So Stroustrup made a half-baked badly designed partially-OO langauge that has set back the evolution of real OO back at least two decades, and he gets an award? A kick in the ass would be more appropriate.
I have lost count of the number of times I have ran across a mess of C++ code where someone was trying to implement Smalltalk-style semantics in C++. Which doesn't work.
C++ rewards good design but brutally punishes poor designs. And most C++ coders aren't very good at designing clean class hierarchies. This means that most large C++ programs end up being insane vats of code goo after a few years.
Oh, and pet peeves...
The class mechanism in C++ is used to implement several incompatible concepts that would be best separated. One of these is "objects". Objects ideally are almost always used in pointer or reference context, use inheritance, and all public member functions and their destructor should be virtual (a class with a virtual function and a non-virtual destructor is a memory leak waiting to happen). Objects should almost never use operator overloading. Another concept is "values". Values use the copy-constructor and assignment operators, should almost never use inheritance (because getting a virtual assignment operator to work sanely is hard, and a virtual copy constructor isn't really possible) and might use operator overloading. Any case where these two concepts mix is very rarely good.
On the other hand, I can bill $1000/day telling people in painful detail that they have a screwed up mess of code. So C++ is at least rather lucrative for me.
There are a few languages I'd call works of genius, like LISP and Forth. C++, however, is not one of those languages.
Required reading for internet skeptics
Kudos, and well deserved.
C++ is my favorite language to program with, over the past few years.
Uh, Linux geek since 1999.
What is true OO
No one knows. Those who think they know all disagree with one another.
Required reading for internet skeptics
C++ rewards good design but brutally punishes poor designs.
You hit the nail on the head, somewhere in the early 90's, language vendors stopped claiming "Our language supports OO concepts" and started claiming "Our language is OO".
The first C++ compiler I used professionally was Wacom's (circa 1991). Back then the Watcom C++ extensions were not part of the language, they were implemented with a bunch of C macros pulled in with include files, the macros themselves were riddled with goto (another macro) statements. I still have nightmares....
The fact is any general purpose language can be used to implement an OO design because OO is not about language features, it's a design methodology, or at least that's what I was taught when studying for my CS degree in the late 80's. As my smalltalk lecturer pointed out at the time, most of the examples in K&R's "The C language" are also great examples of OO design that were written long before the term OO was invented.
Disclaimer: These days I spend much more time tying spaghetti balls with different flavoured source together than I do trying to untangle the individual gordian knots.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
Well said, you can pull up a lawn chair next to mine anytime.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
In my career, C++ has been my least favorite language. There's really nothing I like about it, save its introduction of // commenting. I hate looking at a page of C++ and not having any idea and knowing I can have any idea ever given that one page.
I wouldn't recommend it for anything, for anyone, ever.
When the only hammer you have is C++, every problem looks like a thumb.
C++ is to C as Lung Cancer is to Lung.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
considered the most prestigious prize in object-oriented computer programming
I won't put it past /. submitters or editors, but why can't the very intelligent, accuracy-blessed computer coders out there, at least, understand this? If you're not doing any science, then it can't be "computer science."
The Admin and the Engineer
Re: "object-oriented computer science" -- Where is the "science"? Where are the theories, the metrics, and the independent repeats to verify?
Table-ized A.I.
There's probably a number of reasons, but the one explanation I like the most is Sussman's explanation in SICP regarding how object type systems relate to ontologies in knowledge systems: since we still have problems with the latter, it is logical we hit inadequacies and corner cases in the former, too.
Ezekiel 23:20
It couples polymorphism/dynamic dispatch to implementation sharing.
Well, in most languages with some OOP support.
Ezekiel 23:20
Where's Tablizer?
Here? :-)
Ezekiel 23:20
What is true OO and how C++ prevents me from doing it?
One of the commonly expected features would be the ability to late-bind the features of the language itself, for example, method lookup. Which C++ to my knowledge lacks, the mechanisms are fixed.
Ezekiel 23:20
Where are the "Functional Science" awards? You gotta have Paradigm Envy, no?
And how about the Procedural Awards, and the Goto Awards? I hear the Goto team racks up a lot of air-fare.
Table-ized A.I.
Developing a useful, general framework for expressing the relations among different types of entities (what philosophers call ``ontology'') seems intractably difficult. [...] a variety of inadequate ontological theories have been embodied in a plethora of correspondingly inadequate programming languages.
My favorite example of that is the Circle-ellipse problem. It seems so natural that a circle is-an ellipse, but it doesn't map to OO heirarchies the way we expect it to. The ontologies offered by OOP languages are always presented as if they were perfectly natural and universal without a hint of the lurking problems. It's not until you come up against some of these problems (hopefully early, before you've drank the coolaid) that you start to realize something's wrong.
[...] In fact, we suspect that these problems cannot be adequately addressed in terms of computer-language design alone, without also drawing on work in knowledge representation and automated reasoning.
Ok, fine, but I'd settle for less inadequate.
Because you don't understand how to use memory properly so lets make it the compilers problem :-)
Is this in the same vein as "Ppl who don't know General Relativity slamming the Speed Of Light"?
The big problem with C++ is that it's complexity makes it unknowable for the vast majority of the population.
On the plus side, it does make producing entries for Code Obfuscation contests rather easy! <smiley />
I'm going to disagree with this: inheritance can be an excellent idea. It can be way overused. Good C++ code doesn't have inheritance for the sake of inheritance, but rather to use different types the same way with appropriately different results.
If there's a massive type hierarchy in C++ software, chances are it's a real mess, and should have been avoided.
"When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
In what way is late binding a matter of object orientation? I'd think it a feature in its own right.
"When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
I don't understand this distinction between "object" and "value". It sounds to me like an object is something that can be named and a value is something an object has (in other words, the difference between lvalues and rvalues), and in that case, you're making no sense. Could you clarify?
"When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
...are you serious?
Ezekiel 23:20
To get it to pass, rename it JobCreator++
Table-ized A.I.
nonsense, you just think you were doing oo development. C structures with pointers to functions aren't really objects, sorry.
myArray = 4.dogs("lewis","bowser","spot","snoopy")
myArray.names.uppercase.sort!
Let's see your code, big guy, especially calling methods on your integer 4.
then your in-place modification of the array to uppercase and sorted by name