Hacker News new | past | comments | ask | show | jobs | submit login

C'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.



C'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.


In 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."


> to a ten-speed racing cycle.

Lacking brakes.


The nontrivial differences are more interesting. To make declarations look similar to use was a gigantic mistake.

http://cdecl.org/


How 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.


  char * (*(** 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?


They're both equally illegible to my eyes!


The 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.


Why would you write code like this?


The point is not that, but that as soon as you make slightly nontrivial declarations it is not readable in one pass.


Well, 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.


If that's what you consider "slightly nontrivial", I never want to see what you would consider a difficult type declaration.


I'd volunteer some Haskell, but I am afraid that while complex, it doesn't have enough line noise in the type declarations.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: