While working on a patch I noticed that I had to write things like

_vec.len(the_vec)

instead of just the_vec.len() or len(the_vec). I don't expect us to change this before getting a bootstrap compiler, but I decided to write this so that we don't forget.

Having to type "_vec." is a small inconvenience since the type is present in many lines if I then decide to switch to another structure.

More interesting maybe is if I want to write a generic function total_length that sums the length of every element in a vector. How would that be done in rust? Something like

----------------------
fn total_length[t](vec[t] v) -> int {
  auto total = 0u;
  for (e in v) {
    total += e.len();
  }
  ret total;
}
---------------------

I suppose. But then, how do I pass a vector of vectors of integers? I would have to create a wrapper like

obj vec_with_length(vec[int] x) {
        fn len() -> uint {
                ret _vec.len(x);
        }
}

Might not look like a big issue, but it involves creating a new object which unless I am mistaken can have exactly the same representation as the original one.

Since, unlike java or c++, in rust we need a vtable per implemented interface, there wouldn't be much to be lost by dropping the requirement that all functions in the vtable be declared in one place.

One way to do this is something like go where methods are declared out of objects:

obj foo(int state);
method bar(foo @this) {...}
...

auto x = foo(4)
x.bar()... // or bar(x), but that looks a bit more confusing to me.

and a user can then easily declare a 'zed' method that can be used where it would normally be in context:

import ...foo;

mod x {
        method zed(foo @this) {...}
        ....
        auto y = foo();
        y.zed(); // OK
        ...
}

...
        auto y = foo();
        y.zed(); // not OK, no method zed found.

Comments?

Cheers,
Rafael
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to