No, it argues that they should be overloadable but that overloads shouldn't change the type signatures. I have been outspoken about this. ![]()
Separate from the "mistakes that have been made in the past", we have the more pertinent question of "should we make a new decision that we know will impact type checker performance. I think the answer is clearly "no".
I'm not motivated by the "what other languages do" argument. I'm motivated that we need to make this easy/compact to express, and I stand by the line that we should make different operators be different. In this case, not only is vector-returning comparisons substantially different than every comparison that exists, but you're proposing supporting BOTH semantics in the same type and have them disambiguated based on return type inference.
This is bad for a whole bunch of reasons, including the fact that simple things like let x = v1 < v2 won't type check, that expressions in generic contexts will generate truly crazy error messages, and the fact that someone reading the code will have a hard time understanding that a non-standard notion of comparison is in play.
When we introduced the +& and ..< operators we discussed the principles of this at length, and agreed that it is best to make unfamiliar concepts have unfamiliar spelling, so you at least know that you don't know what is going on.
All that said, your point about Julia is a good one. We should probably spell these comparison operators as .== or ==. to say they produce "pointwise" results. I don't think there is any need to change * to *. though, since your proposal maintains the invariant that the result and operands have the same type.
-Chris