-
-
Notifications
You must be signed in to change notification settings - Fork 14.2k
Description
(RFC)
We could add interfaces core::num and core::deref, with the first implementing methods add, sub, mult, div, rem, neg, and probably a few more, and the second only deref. The compiler can then resolve operators +, -, *, /, %, and [x] on types that are not built-in numerics or vectors as if they were calls to the corresponding method (1 + 1 => 1.add(1)), and numeric-style and sequence-style user types can implement these interface to allow the operators to be applied to them.
This is not the most elegant solution (1 + 1 is more like add(1, 1) than 1.add(1)), but it would give us operator overloading on the short term, without first needing a lot of extra interface features.
We will need some kind of support for a 'self type' in interface declarations to be able to say that add takes an returns a value of the type that the interface was specialized on, which is not currently expressable.