| > But in fact, if you read the entire answer carefully, he came to the same |
| > conclusion I do: that you have to go with familiar syntax over logical |
| > syntax because familiarity is such a strong force: |
| > "However, familiarity is a strong force. To compare, in English, we |
| live |
| > more or less happily with the absurd rules for "to be" (am, are, is, been, |
| > was, were, ...) and all attempts to simplify are treated with contempt or |
| > (preferably) humor. It be a curious world and it always beed." |
| |
| Although you have to remember that his situation was considerably |
| different than ours. He was in a position where he was designing a high |
| level language that had to be COMPATIBLE with C. Our language is such |
| that a new person would have to learn the new, different, syntax |
| anyways. Making them learn about the type system does not seem like much |
| of a stretch from learning the opcodes and how SSA form works, and how |
| everything ties together... |
| |
| > > Basically, my argument for this type construction system is that it is |
| > > VERY simple to use and understand (although it IS different than C, it is |
| > > very simple and straightforward, which C is NOT). In fact, I would assert |
| > > that most programmers TODAY do not understand pointers to member |
| > > functions, and have to look up an example when they have to write them. |
| |
| > Again, I don't disagree with this at all. But to some extent this |
| > particular problem is inherently difficult. Your syntax for the above |
| > example may be easier for you to read because this is the way you have been |
| > thinking about it. Honestly, I don't find it much easier than the C syntax. |
| > In either case, I would have to look up an example to write pointers to |
| > member functions. |
| |
| I would argue that because the lexical structure of the language is self |
| consistent, any person who spent a significant amount of time programming |
| in LLVM directly would understand how to do it without looking it up in a |
| manual. The reason this does not work for C is because you rarely have to |
| declare these pointers, and the syntax is inconsistent with the method |
| declaration and calling syntax. |
| |
| > But pointers to member functions are nowhere near as common as arrays. |
| |
| Very true. If you're implementing an object oriented language, however, |
| remember that you have to do all the pointer to member function stuff |
| yourself.... so every time you invoke a virtual method one is involved |
| (instead of having C++ hide it for you behind "syntactic sugar"). |
| |
| > And the old array syntax: |
| > type [ int, int, ...] |
| > is just much more familiar and clear to people than anything new you |
| > introduce, no matter how logical it is. |
| |
| Erm... excuse me but how is this the "old array syntax"? If you are |
| arguing for consistency with C, you should be asking for 'type int []', |
| which is significantly different than the above (beside the above |
| introduces a new operator and duplicates information |
| needlessly). Basically what I am suggesting is exactly the above without |
| the fluff. So instead of: |
| |
| type [ int, int, ...] |
| |
| you use: |
| |
| type [ int ] |
| |
| > Introducing a new syntax that may |
| > make function pointers easier but makes arrays much more difficult seems |
| > very risky to me. |
| |
| This is not about function pointers. This is about consistency in the |
| type system, and consistency with the rest of the language. The point |
| above does not make arrays any more difficult to use, and makes the |
| structure of types much more obvious than the "c way". |
| |
| > > In my opinion, it is critically important to have clear and concise type |
| > > specifications, because types are going to be all over the programs. |
| > |
| > I absolutely agree. But the question is, what is more clear and concise? |
| > The syntax programmers are used to out of years of experience or a new |
| > syntax that they have never seen that has a more logical structure. I think |
| > the answer is the former. Sometimes, you have to give up a better idea |
| > because you can't overcome sociological barriers to it. Qwerty keyboards |
| > and Windows are two classic examples of bad technology that are difficult to |
| > root out. |
| |
| Very true, but you seem to be advocating a completely different Type |
| system than C has, in addition to it not offering the advantages of clear |
| structure that the system I recommended does... so you seem to not have a |
| problem with changing this, just with what I change it to. :) |
| |
| -Chris |
| |