The language CeePlusPlus seems to have replaced Ada as the language that the programming cognoscenti just ''love'' to hate. The hacker and cowboy crowd (see SmugCeeWeenie) thinks it's a fat bloated pig; the high-level language community point out its numerous low-level and unsafe traits. Even JavaLanguage fans (the language that is Most Likely To Replace C++ As The Most Hated Language) love to dump on C++. However, there is rare (if not endangered) species out there, which is hard to find but beautiful to behold--the SmugCeePlusPlusWeenie. These are the guys that think C++, due to its wealth of features and its unrestricted access to the hardware, remains the epitome of programming languages. How to spot one: * Preaches the virtue of MultiParadigmProgrammingLanguage''''''s. However, if you utter the words "O'Caml" or "CommonLisp" in his presence, he pretends not to hear you. ** Either that, or he thinks that Common Lisp is a silly-ass academic language that was written back in the 50's, and O'Caml is an Irish dromedary. ''And Oz is that place full of wizards and munchkins and yellow brick roads.'' * Considers the language runtime to be a post-processor for the template mechanism. Engages in TemplateMetaprogramming tricks that will make your head spin (and that of BjarneStroustrup as well). ** Thinks that C++ should deprecate the >> operator, because he's tired of having to put spaces between closing > braces in his template code. *** And wishes he could overload the '''<>''' braces in templates. **** Probably unlikely. But BjarneStroustrup considered allowing the overloading of operator '''.'''. Now '''that''' would be cool, and enable all sorts of fun ThreeStarProgramming. (See TheDesignAndEvolutionOfCpp). ** Thinks the C++ "extreme templating" example of NinetyNineBottlesOfBeerOnTheWall is an example of how ''all'' programs should be written. Simply using a loop to count down from ''n'' to 1 is so...banal. The template version will eliminate the inefficiency of looping. :) Why waste precious CPU cycles on branch statements and other pipeline-stalling extravagance, when via the magic of templates you can unroll your loop at compile-time and eliminate this onerous overhead. The fact that program size is now O(''n'') in the number of beer-bottles is irrelevant (as is the fact that the loop body is doing I/O, so the alledged "overhead" of the looping instructions is ''de minimis''). The instruction cache be damned, obviously. ** Makes ''every'' function a template (except for virtual ones, which can't be...) *** Can decipher the hieroglyphic error messages the compiler emits when he makes an error doing this sort of thing. * Thinks the only useful GarbageCollector is the one that empties his trash can every Thursday morning (the 30-gallon can he puts out on the curb, not the icon on a Macintosh). ** However, is fond to point out that alone among HLLs, C++ is suitable for ''implementing'' a GarbageCollector (and other systems programming tasks) by way of reference counting pointers, implemented of course by overloading almost all operators (see below). ** Has his own reference-counting SmartPointer class anyway. ** Believes that any template type name more than one character long is a sign of poor style and mental weakness (has similar beliefs about class and member names) * Speaking of Macs, thinks that SteveJobs ought to get with the program and quit peddling this ObjectiveCee nonsense. * Even if he hates Microsoft, thanks BillGates on a regular basis for making C++ the preferred language for Windows systems programming (thus ensuring that C++ will be in industry for a long time). * Doesn't understand what's the big deal about DynamicTyping. Reasons that if he wants to do sloppy things like ''that'', he can roll his own framework for that sort of thing. (See GreenspunsTenthLawAtWork). * Thinks that overloading "operator ," is a neat trick. ** Especially when the same class overloads the operators '''()''', '''[]''', unary '''&''', etc, preferably to do amusingly non-traditional things like delete files. A class that doesn't overload '''all''' operators just isn't finished yet. *** Thinks that it is silly that you can't overload operators on intrinsic types. * Agrees with the SmugCeeWeenie on the subject of things like PointerArithmetic and such. * Agrees with the SmugCeeWeenie on the issue of speed (and bitches that most C++ compilers won't stick small objects in registers). Disagrees with the SmugCeeWeenie on the subject of program ''size''; whereas the SmugCeeWeenie likes programs that are both fast and concise, the SmugCeePlusPlusWeenie prefers to throw code size to the wind in order to squeeze out that last cycle of performance. The differing attitude of the two groups of weenies on templates is an indicator of this underlying philosophical difference. ---- CategoryWeenie