And we're still using '*' for multiplication in our programming languages instead of '×' because using anything other than ASCII for programming is just too hard, or too weird, or whatever.
To be fair, I prefer dots over crosses for multiplication of scalars in when I write it myself. I tend to assume a cross means cross product instead of scalar multiplication. (But, oddly, I do not assume that a dot means dot product.)
More likely, it's because we don't have them on our keyboards. Programming languages are usually about reducing friction for programmers, but using the proper multiplication/division symbols would increase that for most people.
My best guess would be that we use * for multiplication because x being alphanumeric is a valid variable name.
regarding keyboard presence, this is one of the things that irks me about Mac keyboards is the absence of the # character. I write little programs and scripts on my mac infrequently enough that I have to look up how to type it every blasted time. That, and how to take screenshots. The "Print Scrn" key on PCs spoils me.
What language are you referring to? I'm not quite sure I understand your examples.
--------
Related:
In Haskell, any 2-argument function can be used (or defined) infix by surrounding it with backticks, eg:
add 2 3
is equivalent to:
2 `add` 3
----
And you can use this to cleanly write curried functions (often predicates) with their arguments flipped, eg:
vowelCount = length . filter (`elem` "aeiou")
----
Note that functions named with punctuation characters are infix by default, and one can be used/defined prefix by surrounding it with brackets, eg:
(<$>) = fmap
toUpper <$> "aeiou" # => "AEIOU"
----
It's also convenient for resolving a subset of one of the harder problems in computer science: naming things. For a 2-argument function, use it infix and read it as a phrase in english. Which is clearer:
".jpg" `isSuffix` url
or:
".jpg" `isSuffixOf` url
You can also define functions' precedence and associativity (left/right) when used as an infix operator.
> And you can use this to cleanly write curried functions (often predicates) with their arguments flipped
But unicode in code is terser. Instead of `elem`, we could use ∈ [U+2208].
To flip parameters, we could use the bidi-mirrored glyph, i.e. ∋ [U+220B, the bidi-mirror of U+2208]. In fact we could even make it a feature of the language grammar to automatically detect whether a mirrored glyph is being used, and perform the transformation.
We could even automatically detect and transform canonically equivalent graphemes using the non-spacing version of `not`, e.g. ∉ [U+2209, canonically equivalent to U+2208,U+0338], and ∌ [U+220C, mirror of U+2209 and equiv to U+220B,U+0338].
Editors should help the user to remap their keyboard keys.. We as users should move the symbols we need so that they are easier to type. For programming I've moved all of \{}[]() to the home row (with alt gr). Just one option of many but it demonstrates the concept..
We already tried going full-APL but it only proved that it wasn't a good idea. I mean this is impressive https://www.youtube.com/watch?v=a9xAKttWgP4 but I still think the notation is too obscure.
Full APL isn't just unicode, though, it's also a total commitment to single-character operators as the primary language construct. Take a look at some Agda or Unicode-enabled Haskell code to see it really improving readability... though hampering type-ability.
> We already tried going full-APL but it only proved that it wasn't a good idea.
When you say full-APL do you mean in one leap? Then I agree it's not a good idea, but how about going to APL in stages? First introduce just some operators (e.g. × ∧ ∨ ∈ ≥ ≤ ≠ → ⇒ only), then introduce more gradually until all APL operators are in use? Then keep on introducing other symbols from Unicode not in APL.
Well I used "we" continuing ruther's sense of "programmers in general". I didn't really do APL myself. I think it was Alan Kay who said: we needed to make APL to know what going too far looked like, that way we could stop wondering if we could do better by going further.