On Nov 29, 2013, at 11:26 PM, Patrick Walton <pwal...@mozilla.com> wrote:

> There's also the fact that the exchange heap is the default place to 
> allocate, so anything that needs an object (e.g. "in") doesn't work, as "in 
> Unique" would probably be too verbose.

`in Unique` is too verbose, but `new(Unique)` isn't?

> Looking like C++ is a goal of Rust, in any case...

I thought C++ performance was a goal. Since when is C++ syntax considered to be 
a goal?

-Kevin

> Patrick
> 
> Kevin Ballard <ke...@sb.org> wrote:
> As I said in the IRC channel, the reason why users often don't realize that 
> `~T` is allocation, is not a failure of syntax, but a failure of 
> documentation. The only reason why a user would know that `new Foo` allocates 
> is because they've been exposed to that syntax from another language, one 
> that actually documents the fact that it allocates. Users who haven't been 
> exposed to `new Foo` from other languages will have no reason to understand 
> that this allocates without being told that it allocates.
> 
> As such, there is no reason why we cannot simply fix the documentation to 
> explain that `~` is the allocation operator, and that when it's used in an 
> expression it means it allocates a value.
> 
> It was then explained to me that the "real" reason we needed `new` wasn't 
> because of the issues with users understanding allocation, but because of a 
> need for placement new. That is why I suggested some alternative syntaxes.
> 
> Also, FWIW, `~(n + m)` makes sense, as a way of producing an allocated value 
> from the result of `n + m`, but `new (n + m)` is pretty nonsensical.
> 
> -Kevin
> 
> On Nov 29, 2013, at 10:48 PM, Patrick Walton <pwal...@mozilla.com> wrote:
> 
>> None of these look like allocation.
>> 
>> Patrick
>> 
>> Kevin Ballard <ke...@sb.org> wrote:
>> I am very saddened by the fact that we're apparently reserving `new` as a 
>> keyword, and even more by the fact that the proposed placement new syntax is 
>> `new(foo) bar`. This looks exactly like C++, and it goes against the strong 
>> precedence we already have of using new() as a static function for types. 
>> Path::init("foo") looks extremely wrong to me.
>> 
>> Surely there's another syntax we can use for placement new that doesn't 
>> involve reserving `new` as a keyword? Here's a few random ideas (where "val" 
>> is the value expression and "place" is the place expression):
>> 
>> ~in(place) val
>> in(place) ~val
>> ~val in place  (assuming this isn't somehow ambiguous)
>> ~~val in place (the existing ~~val would have to be written ~(~val))
>> ~~(place) val  (the existing ~~val would have to be written ~(~val))
>> ~<place> val
>> ~=place val
>> ~>place val    (this looks like an arrow pointing to the place)
>> ~>(place) val
>> 
>> Personally I think `~in(place) val` is perfectly fine. It's not the 
>> prettiest of syntaxes, but placement new should be very rare, and this 
>> allows us to avoid reserving `new` and continue to use ~ as the allocation 
>> operator.
>> 
>> -Kevin
>> 
>> 
>> Rust-dev mailing list
>> Rust-dev@mozilla.org
>> https://mail.mozilla.org/listinfo/rust-dev
>> 
>> -- 
>> Sent from my Android phone with K-9 Mail. Please excuse my brevity.
> 
> 
> -- 
> Sent from my Android phone with K-9 Mail. Please excuse my brevity.

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to