Was their implementation having problems with it or was it rather a more deep-seated ideological choice?
Was their implementation having problems with it or was it rather a more deep-seated ideological choice?
Another reason might be so that self can be passed in a way the programmer prefers. Usually this appears to be `&self`, but it can also be passed in other ways.
Disclaimer: I work for Mozilla on Servo, and am still getting fully up to speed on Rust.
Looking at the change log, it seems that they also removed the "static" keyword, so that class vs member methods are distinguished by the presence of a first argument named self. A little further down, they mention ~self, &self, and @self. Those prefixes differentiate types of special purpose pointers.
So it seems the goal was not explicit self, so much as it was explicit pointer type annotations for self.
It was also not obvious that the implicit self type was immutable.
Finally, it let us remove "static" in a few places ("static" methods), reducing noise. It makes type implementations (impl Type { ... }) the same as regular modules, except that you can use "&self" and friends to declare methods.
Less confusing for a user of when self is there and when it's not. Now it's always there and you don't have to know what the absence of self would indicate.