> 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

