let shoe = 5;
let size = 3;
let shoe-size = 10;
shoe-size := shoe-size;
Now what? Is shoe-size 10 or 2? let shoe = 5;
let size = 3;
let shoe-size = 10;
shoe-size := shoe-size;
Now what? Is shoe-size 10 or 2?I suggest not characterizing this as "allowing operators in variable names" any more than you'd call it "allowing keywords in variable names" that in most languages you can have variables called "life", "athena", "door_count" and "ended" even if "if", "then", "do" and "end" are keywords.
(Does C "allow operators in other operators" because it has both "+" and "++"?)
Rather: in Dylan, more characters than in (say) C are treated as ordinary constituent-of-identifier characters, with the consequences that (1) you can have things like hyphens in your names and (2) you more often have to use actual whitespace to delimit operators. ("shoe-size := shoe - size".)
This is traditional in Lispy languages, in most of which #2 isn't much of a drawback anyway because of the prefix syntax (in C you can say "a=b-c" if compactness is important to you, but obviously you're not going to write "=a-bc" in a prefix language or "bc-a=" in a postfix one). Dylan is unusual in preferring #1 over #2 despite using infix syntax.
Type names are typically enclosed in '<...>' like '<integer>' (but that's just a convention used everywhere).
I also find that Dylan's convention of using brackets in class names rapidly grows on you. But maybe that requires working in Forth as a warming up.
And of course, hyphens not only look better than underscores, they are easier to type, too :-)
Hyphens get reused to mean negation and subtraction, but they aren't operators everywhere.
If that surprises you, you haven't used enough Lisp or Forth.
See http://opendylan.org/documentation/intro-dylan/expressions-v... for more info (note the naming conventions. Those will quickly learn you to discriminate operators from characters used in symbols)