Hi Rick, thanks for replying!

I think limitations are sometimes as important as flexibility.
I witnessed situations where there was no alloted time in the schedule for refactoring or changing legacy code that had no design, and the problem built up farther. I think sometimes it's better for the compiler to enforce: "you just can't do it".

This is one of those specifications. The programmer gets another level of declaration from this permission/ownership perspective. A way to specify on the outside (signature) what is going to happen, generally, inside the function. Of course, it's a rough idea, it could be improved or consolidated with another feature you had in mind.

In part 7.4 argument passing style, the following example

fn  vec_push(&v: [int],elt:int) {
    v  += [elt];
}

will be written:

fn  vec_push(rwv: [int],roelt:int) {
    v  += [elt];
}

from the signature itself, you can already deduce that elt would not be changed inside the function, that the vector will be read and written to. note that a decision should be made, whether the parts of a record argument are considered individually or as a whole. same for a data structure. if a node inside a tree changes, it is different from the tree being replaced. (in this example, a vector object and its cells)


this example of a constructor:

fn  make_person(+name:str, +address:str) ->  person  {
    ret  {name:name,address:address};
}

will be written:

fn  make_person(ro +name:str, ro +address:str) ->  person  {
    ret  {name:name,address:address};
}

pass by value here is significant, so the new person will not have its name changed, if the calling side afterwards assigns the str name reference a different value.

If combined with an iface, the impls will have to conform. I'm not sure it's a good idea for an interface. maybe too limiting.

I feel that most of the times the distinction of ref/value is about low level performance.
bye, Kobi

On 4/7/2012 5:01 PM, Rick Richardson wrote:
http://doc.rust-lang.org/doc/tutorial.html#argument-passing

This isn't the most detailed treatise on arguments and ptrs in Rust,
but could you describe a use-case
where ro/rw/out modifiers would be beneficial over what currently exists?



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

Reply via email to