Subject: Re: Can I use Lisp? From: Erik Naggum <erik@naggum.net> Date: 03 Nov 2000 01:24:54 +0000 Newsgroups: comp.lang.lisp Message-ID: <3182203494509935@naggum.net> * "Janos Blazi" <jblazi@netsurf.de> | You will probably not answer technical questions if I am the one to | ask them but in technical things you are really very reliable so | here it is: I don't react or respond to people, but to what they _do_. You have certainly made an impression, but that impression may change. If you do something that _isn't_ annoying, you wouldn't find anyone happier with that than me, but I would be slightly more irritated than usual if you didn't keep it up. | If you were to program in C for any reason: Would you stricktly | follow the C standard or would you add C++ elements when necessary; | are there additions of C++ to C which you regard as an enrichment of | C? There is nothing useful in C++ that is not already in ISO C. C++ is about hiding and obfuscation, both of which are ostensible qualities of abstraction if you do not understand at all what is going on around you. E.g., _defining_ the interface to the linker such that you require name mangling is simply retarded. There are many cases like that. If you do not want to walk the necessary distance, do not walk the extra mile in some other direction just to show that you aren't lazy. C++ has done more damage to programming language design than any other in the history of computing. For one thing, it showed the wrong people that you _could_ base something on C, which is really bad, because you can't. C is not the language you extend. C is the language you do _not_ extend. C is at the far end of its optimization path. It may be envied for its success, but if one does not understand that it was much, much prematurely optimized qua language, there is no hope at all of ever finding any other path (and I think the "progress" of programming languages in the past decade has shown _that_ with a depressingly strong forcefulness). In my opinion, C cannot at this time be improved without breaking it in important ways (such as C++ in fact did). The ANSI/ISO process was already a little overzealous with those "const" jokes. (And its primary designer had to step in to stop them from adding "noalias".) Neither do I consider the feeble "support" for classes in C++ an improvement. There is a lot of really clever work in force-feeding C with stuff it could never really handle, but cleverness and good intentions do not make a metric for good results. C++ is the worst kind of misfit: The niche it tries to fill (which is enabling programmers to think at a much higher level while forcing them to be concerned with the lowest level details) is a contradiction in terms and should not be created even though such contradictions _may_ exist in the software world. If I want what C++ wanted to give the world, I'll use Java, instead, and write the stuff that needs tight hardware coupling in pure C. I very seldom want what C++ tried to give the world in the first place, but that is another story. Very few languages are better than C for their purposes. Very few languages are worse than C++ for their purposes. This is absolutely no accident. It is a necessarey consequence of optimization, of very bright people who considered a very narrow problem and solved it exceptionally well. It's like creating the perfect steam engine -- you simply cannot use any of that brilliant work if you want an internal combustion engine or an antigravity propulsion system, and it is _fantastically_ stupid to think you could, but if you watch people struggling with unknown problems and known solutions, they will rather apply more force and energy on making the problems fit their solutions than snap out of it and try the reverse for a second. The worst that could "happen" to a very intelligent person is that is not "allowed" to break out of the conditions set for him by his precessors. If you cannot say "This is all wrong, let's zoom out and try over", the best you can hope for is good engineering, but good engineering should be coupled with good ideas, too, and the time you discover whether you have a really good idea is when you _don't_ have to be super clever just to do ordinary stuff, but for people who love to be clever, who are patted on the back and in many other ways rewarded for being clever, languages like C++ (and Perl) will win followers. _Anyone_ can be really clever in C++. _Any_ idiot can sit down with its _enormous_ definition and find some miniscule point that makes some fairly reaonable thing into a very special case with far-reaching ramifications that will impress other idiots. But it is anti-productive, the antithesis of good design, and a promulgator of cleverness to do the ordinary that means nobody has any time to be clever on the hard problems. In C, there is an upper limit to how clever you can be, and that's a fantastically important property of the language: It means people tire of being the cleverest, so the cycle of useless rewards stops. Until a really stupid person came along and invented C with Classes, of course. I still use C mainly because it's the Unix system language. It is hard to interface to Unix without being really good at thinking C. In like manner, Windows is married to C++, but at least Unix has real qualities, too. #:Erik -- Does anyone remember where I parked Air Force One? -- George W. Bush