If looking like c++ is a goal, why not using the same naming convention as it for constructor? Having an init () function or new () function is generally a bad idea, it is just a name. I prefere personnally the "new" name.
What i dont really like is the fn keyword, it is too short. func or function would have been perfectly acceptable. Le 30 nov. 2013 10:02, "Kevin Ballard" <ke...@sb.org> a écrit : > `new` isn't self-documenting. It's merely consistent with C++, but > consistency with C++ cannot be considered self-documentation because there > are a great many programmers out there who have never touched C++ (or any > language with a `new` operator). To someone who hasn't encountered `new` > before, an equally-valid interpretation of `new Foo` would be to construct > a `Foo` value by invoking a standard initializer, returning it by-value. > > Is consistency with C++ really so important as to break what is now a > pretty strong library convention? Especially since the replacement > convention, as seen in PR #10697, is pretty bad (namely, using ::init() > instead of ::new(); init() to me seems as though it should merely > initialize a value, not construct a new value. Heck, the old Path > convention of using Path(..) is better than Path::init(..)). As I've been > arguing, `new` is not inherently self-documenting, and the confusion around > ~ can be solved with proper documentation (just as a C++ programmer needs > to be taught that `new` is the allocation operator, a Rust programmer would > be taught that ~ is the allocation operator). As for placement new, while > it needs to be supported in some fashion, it's going to be used pretty > rarely, such that I don't think it's worth reserving a keyword just for > that. We have existing keywords and syntactical tokens that can be used. > Among my previous suggestions I'm fond of both `~in(place) val` and > `~>(place) val`. > > We've been moving stuff from the language into the libraries, yes. But > losing ~ seems like losing a big part of the "flavor" of Rust, so to speak. > And semantically speaking, both `new` and ~ are the same operator, so I > don't think the closed-set nature of sigils is an issue in this case. > > -Kevin > > On Nov 30, 2013, at 12:34 AM, Patrick Walton <pwal...@mozilla.com> wrote: > > Plain "new" would allocate in the exchange heap by default. > > And yes, C++ syntax has always been a goal. That's why Rust has had curly > braces from day one, for example. Of course it deviates when C++ syntax > would lead to lack of expressivity (using "let" and colons before types > allows for destructuring assignment, for example), but in general if the > C++ way fits the language we go with it. > > IMHO sigils made sense back when there were a couple of ways to allocate > that were built into the language and there was no facility for custom > smart pointers. Now that we have moved all that stuff into the library, > sigils seem to make less sense to me, as punctuation is a non-extensible > "closed set" to borrow a term from linguistics. Besides, they were a very > frequent source of confusion. Documentation is good, but being > self-documenting is better. > > Patrick > > Kevin Ballard <ke...@sb.org> wrote: >> >> 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. >> >> >> > -- > 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 > >
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev