-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Allow unstable features in 1.0 #1007
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This RFC is in very bad faith @mahkoh. It is an utter troll. Please consider how your attitude affects others. |
@brson There are much easier ways than taking 3 hours out of my day to do research and write an RFC if I wanted to troll. |
What I want is pretty clearly spelled out in the first post and I think the RFC contains several arguments why this is desirable for people who want to use Rust as a systems language. I've also given you reasons why the current stability system cannot be maintained long-term and why the current system ("only stabilize what's necessary for the standard library") is harmful for people who want to use Rust as a systems language. |
@mahkoh, I'm curious what your thoughts are on ABI-stability guarantees. I think that's also necessary to be a "systems language" in its fullness. A stable ABI seems to me to be a much more common issue than But you also want loadable modules if you're thinking of replacing libc: apart from things like NSS or PAM, even if you just have a Rust-language system library, you probably want a Rust ABI, not a C ABI that has to transit through And (unfortunately) a stable ABI is something that exists yet, so merely opening or closing feature gates wouldn't help resolve this by Rust 1.0. It is potentially something that can be done outside of the core language, by transiting through Would you be in favor of qualifying the website text about a "systems language" and mentioning that it works very well for conventional userspace—including, importantly, replacing C ABI libraries, as long as they're not libc—but while replacing libc or the kernel continues to be a goal, Rust 1.0 delivers language stablization but remains a work in progress? (I think the truth of that should be uncontroversial, it's mostly how to phrase that on the website.) |
Stable 1.0 is just a beginning: it doesn't, can't and shouldn't include each and every desirable feature. The nightly/stable split in the reference implementation makes the division between experimental vs. not crystal clear, and is actively recognising that people will want to do things beyond what has been stabilised & giving them the power to easily use the experimental features: rustc-nightly-Rust is still Rust, but a more powerful dialect, just like GCC's extensions to C is a dialect, not a distinct language. You list two downsides of using the rustc-nightlies, neither of which I can understand; could you clarify my confusion?
Also, comparisons to other language ecosystems with many compilers are ignoring the fact that the stable Rust ecosystem is currently -2 months old, while languages like C and C++ are decades old. Rust is aiming to start with a base of stability which should make it easier for alternate compilers, especially ones not based on LLVM, to implement Rust 1.0 (for example) and automatically use the crates on crates.io that work with that version of the language (of course, this particular fact is independent of the implementation details of the split in the rustc implementation). Users of those compilers are free to use whatever extensions those compilers have implemented, but that's their explicit choice, just like using nightly is an explicit choice. My point is: it doesn't make sense to me to conclude that it is silly to require users install a different compiler (rustc-nightly) to get rustc's extensions/experimental features from the fact that people can get around the stability restrictions by installing a different compiler (e.g. a hypothetical gccrust). In any case, one can get the exactly same semantics as 1.0 + unstable features by pinning to the nightly at the 1.0 release instead of the released stable compiler. I'm not sure language-lawyering about the details of what is and what isn't a systems language is very productive, e.g. even standard C doesn't satisfy the definition: inline asm isn't in it (and thread local and atomics were only added recently). People have said "C is a systems language" for years, and it seems equally coherent to say "Rust is a systems language". (Of course, it'd be great if stable Rust was useable for OS/driver/... development.) On the point of Mozilla: the core team guides Rust, not Mozilla. The FUD around Mozilla is quite unnecessary, the RFC would be much improved if it was just removed outright. I can safely say that there's no mysterious corporation pulling strings to get Rust into the shape they want: e.g. the Servo developers were pretty unhappy when libgreen was removed, and I've heard of people inside Mozilla complaining that the project is too community focused and that the core team doesn't listen to the internal concerns enough. I find it particularly ridiculous to frame the reference implementation's standard libraries having special powers in the first release as evidence for "Mozilla" trying to monopolise Rust implementations. |
IMHO, premature stablizing is a bigger problem than not permitting unstable features in stable rustc. The latter means we'll get some features later for wide-spread usage, the former means we have to stick with the mistakes before the next major release. Worse, the widespread usage of the misfeatures may make correcting them impractical even in new major releases. (Actually this is also one reason against "unstable features in stable releases".) The problem I have with rustc now is that I am not sure whether it is ready for a beta or not. Modules like |
There's hardly a paragraph in this RFC that isn't dripping with contempt. It could never be accepted as written and is insulting. |
This is honestly a bit confusing to me. Vendor-specific non-standard functionality is the premium means by which an entity takes control of an ecosystem. This is the entire basis behind the infamous embrace-extend-extinguish strategy. We're actively resisting this effect by making it difficult for users to embrace our extensions. Your proposal to avoid this is to make it... more easy for users to develop a dependence on us? Meanwhile this makes no reference to the one way we're currently really locking down the ecosystem: the lack of a clear language specification (although that's never stopped Ruby...). Otherwise I generally agree with @huonw here; Rust 1.0 sucks. Well, it's ok. But I'm pretty sure everyone is hurting for major pieces of functionality that won't be in 1.0. Using Rust really seriously is still a waiting game. 1.0, to me at least, mostly means "your shit will stop completely breaking". The 1.0 of literally every language ever has similarly sucked. It's also not like Rust 1.0 will be C99 or whatever. There's going to be another release in 6 weeks. And another. And another. Forever. |
I thought features could be stabilized in a point release. In particular, I thought the two features mentioned in this RFC, If that's the case, and if it's at all realistic for these features to land by then, then both options, allowing opting in to instability and declaring Rust not a systems language for six weeks, seem like overreactions. If not, then I certainly think it's important that there's some strong plan for these (as well as, IMO, a stable ABI).
I care about Rust being usable for the use cases @mahkoh has in mind, so I'm happy to rewrite the RFC from scratch in a respectful manner, if there's in fact a concern here worth addressing. (I certainly think all the stuff about Mozilla doesn't belong.) But I'd first like @mahkoh's feedback on stable ABIs, and whether merely clarifying on the website how complete Rust 1.0 (and 1.1, and 1.x) are would address the concern. |
This RFC is certainly not being accepted as written, so I'm giving it a close. As others have said, it's utterly disrespectful, and is not an actual solution, just thinly veiled complaining. It is important that we stabilize features like inline assembly. But stabilizing them prematurely isn't the answer, and allowing for defacto stabilization isn't the answer. |
@geofft Stable ABIs are certainly on the radar as a priority, but I'm not sure just what that has to do with this RFC. After all, muddying the waters between experimental/unsupported and stable features will not help bring about a stable ABI any faster (quite the opposite, I would say, since any attempt at such an ABI would have to consider more things -- and things that are still in motion). |
I'm not writing a kernel. If I were writing a kernel I would probably want a
I don't think that's a reasonable idea. If I were writing a rust system library,
I don't think Rust needs to define one stable ABI. It would be good if library pub "rust_abi_1" fn ... Where
I don't care how this issue is addressed unless it's addressed by making 1.0 a In general I think Rust-internal features such as the ABI cannot be compared to
You've gone a bit too far with "shouldn't." If 1.0 could be the final and
This is already crystal clear today because you have to explicitly opt into
I don't have to install multiple compilers to use those features. They are
That's not what I meant by "available." Of course, if you can have a stable This is less of a problem on Windows but on Linux you cannot expect anyone but
Because most people only have one Rust version installed. How does Cargo work All of these problems lead to the conclusions that, if you write a library that Not allowing unstable crates in crates.io would not be a serious problem for
You've got it the wrong way around. I started with the idea of stability you're
I don't see how not providing simple but essential systems language features
So it adding
Both Clang and GCC are in the repositories. Clang-nightly and GCC-nightly are
I wasn't language lawyering. That's what you're doing by bringing language
GCC and other compilers have had extensions for years. The C model is also quite
You cannot deny that the core team consists mostly of Mozilla employees and that
You're saying that people inside Mozilla were trying to influence the direction Correct me if I'm wrong, but I think the push to make Rust a systems language
Yes, some believe that 1.0 is rushed. But I don't think it's fair to compare the
That doesn't make much sense. You cannot EEE your own project. I don't think I recommend you read
Trying to disrupt an active discussion by throwing in off-topic comments is a After you've shut down the mailing list, this is the only place where this kind I see @steveklabnik has gone ahead and tried to shut the discussion down. Of For you I recommend the following article: http://www.panarchy.org/russell/decalogue.1951.html In fact, I consider this article so essential for any kind of discussion that
|
No, if I was doing that, I could have clicked the 'lock pull request' button, which disallows further comments. This RFC in its form is simply not going to be accepted, and so I've closed it, just like any other RFC. Anyway, that's my last comment in this thread. |
Partially revert "Stability as a Deliverable" by allowing users of the stable
compiler to opt into unstable features and standard library functions.
Rendered