News for hackers. Stuff that matters.
Re:Rust 0.6 Released by pcwalton on Wednesday April 03, 2013 @01:43PM (#5487654)
The tutorial examples are run as part of the test suite. The tutorial example in question is `let numbers: [int, ..3] = [1, 2, 3];`, which should work.

There are several known compiler bugs with any trait types other than `@Trait`. Please do continue to file any bugs you find, though—all crash bugs are bugs that need to be fixed :)

Re:Rust 0.6 Released by drbawb on Wednesday April 03, 2013 @04:19PM (#5488763)
Whoops, I did botch up the syntax on my listed example.

I compiled release-0.6; and sure enough `let numbers: [int, ..3] = [1,2,3];` compiles.

`let numbers: ~[int, ..3] = ~[1,2,3];` does not compile on my system though. Ditto for the @ sigil.

(Expected `~[int * 3] but found ~[<VI2>]`)

My understanding is that the first example [from the docs] allocates the vector on the stack.

My uncompilable examples should be equivalent except that they use the heap for storage.

Is there a reason this shouldn't compile?

Thanks so much for the reply!

Re:Rust 0.6 Released by spicyj on Wednesday April 03, 2013 @05:52PM (#5489437)
In fact you just want:

    let numbers: ~[int] = ~[1,2,3];
When you allocate a vector on the heap, you don't need to specify the size.
Re:Rust 0.6 Released by drbawb on Wednesday April 03, 2013 @06:21PM (#5489643)
I was thinking you might have a function that operates on some fixed length vector.

For e.g: `fn foo(bar: ~[int, ..3]) { ... }`, and the compiler would enforce that you only pass vectors of length 3 to that function.

But since I can't get `~[int, ..3] = ~[1,2,3]` (etc.) to compile that seems to be impossible w/ vectors on the heap?

Re:Rust 0.6 Released by pcwalton on Wednesday April 03, 2013 @08:37PM (#5490230)
It's a bug. Sorry about that. For now, write the type as `~([int, ..3])`.
Re:Rust 0.6 Released by spicyj on Thursday April 04, 2013 @02:32AM (#5491303)
I stand corrected -- thanks, didn't realize that you could have a pointer to a fixed-length vector.
Re:Rust 0.6 Released by spicyj on Wednesday April 03, 2013 @06:23PM (#5489657)
I believe you can't do that. You can, however, make a function that only operates on 3-tuples:

fn foo(bar: (int, int, int)) { ... }