Just a warning:
Per recent discussions, I just pushed a change that removed the `block`
keyword (which used to be deprecated). Parameters that use to have type
"block(T) -> U" should now have type "fn(T) -> U". Creating a stack
closure is still best done with the sugared closure syntax `{|x, y|
x+y}`. If you wish to declare an explicit stack closure for some
reason, the syntax `block(x: uint, y: uint) -> uint { x + y }` no longer
works, you must do `fn&(x: uint, y: uint) -> uint { x + y }`.
The full set of function types are now:
native fn(T) -> U
a "bare" function without environment
fn(T) -> U
any closure at all
fn@(T) -> U
"boxed" or task-local closure
fn~(T) -> U
unique closure
fn&(T) -> U
stack closure
All function types are subtypes of "fn(T) -> U", and "native fn(T) -> U"
is a subtype of all other types.
All the closure types are represented as the pair of a function and the
environment. Eventually, "native fn(T) -> U" will be represented by a
single function pointer, but for now it is represented as the pair of a
function pointer and a null environment.
Niko
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev