> An operator can be overloaded in C plus plus, but right now operators in the Java pro-
gramming language can not be overloaded by the programmer, though names of methods
may be overloaded. I would like to change that
It’s a shame that he lost this battle. Operator overloading really does make it a lot nicer to design certain kinds of libraries.
I have said in the past, and will say now, that I think it would be a good thing for the Java programming language to add generic types and to let the user define overloaded operators.
He did get the generic types though, I think that was well over a decade ago now
i mean okay but also it makes it impossible to have an open source ecosystem with shared libraries because suddenly things dont mean the same thing in one system vs another. i was interviewing at Jane St and realized their OCaml completely doesnt work with the rest of the world - and its fine if you're Jane St i guess but that really sucks for the "health" of a language ecosystem.
? In both cases, libraries will only clash if both define a function with the same name taking an A and a B. The only difference is that it is called + in the former case, and plus in the latter.
I would think a rule “a module that defines an operator overload must introduce at least one of the types involved” would prevent that problem, and still allow most, if not all, good uses of operator overloading.
This is the PDF of the talk given here:
https://www.youtube.com/watch?v=_ahvzDzKdB0
It's Guy Steele[0]'s keynote at the 1998 ACM[1] OOPSLA[2] conference.
[0] https://en.wikipedia.org/wiki/Guy_L._Steele_Jr.
[1] Association for Computing Machinery
[2] The 13th annual ACM SIGPLAN[3] Conference on Object-Oriented Programming Systems, Languages, and Applications.
[3] SIGPLAN is the Association for Computing Machinery's Special Interest Group (SIG) on programming languages.
This is one of the talks I watch over and over - though it has computer science value then its entertainment value is much much higher still.
The OOPSLA 1997 keynote was a banger as well. That was truly an exciting time.
> An operator can be overloaded in C plus plus, but right now operators in the Java pro- gramming language can not be overloaded by the programmer, though names of methods may be overloaded. I would like to change that
It’s a shame that he lost this battle. Operator overloading really does make it a lot nicer to design certain kinds of libraries.
FWIW another thing that Guy Steele advocated was value types, which as I understand it is ongoing work:
https://en.wikipedia.org/wiki/Project_Valhalla_(Java_languag...
https://openjdk.org/projects/valhalla/
I have said in the past, and will say now, that I think it would be a good thing for the Java programming language to add generic types and to let the user define overloaded operators.
He did get the generic types though, I think that was well over a decade ago now
> I think that was well over a decade ago now
This was in Java 5, in 2004. So two decades!
Or you could use C# and get all of those features.
Agree 1000%
There’s a Java compiler plugin[1] that muscles in operator overloading pretty comprehensively, and works with all LTS JDKs.
1. https://github.com/manifold-systems/manifold/tree/master/man...
i mean okay but also it makes it impossible to have an open source ecosystem with shared libraries because suddenly things dont mean the same thing in one system vs another. i was interviewing at Jane St and realized their OCaml completely doesnt work with the rest of the world - and its fine if you're Jane St i guess but that really sucks for the "health" of a language ecosystem.
Why would
suffer more from this than ? In both cases, libraries will only clash if both define a function with the same name taking an A and a B. The only difference is that it is called + in the former case, and plus in the latter.It's syntactically more straightforward to resolve the issue of clashing definitions through namespacing with functions compared to operators.
The following is pretty standard:
Whereas this is more awkward:I would think a rule “a module that defines an operator overload must introduce at least one of the types involved” would prevent that problem, and still allow most, if not all, good uses of operator overloading.