Good points.
The D language has a way of providing your first point without resorting to objects. Basically, the compiler just transforms a statement like `str.length()` into `length(str)`.
The other two seem harder to do in a simple way, but I'm sure someone has come up with something.