6 ms·
Opertor overloading is really horrible. By reading the code "foo + bar" you can't know what is really doing internally. He is talking about operator (+-*=[]&)
by paraboul 14y ago
Opertor overloading is really horrible.
By reading the code "foo + bar" you can't know what is really doing internally.
He is talking about operator (+-*=[]&) overloading. Not method overloading.
- gurkendoktor 14y agoAnd how do you know what add(foo, bar) does internally?
- azylman 14y agoadd(foo, bar) isn't any clearer than foo + bar, but usually an overloaded operator doesn't correspond to "add". For example, in Javascript: "Hello" + " " + "World!". What the operator there is doing is concatenating the strings, so if you had a method to do it you wouldn't call it add - you'd call it concat.
- numeromancer 14y agoBut then you lose the information that both ((usually modular) arithmetic, and strings with concatenation, et al.) are monoids, and have a similar structure, and creating generic functions which might use that symmetry becomes more difficult.
- rat87 14y agoIn python you can overload + and a lot of other numeric operators by implementing certain methods __add__ for +, see others here: http://docs.python.org/reference/datamodel.html#emulating-numeric-types http://docs.python.org/reference/datamodel.html#emulating-nu... In ruby you can implement certain numerical methods including + In smalltalk + is a binary method, you can give your methods all sort of symbol names. Same with Scala I think.
- gurkendoktor 14y ago> For example, in Javascript: "Hello" + " " + "World!". What the operator there is doing is concatenating the strings Hmm, are we talking about (user defined) operator overloading as a language feature, or about overloaded operators? For example, I hate that 1/2 and 1.0/2 are different things in most languages, but I haven't heard anyone call this operator overloading in the context of C.
- SeanDav 14y agoYou are missing the point. You might not know exactly what add() does internally but "+" only gives you a 1 character description, requiring you to know, or assume behaviour of the terms being added. By using a function name instead, you have far more opportunity to describe more clearly what actually is going to happen, requiring less assumption which as we know is the mother of ....
- pcwalton 14y agoI wish I could agree, but experience has shown that not having operator overloading makes (a) operating polymorphically over different number types and (b) creating new number types (decimals, bigints, etc.) really awkward. The former is much of the reason we had to add it to Rust. We have matrices that can operate over any numeric type T that implements the basic operations (so we can write matrix math once and have it work on 32-bit floats and 64-bit floats; this is important for speed vs. precision for browsers vs. scientific computing), but we couldn't put an addition operator in the Num interface, so we had to make "add", "sub", etc. methods. The result made our matrix math operations nigh-unreadable.
- bjz 14y agoHow did you solve the problem in your matrix libraries of overloading a single operator multiple times? I was trying to make rudimentary, game-oriented linear algebra library in rust along the lines of glm. I immediately ran into the problem of not being able to implement "mat4 * float->mat4", "mat4 * vec4->vec4" and "mat4 * mat4->mat4" overloads at once. The alternative was only to go with "mult_float", "mult_vec4" and "mult_mat4", but as you say this leads to "nigh-unreadable" code. It might seem petty, but whilst I understand rust avoiding overloading functions entirely (due to type problems and code obfuscation), it was enough to turn me off entirely, in this case sending back to D. Bear in mind this is not to say Rust is a bad language - there's plenty to like about it. ;)
- LinaLauneBaer 14y agoI don't know rust but rust seems very much like C++. Did you have a look at the Eigen library (C++)? http://eigen.tuxfamily.org/dox/TutorialMatrixClass.html http://eigen.tuxfamily.org/dox/TutorialMatrixClass.html I have never worked with this library but it seems to me that they have not the problems you described. Maybe having a look at it brings up some new ideas...
- bjz 14y agoAlthough on superficial level it shares the AGOL/C-style syntax, Rust is a very different language from C++. Some things are possible or easier in Rust as opposed to C++ and vice-versa. Copying directly from a C++ library would be difficult, and wouldn't take advantage of Rust's unique strengths.
- rat87 14y ago"foo + bar" looks like a string