-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
RFC: Roadmap for 2017 #1774
RFC: Roadmap for 2017 #1774
Conversation
cc @rust-lang/core |
One of the areas that didn't get a lot of discussion on the internals thread is the mentoring goal. I also think this is one of the most vital goals for sustaining and scaling up the project. I would love to flesh out the text for this goal a bit more! |
At the moment, our most immediate adoption obstacles are mostly about blockers, | ||
rather than a lack of drivers: there are people who see potential value in Rust, | ||
but worry about issues like productivity, tooling, and maturity standing in the | ||
way of use at scale The roadmap proposes a set of goals largely angled at |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing a period?
It's worth mentioning that this roadmap proposal was also the topic of the RustConf 2016 keynote, which might be a good complement to the RFC text. |
- Personal investment | ||
- Professional investment | ||
|
||
We need to (1) provide "drivers", i.e. strong motivation to continue through the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: A list “hidden” as text in paragraph is still a list. It should be an enumeration proper.
course, part of the work of the roadmap is to allocate our limited resources, | ||
which fundamentally means not including some possible goals. Some of the most | ||
promising suggestions that didn't make it into the roadmap proposal itself are | ||
included at the end of the Goals section. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: An aside/footnote as a quote?
before hitting their stride with Rust. And that often comes on top of other | ||
aspects of Rust that may be less familiar. A common refrain is "the first couple | ||
of weeks are tough, but it's oh so worth it." How many people are bouncing off | ||
of Rust before they get through those first couple of weeks? How many team leads |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Was it supposed to be:
How many people are bouncing off of Rust before they cannot get through those first couple of weeks?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That edit doesn't make sense to me, but I agree the original phrasing is a tad confusing. Perhaps "How many people give up on learning Rust during those first couple weeks?"
formatting. | ||
|
||
Note that while some of this functionality is available in existing IDE/plugin | ||
efforts, a key part of this initiative is to (1) lay the foundation for plugins |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: another list hiding inside a paragraph
headers (e.g., include! {myproject.hpp}) and have the extern declarations, glue | ||
code, and so forth get generated automatically. This means (eventually) full | ||
support for interfacing with C++ code that uses features like templates, | ||
overloading, classes and virtual calls, and so forth. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do not think this goal as written is actionable. Especially the “directly include” part. Without us becoming a C++ compiler, at least, and I doubt we want to get into the business of C++ compilers (within a year and with our resources).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc @mystor
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this comment is inspired by the way that Swift works, but I don't know any of the details of it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc @nikomatsakis and @jonathandturner, who helped craft this section.
I do think that easy (low-friction) integration is the right goal to be working toward, but it's entirely possible that the "zero friction" proposal here is not attainable on this timeframe.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I imagine it would be done with the help of Clang rather than trying to implement C++ from scratch, but AFAIK supporting things like templates would still require extensive hacking on the Clang codebase... would be pretty amazing if it worked though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm. The text may be misleading in its emphasis. Let me explain my POV and see what people think. I think @jonathandturner may have a slightly different take, though I think we definitely agree on the end-points we're aiming for; @wycats also has a lot of well-informed opinions here. =)
In my opinion, both C and C++ are very important. I think we should emphasize steps that benefit both languages (I'll sketch out a possible plan below). But basically C++ is the only language that is not C that I think makes sense for the Rust teams themselves to pursue. C is certainly the "lingua franca", but there are plenty of big projects and libraries that use C++ too (off the top of my head: V8, LLVM if you want the full thing, Gecko). Anecdotally, I certainly get a lot of questions about C++ integration.
(To be clear, I definitely hope we will see work on integration with other languages, like Python etc. I just think that is best handled by other projects -- though if we find features that are needed, it'd be great to surface those as RFCs.)
Regarding C++ integration, I agree we're not going to implement a C++ compiler in the Rust compiler, and I don't think the roadmap should commit us to any such thing! =) What I do think is that we should work on reducing FFI boilerplate as much as we can. I think this starts just by taking a tool like bindgen and making it drop-dead simple to invoke (include! { ... }
), perhaps leveraging progress on macros-1.1-style integration.
Once we have that, we can extend this include!
macro to start filling in the gaps in our existing C integration. So for example dealing with macros properly is a big pain right now. Projects like Ruby using macros as inline functions, basically, so to properly bind to those you have to generate C shims that your Rust code can call. But wouldn't it be nice if include!
could do this for you? (You'd probably have to direct it some, e.g. to tell it types involved.)
Finally, we can start to leverage some of the awesome work that @emilio has been doing in Servo project for supporting C++. He can speak more to the details, but from what I understand he has a branch of bindgen that can create layout-compatible Rust structs for the C++ used in Gecko, which is no mean feat. What it doesn't support are things like virtual calls and so forth (it just leaves opaque vtables in the Rust structs, as I understand).
Now the C++ ABI is famously undefined and we don't want to get too deeply involved there. But this looks (to me) like a place we can leverage shims. We can basically generate extern "C"
wrappers for C++ things you'd like to call. Using said shims, at least initially, will probably still be tedious (e.g., instead of calling widget->draw()
, you call widget_draw(widget)
) but at least you don't have to write the shims by hand. Maybe you initially also specify template instantiations by hand.
If we got those steps, we'd be in a much better shape. You can now generate boilerplate code easily. From there, there seem to be many directions we could go:
- generating more "ergonomic" wrappers, e.g. using Rust methods so you can call
widget.draw()
; - improving efficiency by compiling the shims (using clang) to LLVM and then inlining them into Rust code;
- integrate the bindgen tool more deeply with the compiler, so that the compiler can request template instantiations as it monomorphizes, for example, or generate shims on the fly that use the C++ compiler to resolve overloading.
Anyway, this is getting afield, and obviously nothing in the roadmap commits us to any part of this path. But I wanted to sketch out an incremental vision that nonetheless gets us to relatively easy and feature-complete state, while remaining fairly agnostic in the compiler itself.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nagisa @mystor @nrc -- I'm curious whether you found the comments by @jonathandturner and I convincing or not. =) Seems like we addressed...mildly separate things. That is, him primarily some motivation for C++ specifically, me primarily some concrete steps we could take that would be helpful (and would benefit C too).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like we addressed...mildly separate things.
@jonathandturner explained why we want better C++ story in our roadmap. You yourself go into details as to how “lets shoot for a better C++ integration” could be implemented. Namely:
I think this starts just by taking a tool like bindgen and making it drop-dead simple to invoke (include! { ... })
The “why” should probably appear in the RFC text (esp. because its not a goal that has spawned from the survey), and the implementation vector/features/etc should not (even though the language used in the RFC does not commit us to anything).
The best way to resolve my concerns (I’m repeating myself, here) would be reword this section slightly from “The goal should be that using a C++ library in Rust is not much harder than using it in C++” to “FFI to C++ ought to have less friction in Rust!”.
As I was writing the last paragraph I realised why exactly that sentence bothers me so much. It’s worded as a goal that’s most likely gonna fail to be achieved; I’m very unlikely to be able to take this document on the 2018 new year eve and tick off this goal as achieved. probably because it feels too ambitious for the time-frame. Aiming for “less friction” makes it much more likely. Everything else being same, the paragraph could look like this instead:
Rust should aim to provide a lower friction C++ FFI. It should be possible to
directly includeprocess existing C++ headers (e.g., include! {myproject.hpp}) and have the extern declarations, glue code, and so forth get generated automatically. This means (eventually)fullsupport for interfacing with C++ code that uses features like templates,
overloading, classes and virtual calls, and so forth.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nikomatsakis Your comments make sense, and bring a lot of clarity to the situation. I think that @nagisa is right in that we need to be careful to put down achievable goals which are abstract enough that we can figure out what the solution looks like over time.
It doesn't feel to me like anyone here has a clear enough idea of what the solution which we're aiming for is for is going to be to get much more specific than something along the lines of "We want to significantly reduce the friction for C/C++ interop to the point where the fact that the library you want to use is written in C++ and doesn't have rust bindings is not a significant reason to use C++ instead of rust."
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm curious whether you found the comments by @jonathandturner and I convincing or not.
Sort of. I definitely see the motivation and vision for delivery more clearly (thanks for the explanations), I'm still not convinced that this is the right goal for 2017. I'm finding it pretty difficult to weigh up the relative merits of focussing on C++ vs a more general FFI goal. Given the early stages of planning here, I'd prefer the latter, and be happy if it turned out that we focussed on C++.
Linters 1.1 similar in scope to Macros 1.1 would be awesome. |
It would be an important step to be able to use powerful libraries like Serde and Diesel with stable Rust. Given that @aturon mentioned Serde specifically during the keynote, I suppose it is the part of the "easy access to high quality crates" goal already. |
@raindev what we need is stabilization of Macros 1.1 which seems in reach at the beginning of 2017. |
Would @japaric's and my longstanding goal of a single |
The edit-compile-debug cycle in Rust takes too long, and it's one of the | ||
complaints we hear most often from production users. We've laid down a good | ||
foundation with [MIR] (now turned on by default) and [incremental compilation] | ||
(which recently hit alpha). But we need to continue pushing hard to actually |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is getting rendered as a link; you need to escape the opening parenthesis for the Markdown parser to get it right: [incremental compilation] \(which recently hit alpha)
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the idiomatic way to write this is [incremental compilation][] (which recently hit alpha)
, for example:
incremental compilation (which recently hit alpha).
I think a key area to maximice the value of Rust is the writing of high perfomance network software using asynchronous state machines, but for this be widelly used and very productive, we need stackless coroutines support or something with the same level of ergonomics. That really would be great for the sucess of Rust. |
Hi! To what degree is "fixing the remaining soundness issues, including the hard ones" part of the roadmap? It was not explicitly mentioned in the RFC and I'm not sure if it's implicit given phrases such as uncompromising reliability. Keep up the great work anyhow :-) |
I suppose "well-equipped for writing robust, high-scale servers" means those of us interested in cryptography and/or data structures should get our asses in gear. ;) |
It's a really well written RFC so I don't have much to pick at. The sloganeering ("... pick three") makes me cringe. It's fairly on-the-nose marketing talk. I also like being involved in Rust branding. I'm personally quite dedicated to tooling for platform compatibility, which basically means "embedded rust", which is only an area of support. I don't mind if C++ is a focus, and agree that excellent interop could be a game-changer, but it's a massive task, among several we have in front of us, and I do care deeply about keeping the Rust spec firewalled from the C++ spec. It is not ok for Rust to become a superset of C++. If we're doing a server focus, then interop with JavaScript or Ruby is both easier and more aligned with other goals than interop with C++. And we have support in the Ruby/Rails communities, whereas the authors of the C++ toolchains have no particular motivation to interop with Rust. |
Looking over this, the roadmap overall looks great to me! I'm quite excited to I was personally surprised to see specifically C++ interop so prominently Some concrete worries I have about the difficulty of C++ interoperability are:
These are all definitely surmountable problems, of course! And there's lots of To clarify, as well, my mental model for this comment is to work under the Ok, so with all that in mind, I'd like to make a case for embedded development Concretely, I'm thinking of two primary features falling under the embedded
I feel like features like this share many features with the C++ interop story. To wrap up, I'd propose to reword C++ interop to replace it with the goal of:
Here when I say "embedded" I mean simultaneously embedded architecture (e.g. I wonder, though, if this is perhaps too broad of a goal for 2017? It may be too So that's a bit of a long comment, but I'm curious what others think about this |
@alexcrichton I personally find this reasoning fairly persuasive, at least on first read. I agree that there is a lot to be worked out with respect to code generation -- I've been wondering how we can find just the right set of people to get motivated and make it actually happen. =) (You'll note I talk big, but I'm not volunteering...) Given that there is more of an extant community around embedded computing, it seems likely that it will be more actionable. I am particularly interested in the ways that "embedded" might benefit things beyond embedded architectures.
That sounds good to me too. |
Sorry it took so long - I just posted the commercial user survey results. To @alexcrichton's points: while we definitely saw embedded systems and the need for C++ interop mentioned together, the need for better C++ interop came from a much broader audience. I think it's more fair to say that it went hand-in-hand with "resource constrained" fields, whether embedded, VR, professional video game dev, etc. That said, I definitely agree we should try to experiment first so we know exactly what we're signing up for, what's possible, and what is unreasonable to expect. For me, the big takeaway here was similar to the need for better IDE support. People got used to having good IDE support, so it felt like a step down to switch to Rust. If the switching cost is too high, people will stay with what they have. |
Following up on that from the just-a-user-and-enthusiast perspective: the progress that the IntelliJ-Rust team is making is quite impressive—and that's without a mature language server, as a spare-time kind of project. Speaking from experience, even just smart-tools-in-a-text-editor go a long way, but all of those I've tried so far have serious limitations and bugs. They crash, or they provide results sometimes but not others, or they end up being slow... you get used to working around all of those things, but 👍 times 💯 for making those things a real priority. |
@jonathandturner yeah I was originally going to propose we move C++ to an "area of support" rather than a top-level goal, but I ended up deciding against that and instead thinking we should unify the goal for C++/embedded to the same goal. That is, I definitely agree that we could capitalize quite a lot on better C++ interop, but I think we could also capitalize quite a bit on better embedded work. In that sense I didn't find it quite right that we claimed C++ as a goal but not embedded, but that's just my own personal thought! |
I'd like to point out that in many cases the methodology for C++ and embedded are opposite. @japaric's and my approach is focused on avoiding or rewriting legacy tools and libraries---overall simplicity via a clean slate, and simplicity that no one working in the embedded space has access to today. Working with C++ necessitates embracing legacy....everything, even if it doesn't infect the definition of Rust as others have pointed out. Note, I do think that it's possible to do some C++ interopt without garbaging up Rust for everyone else, but I'm going to go out on a limb and say this is vastly more difficult and/or less rewarding than most survey respondents appreciate---we don't want union-level support for every C++ construct. Also while Python/Ruby/Java/Haskell/<insert higher-order gc'd langauge> is something you'd conceivably maybe want long term, C++ interopt is more strictly transitional as Rust aims to shine everywhere C++ is applicable. |
Here's what I think the logic behind focusing specifically on C++ interoperability would be: Rust's mission, implicitly or explicitly, the reason it was created, is to try to do something about the sorry current state of affairs where so much software is written in highly memory-unsafe low-level languages, and has lots and lots of avoidable security vulnerabilities as a consequence. If we want Rust to be a remotely viable option not only for green-field projects, but for existing projects written in those languages to transition to, then Rust needs to interoperate really really well with those languages. (The whole "embrace, extend..." thing.) Having code be written in Rust instead of in other, high-level, (largely-)memory-safe languages may also be nice, in as far as it gives Rust-the-project more momentum, and maybe that code will run faster, but it isn't as much a part of the "core mission" from my perspective. I do agree that, given that interoperating really really well with C is sort of a prerequisite to, or at the very least also contributes to, interoperating really really with C++, it might make sense to focus more effort on that first half at first, because of the broader applicability and presumably smaller technical hurdles. (And interoperating really well with C tends to also be part of interoperating really well with all those other languages, due to its lowest common denominator status, so in that sense it contributes to both goals.) (I also agree 100% with @brson and others that keeping the semantics and definition of Rust clean is a higher goal, and we should not let it become entangled with the semantics or definition of C++ while in pursuit of better interoperability with it. On the other hand, for mixed C++/Rust projects I can imagine linking with or shelling out to libclang or whatever we need to do to make it work smoothly. I... kind of feel like those are separate things?) |
I think @glaebhoerl's comment is largely on target, especially this:
That said, I do disagree a bit with this part:
Here's why:
It's important to be able to bridge this specific gap for corporate users, to be sure. We should definitely include C++ interop as one item to improve. Anywhere we can sand off edges for FFI in general, we should. But developer ergonomics, IDE support, general FFI improvements, etc. all seem like more important priorities than C++-specific interop from where I stand. |
I have a question about features that have been hanging from some time and some people still waits for them to hit mainline, especially associated constants. Are there any stabilization plans? It would be very handy in Octavo design. |
I think @chriskrycho's comments bring a lot of stuff up in a really useful way. I'm having serious doubts that I'll be as eloquent as him :) Doing this planning it feels like we're talking not just about focus, but also how we balance our energies across various opportunities. Our energy is limited, so we're making educated guess on just how to distribute it over the next year. If we look at both surveys, some themes are clearly important. Learning curve is a must. Both surveys point it out. Same is true for better library support and IDE support. We know that improvements in these three areas help lots of users, and we should be spending our energy on them. To me, where the two survey results differ is also interesting. Compile times were mentioned more often by commercial users than by the larger community. We as developers don't necessarily feel this pain, at least at first. Once our projects get big enough, we start to notice. Commercial users investing longer hours in Rust hit this sooner and feel it more as a pressing need. FFI similarly was mentioned far more often by the commercial users than the larger community. To me, the theme here, like @glaebhoerl says, it's a sense of green-field vs integration. Commercial users are going to naturally do more of the latter. Why C++ though? Because that's what people are specifically asking for. I suspect this might be like the compile time pain. If some of us haven't hit that yet, we don't see it as a sore spot. I went back and looked at the general survey raw data to see how often C++ interop was brought up when people asked for better FFI: of the 23 requests for better interop, 18 were people asking for better C++ interop. If we're going to spend time on FFI, improving C++ should be our primary goal, with our secondary goal being further improving broader FFI. It comes back to taking educated guess. We have the survey data, we know that some industries are built on piles of C++ code, and we know we want Rust to be used in as many places as possible. I see it as a way for us to "stretch". A way we might be able to reach industries we aren't currently reaching. |
@hauleth in general, asking about it on the tracking threads for those features is the best bet; that's too in-the-weeds for this RFC's goals. rust-lang/rust#29646 for associated consts, specifically. |
I'd kinda imagine higher-level FFI features like improved C++ interoperability might be handled mostly externally to |
@burdges So exporting Rust for C++ done right means C++-driven, on-demand monomorphization, and I don't see how to do this right other than making incremental rustc a clang plugin (or hacked up clang if there is no support for plugins in clang today). Maybe there's lower hanging fruit for 2017, but that there will take more than a year, or more full-time developers. And that will be nicely reusable for Haskell, so yes its my favorite part of C++-but-not-C support :D. |
@mark-i-m note that the recently merged RFC #1636 was aimed to address precisely the problem you bring up about new parts of the standard library and the language (independent of the specific examples cited). There's a lot of work to be done in 2017 (to which I specifically intend to address basically any and all Rust contributions I make this coming year!) to get us caught up on documenting a lot of things; but at the least, every new feature merged going forward will be documented. That should help substantially with this (very real) problem. If you want a place to contribute, I know the docs team would love help documenting everything that has been merged but not documented since 1.0, and the reference in particular needs a lot of love! |
|
@chriskrycho Thanks! I would be glad to help when I can 😄 @sfackler Sorry, you are right. The docs clearly say to implement |
I think figuring out the design patterns of Rust is a really important effort, but I really don't know how it could be an organized task of the Rust project. It seems like it needs to arise organically from user experiences. Perhaps there's a better way to open a forum for discussing patterns than what we have now. |
@withoutboats https://github.com/rust-unofficial/patterns exists independently. I agree patterns should generally emerge from user experience/trail and err. |
I wanted to echo others excitement on this outline. I'm more excited than ever about rust. I did want to make a comment on what the feature I think would help all others including making an argument for adopting rust in more organizations: fast compiles. I know it was briefly mentioned in the goals but I think it should be on of the top priorities given the over arching theme. I come at this from an angle as an early adopter of scala. Scalac has notoriously always been slow. Though it had a vastly superior feature set compared to java. Using java libraries from scala has basically always worked (though the inverse is sometimes gross). The hold major hold back for many companies already using java, wasn't that scala didnt have useful features, it's that what productivity you'd gain from its langauge featured you pay dearly on your compiler cycles. This greatly reduced the chances of adoption of Java shops. Sbt (scalasource cargo) eventually made this tolerable but Scalac accumulated worse performance over time because there was a "work around". You can now incrementally pay for slow compile time tax. It took scala a long time to get where it is today but through observation I believe it could have gotten there more quickly of compile times were not so horrendous compared to javas. Fast compile cycles pay for themselves ( literally in developer salary time ) which companies like. Fast compile cycles are really nice for learning a language as well has getting useful work down when you are comfortable with the language which developers like. Shorter feedback cycles are a langauge feature you can sell without much maketing. A faster compiler turn around will improve the learning experience as well as the library development experience. In short, investing in out of the box fast compile cycles has a ripple effect on all of the other targeted areas of focus in this rfc. Please don't let it sink to the bottom in importance. It's going to be a tough sell for my scala team when I demo them another scalac! |
@softprops Certainly. This article on profiling the compiler is good. Ideally, we should make a docker container for profiling Rust nightlies, so that developers can determine compiler hot-spots in minutes instead of hours. I'd like to collaborate on this.
@withoutboats I didn't mean to imply it should be an officially organized task. Paragraph 2 of the RFC already implies involvement and change in the larger ecosystem - specifically crates for essential tasks and writing robust servers (goals I applaud - I think the RFC is excellent). My understanding is that the roadmap has the potential to influence contributors and ecosystem development outside of the core project. If there is consensus that 2017 is a good point in Rust's evolution for us to invest in more heavily in example code and take on that maintenance burden, then it would seem appropriate to encourage it in the RFC. I don't want to imply that we should be prescriptive of code style or patterns, but rather descriptive of present usage.
If this is not in-scope for the RFC, then perhaps there is a better forum? [edit - pasting a newline somehow posted this too early. Sorry for the garbage notification] |
There was a sales pitch a while back (I can't find a link) for people blogging about rust to make mention of the rust/crate version code examples are based on. I don't think that's a rust specific problem but we should bring that practice back! |
@softprops that was http://words.steveklabnik.com/community-versions-for-rust and it went absolutely nowhere. |
Also related to learning/documenting rust, there is #1828, which is another excellent pull request. |
Thank you for your insightful and very thought-out comment. I completely agree that gathering patterns and examples is one of the most important steps we can take for improving the learning curve this year, and I will update the RFC text to call out this approach specifically. As a general note, the commitment in this roadmap is primarily to the top-level items setting out our overall strategic goals; the tactics we use to achieve those goals are something we will be debating and shifting over the course of the year.
This is definitely a top priority in the roadmap ("Rust should have a pleasant edit-compile-debug cycle"). Incremental compilation continues to make good progress, and you can expect an update on its status soon. |
The FCP period has elapsed, and there continues to be broad consensus on the direction laid out in this RFC. There's going to be a lot to debate about the particular tactics we'll use to achieve the goals we've set out, but we now have a basic vision for 2017. I'll be working to turn the roadmap into a dynamic form that we can use to track progress and tactics soon. RFC merged. Let's do this!! |
Yeah! Where is the best place to kick off discussions for the following topics?
|
I would argue individual issues on this repo. |
I'll be setting up a separate repo for managing the roadmap and discussions around it -- I'll post a link as soon as it's ready. |
FYI I put some notes I had collected on this topic into a GitHub repo recently: I'd be interested in expanding on that in whatever venue is best. I've spent a lot of time driving the Rust integration into the Firefox build, so I have some related experience. |
Please check the content on https://www.reddit.com/r/rust/comments/5m88iu/rfc_for_rusts_roadmap_in_2017_was_just_merged/dc2gq54/ as well. Thanks |
@rfcbot reviewed |
Lifetimes is probably the most difficult part of rust. It would be wonderful if the IDE can do some kind of visualization of it. |
@kindlychung - there's been some work on this: https://internals.rust-lang.org/t/borrow-visualizer-for-the-rust-language-service/4187 Definitely something we're interested in on the IDE side 😄 |
This RFC proposes the 2017 Rust Roadmap, in accordance with RFC 1728. The goal of the roadmap is to lay out a vision for where the Rust project should be in a year's time. This year's focus is improving Rust's productivity, while retaining its emphasis on fast, reliable code. At a high level, by the end of 2017:
In addition, we should make significant strides in exploring two areas where
we're not quite ready to set out specific goals:
The proposal is based on the 2016 survey, systematic outreach, direct conversations with individual Rust users, and an extensive internals thread. Thanks to everyone who helped with this effort!