> 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 everytime 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

