Paul:
Have you considered using "=" for equality and ":=" for assignment?
Me:
I have thought about it, along with using <> for inequality. But,
I don't have a strong preference for one over the other. Do let me
know if you strongly prefer the syntax you suggested. A strong
preference from you will definitely count.
Paul:
I strongly prefer using "=" for equality -- this is such a
fundamental mathematical notation and it would be nice to bring it
over to programming. I don't feel strongly about inequality, but using
<> would be consistent with Pascal, which seems to be an inspiration
for other Clay syntax. By the way, I like your use of colon in
TypeSpecs -- again, it's closer to mathematical usage (and Pascal).
Me:
Regarding the operators for assignment and equality:
The compound assignment operators such as "+=", "-=", etc. are quite
useful. If ":=" were used as the assignment operator, then the usual
compound assignment operators don't match because they don't have a
colon character in them.
We could update them to include the colon too, but they all have shortcomings:
Both "a -:= b" and "a :-= b" look visually unpleasant. The third
option "a :=- b" looks much better, but the syntax conflicts with the
unary negation operator.
Do you have any solutions to this problem?
Paul:
ALGOL 68 has compound assignment operators, and may well have
been Dennis Richie's inspiration for C. It uses := for assignment, and
+:=, -:=, *:=, /:=, %:= and %*:= . In ALGOL 68, / is real division, %
is integer division, and mod or %* is the modulus operation. (Here's a
tutorial: http://www.xs4all.nl/~jmvdveer/a68g-doc.pdf; here's the
final revised reference manual:
http://www.softwarepreservation.org/projects/ALGOL/report/Algol68_revised_report-AB.pdf
.)
So if Clay followed ALGOL 68, there would be a precedent. I suggest
you think about this for a while. Sometimes a symbol or construct
looks strange at first, but looks fine after you get used to it.