On 04/18/2012 06:46 AM, Niko Matsakis wrote:
On 4/17/12 10:35 PM, Grahame Bowland wrote:
Hi Patrick
Thanks for the visual example. I prefer the old { |x| } style. It
might look slightly ugly but glancing upwards from a piece of code I
find it much easier to spot that a given pair of braces are a block
closure. I guess || sticks out like a pair of thumbs, which is useful.
I have to admit, even I prefer the "|x|" to ": x {" when I see it laid
out like that. They are much easier to spot.
Yeah, I have to agree. If we want a minimal delta on the current syntax
that addresses issues (1) and (2) (and I'm not insisting that we address
them, mind you), how about this?
Change the current function call syntax to:
Call ::== Primary '(' Args ')' (':' BlockLambda (',' BlockLambda)*)?
And change BlockLambda to:
BlockLambda ::== '->' Expr
| '|' InferredArg (',' InferredArg)* '|' Expr
It establishes a fairly simple set of rules:
1. Bars indicate a closure.
2. A thin arrow indicates a zero-argument thunk.
3. In any function call, trailing closure arguments can be pulled out
and placed after a colon. If this is done, the semicolon statement
separator after the call can be omitted.
So we would have:
#[inline(always)]
fn get_rand_env() -> rand_env {
let rng = rand::rng();
let disk_samples = vec::from_fn(513): |x| {
// compute random position on light disk
let r_sqrt = rng.next_float().(f32).sqrt();
let theta = rng.next_float().(f32) * 2.0 * f32::consts::pi;
(r_sqrt * theta.cos(), r_sqrt * theta.sin());
}
let mut hemicos_samples = []/~;
for uint::range(0, NUM_GI_SAMPLES_SQRT): |x| {
for uint::range(0, NUM_GI_SAMPLES_SQRT): |y| {
let (u, v) = ((x.(f32) + rng.next_float().(f32)) /
NUM_GI_SAMPLES_SQRT.(f32),
(y.(f32) + rng.next_float().(f32)) /
NUM_GI_SAMPLES_SQRT.(f32));
hemicos_samples.push(cosine_hemisphere_sample(u, v));
}
}
{
rng: rng,
floats: vec::from_fn(513, |_| rng.next_float().(f32)),
disk_samples: disk_samples,
hemicos_samples: hemicos_samples
};
}
Patrick
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev