4 ms·
Very nice semantics, but hideous syntax. Pascal had it done right with a more linear declaration syntax. C looks like lisp in a bad way if you make slightly non
by Dellort 17y ago
Very nice semantics, but hideous syntax. Pascal had it done right with a more linear declaration syntax. C looks like lisp in a bad way if you make slightly nontrivial declarations. Of course to make matters worse somebody went on and made C++, which must be the most hideous language ever to evolve, possibly because its creator borrowed heavily ideas from how his native natural language Danish was formed; It is mostly comprised of guttural sounds and every new groan you make is added to the language. It has been said that C++ is to C what lung cancer is to lung.
Basically we will never get rid of C, for there is just too much piled up on it. C++ though we should replace because it is an atrocity to programming.
- MikeTaylor 17y agoC's syntax is much more terse than Pascal's; whether that makes it better or worse is open to discussion. begin...end or {...}? I would argue that Pascal's syntax is easier to learn, but that C's is easier to use once learned. And since I spend more time using languages than learning them, the latter is more important to me.
- Dellort 17y agoThe nontrivial differences are more interesting. To make declarations look similar to use was a gigantic mistake. http://cdecl.org/ http://cdecl.org/
- tzs 17y agoHow is it a mistake? In C, if you know how to use it, you know how to declare it, and if you know how to declare it, you know how to use it. I don't see how one can make even a remotely plausible case that doing it otherwise would be an improvement.
- Dellort 17y agochar * (*(** foo[][8])())[] declare foo as array of array 8 of pointer to pointer to function returning pointer to array of pointer to char Which do you prefer reading?
- senki 17y agoWhy would you write code like this?
- Dellort 17y agoThe point is not that, but that as soon as you make slightly nontrivial declarations it is not readable in one pass.
- senki 17y agoWell, the K&R book talk about the complicated declarations, and recommend the use of the typedef command. Also, it contains a simple program called "dcl", analogous to what you linked.
- sketerpot 17y agoIf that's what you consider "slightly nontrivial", I never want to see what you would consider a difficult type declaration.
- eru 17y agoI'd volunteer some Haskell, but I am afraid that while complex, it doesn't have enough line noise in the type declarations.
- mcantor 17y agoThey're both equally illegible to my eyes!
- tzs 17y agoThe first, for a couple reasons, but that's not relevant. My point was that I see no advantage or even plausible case for having declaration syntax be different from use syntax. If C made us declare foo using the second format you gave, we'd still have to write, e.g., ((foo[12][3])())[7] in the code where we are actually trying to use foo. Can you look at a declaration in the second format, and compare to where the variable is used, and see quickly if the usage is correct? With the current declaration format, it's easy--because declaration and usage use the same format.
- barrkel 17y agoC's type syntax for functions, pointers and arrays is terrible; it was an experiment that failed. C++ made it worse when introducing references and cv-qualifiers.
- magoghm 17y agoIn the 80's we used to say: "You can't compare Pascal to C. It's like comparing a bicycle with training wheels to a ten-speed racing cycle."
- eru 17y ago> to a ten-speed racing cycle. Lacking brakes.