• This repository has been archived on 14/Jul/2018
  • Stars
    star
    218
  • Rank 175,336 (Top 4 %)
  • Language
  • Created over 7 years ago
  • Updated about 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Tracking Rust's roadmap

Rust 2017 Roadmap

As part of RFC 1728, each year the Rust community puts together a roadmap laying out a vision for improvements to Rust over the course of the year. The 2017 roadmap was decided in RFC 1774.

The issues in this repository track the progress on our 2017 roadmap.

Only Rust subteam members should create new issues in this repo. If you believe a project should be added within the tracker, please leave a comment on the appropriate "parent" issue, i.e. one of the issues linked below. And in general, feel free to use comments to ask questions, pitch ideas, or mention updates that need to be made!

There are issues for each of the vision statements:

and for our two areas of exploration:

Each of the above issues link to a number of other project issues, which give points of contact and other information about the status of specific projects working to achieve one of our goals. You can see the list of all projects here.

Finally, each subteam has a dedicated roadmap issue, spelling out areas of activity beyond those included in the formal Rust roadmap:

Roadmap rationale

The full rationale for the roadmap is spelled out in RFC 1774, but we'll recap the high-level framing here.

There's no end of possible improvements to Rust—so what do we use to guide our thinking?

The core team has tended to view our strategy not in terms of particular features or aesthetic goals, but instead in terms of making Rust successful while staying true to its core values. This basic sentiment underlies much of the proposed roadmap, so let's unpack it a bit.

Making Rust successful

The measure of success

What does it mean for Rust to be successful? There are a lot of good answers to this question, a lot of different things that draw people to use or contribute to Rust. But regardless of our personal values, there's at least one clear measure for Rust's broad success: people should be using Rust in production and reaping clear benefits from doing so.

  • Production use matters for the obvious reason: it grows the set of stakeholders with potential to invest in the language and ecosystem. To deliver on that potential, Rust needs to be part of the backbone of some major products.

  • Production use measures our design success; it's the ultimate reality check. Rust takes a unique stance on a number of tradeoffs, which we believe to position it well for writing fast and reliable software. The real test of those beliefs is people using Rust to build large, production systems, on which they're betting time and money.

  • The kind of production use matters. For Rust to truly be a success, there should be clear-cut reasons people are employing it rather than another language. Rust needs to provide crisp, standout benefits to the organizations using it.

The idea here is not about "taking over the world" with Rust; it's not about market share for the sake of market share. But if Rust is truly delivering a valuable new way of programming, we should be seeing that benefit in "the real world", in production uses that are significant enough to help sustain Rust's development.

That's not to say we should expect to see this usage immediately; there's a long pipeline for technology adoption, so the effects of our work can take a while to appear. The framing here is about our long-term aims. We should be making investments in Rust today that will position it well for this kind of success in the future.

The obstacles to success

At this point, we have a fair amount of data about how Rust is reaching its audience, through the 2016 survey, informal conversations, and explicit outreach to (pre-)production shops (writeup coming soon). The data from the survey is generally corroborated by these other venues, so let's focus on that.

We asked both current and potential users what most stands in the way of their using Rust, and got some pretty clear answers:

  • 1 in 4: learning curve
  • 1 in 7: lack of libraries
  • 1 in 9: general “maturity” concerns
  • 1 in 19: lack of IDEs (1 in 4 non-users)
  • 1 in 20: compiler performance

None of these obstacles is directly about the core language or std; people are generally happy with what the language offers today. Instead, the connecting theme is productivity—how quickly can I start writing real code? bring up a team? prototype and iterate? debug my code? And so on.

In other words, our primary challenge isn't making Rust "better" in the abstract; it's making people productive with Rust. The need is most pronounced in the early stages of Rust learning, where we risk losing a large pool of interested people if we can't get them over the hump. Evidence from the survey and elsewhere suggests that once people do get over the initial learning curve, they tend to stick around.

So how do we pull it off?

Core values

Part of what makes Rust so exciting is that it attempts to eliminate some seemingly fundamental tradeoffs. The central such tradeoff is between safety and speed. Rust strives for

  • uncompromising reliability
  • uncompromising performance

and delivers on this goal largely thanks to its fundamental concept of ownership.

But there's a problem: at first glance, "productivity" and "learnability" may seem at odds with Rust's core goals. It's common to hear the refrain that "fighting with the borrow checker" is a rite of passage for Rustaceans. Or that removing papercuts would mean glossing over safety holes or performance cliffs.

To be sure, there are tradeoffs here. But as above, if there's one thing the Rust community knows how to do, it's bending the curve around tradeoffs—memory safety without garbage collection, concurrency without data races, and all the rest. We have many examples in the language where we've managed to make a feature pleasant to use, while also providing maximum performance and safety—closures are a particularly good example, but there are others.

And of course, beyond the core language, "productivity" also depends a lot on tooling and the ecosystem. Cargo is one example where Rust's tooling provides a huge productivity boost, and we've been working hard on other aspects of tooling, like the compiler's error messages, that likewise have a big impact on productivity. There's so much more we can be doing in this space.

In short, productivity should be a core value of Rust. By the end of 2017, let's try to earn the slogan:

  • Rust: fast, reliable, productive—pick three.

More Repositories

1

rust

Empowering everyone to build reliable and efficient software.
Rust
85,122
star
2

rustlings

🦀 Small exercises to get you used to reading and writing Rust code!
Rust
47,148
star
3

mdBook

Create book from markdown files. Like Gitbook but implemented in Rust
Rust
15,892
star
4

book

The Rust Programming Language
Rust
13,981
star
5

rust-analyzer

A Rust compiler front-end for IDEs
Rust
13,175
star
6

cargo

The Rust package manager
Rust
11,293
star
7

rust-clippy

A bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/
Rust
9,860
star
8

rust-by-example

Learn Rust with examples (Live code editor included)
6,109
star
9

rustup

The Rust toolchain installer
Rust
5,558
star
10

rustfmt

Format Rust code
Rust
5,524
star
11

rfcs

RFCs for changes to Rust
Markdown
5,390
star
12

futures-rs

Zero-cost asynchronous programming in Rust
Rust
5,119
star
13

rust-bindgen

Automatically generates Rust FFI bindings to C (and some C++) libraries.
Rust
3,830
star
14

rust.vim

Vim configuration for Rust.
Vim Script
3,628
star
15

miri

An interpreter for Rust's mid-level intermediate representation
Rust
3,581
star
16

rls

Repository for the Rust Language Server (aka RLS)
Rust
3,530
star
17

regex

An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs.
Rust
3,083
star
18

crates.io

The Rust package registry
Rust
2,554
star
19

hashbrown

Rust port of Google's SwissTable hash map
Rust
2,194
star
20

log

Logging implementation for Rust
Rust
2,046
star
21

this-week-in-rust

Data for this-week-in-rust.org
HTML
1,826
star
22

libc

Raw bindings to platform APIs for Rust
Rust
1,786
star
23

chalk

An implementation and definition of the Rust trait system using a PROLOG-like logic solver
Rust
1,713
star
24

async-book

Asynchronous Programming in Rust
Shell
1,640
star
25

nomicon

The Dark Arts of Advanced and Unsafe Rust Programming
CSS
1,608
star
26

rustc-dev-guide

A guide to how rustc works and how to contribute to it.
HTML
1,522
star
27

git2-rs

libgit2 bindings for Rust
Rust
1,520
star
28

cc-rs

Rust library for build scripts to compile C/C++ code into a Rust library
Rust
1,491
star
29

vscode-rust

Rust extension for Visual Studio Code
TypeScript
1,388
star
30

rustc_codegen_cranelift

Cranelift based backend for rustc
Rust
1,348
star
31

polonius

Defines the Rust borrow checker.
Rust
1,207
star
32

api-guidelines

Rust API guidelines
1,186
star
33

reference

The Rust Reference
Rust
1,090
star
34

rust-playground

The Rust Playground
Rust
1,076
star
35

rust-mode

Emacs configuration for Rust
Emacs Lisp
1,009
star
36

docs.rs

crates.io documentation generator
Rust
891
star
37

rustfix

Automatically apply the suggestions made by rustc
Rust
857
star
38

rustc_codegen_gcc

libgccjit AOT codegen for rustc
Rust
850
star
39

portable-simd

The testing ground for the future of portable SIMD in Rust
Rust
775
star
40

datafrog

A lightweight Datalog engine in Rust
Rust
770
star
41

flate2-rs

DEFLATE, gzip, and zlib bindings for Rust
Rust
730
star
42

rust-semverver

Automatic checking for semantic versioning in library crates
Rust
637
star
43

socket2

Advanced configuration options for sockets.
Rust
633
star
44

unsafe-code-guidelines

Forum for discussion about what unsafe code can and can't do
618
star
45

crater

Run experiments across parts of the Rust ecosystem!
Rust
588
star
46

stdarch

Rust's standard library vendor-specific APIs and run-time feature detection
Rust
585
star
47

packed_simd

Portable Packed SIMD Vectors for Rust standard library
Rust
561
star
48

rustc-perf

Website for graphing performance of rustc
Rust
539
star
49

libm

A port of MUSL's libm to Rust.
Rust
481
star
50

cfg-if

A if/elif-like macro for Rust #[cfg] statements
Rust
479
star
51

crates.io-index

Registry index for crates.io
476
star
52

backtrace-rs

Backtraces in Rust
Rust
473
star
53

style-team

Home of the Rust style team
Rust
438
star
54

docker-rust

The official Docker images for Rust
Dockerfile
399
star
55

glob

Support for matching file paths against Unix shell style patterns.
Rust
381
star
56

rust-forge

Information useful to people contributing to Rust
Rust
380
star
57

compiler-team

A home for compiler team planning documents, meeting minutes, and other such things.
HTML
369
star
58

wg-async

Working group dedicated to improving the foundations of Async I/O in Rust
Rust
357
star
59

www.rust-lang.org

The home of the Rust website
Fluent
352
star
60

compiler-builtins

Porting `compiler-rt` intrinsics to Rust
Rust
328
star
61

measureme

Support crate for rustc's self-profiling feature
Rust
316
star
62

blog.rust-lang.org

The Rust Programming Language Blog
HTML
302
star
63

glacier

A big 'ol pile of ICE.
Rust
289
star
64

team

Rust teams structure
Rust
288
star
65

rustc-hash

Custom hash algorithm used by rustc (plus hashmap/set aliases): fast, deterministic, not secure
Rust
276
star
66

project-error-handling

Error handling project group
263
star
67

atom-ide-rust

Rust IDE support for Atom, powered by the Rust Analyzer or Rust Language Server
JavaScript
260
star
68

stacker

Manual segmented stacks for Rust
Rust
252
star
69

cmake-rs

Rust build dependency for running cmake
Rust
241
star
70

edition-guide

A guide to changes between various editions of Rust
233
star
71

getopts

The getopts repo maintained by the rust-lang project
Rust
229
star
72

a-mir-formality

a model of MIR and the Rust type/trait system
Rust
228
star
73

areweasyncyet.rs

Are we async yet?
Rust
209
star
74

rust-playpen

A web interface for running Rust code
Rust
208
star
75

annotate-snippets-rs

Library for snippet annotations
Rust
200
star
76

rustc-demangle

Rust symbol demangling
Rust
196
star
77

wg-allocators

Home of the Allocators working group: Paving a path for a standard set of allocator traits to be used in collections!
188
star
78

highfive

Github hooks to provide an encouraging atmosphere for new contributors
Python
184
star
79

lang-team

Home of the Rust lang team
JavaScript
184
star
80

rust-guidelines

This repository has moved
179
star
81

rustwide

Execute your code on the Rust ecosystem.
Rust
174
star
82

ferris-says

A Rust flavored implementation of `cowsay`
Rust
172
star
83

cargo-bisect-rustc

Bisects rustc, either nightlies or CI artifacts
Rust
171
star
84

homu

A bot that integrates with GitHub and your favorite continuous integration service
Python
164
star
85

rfcbot-rs

Coordinates asynchronous decision making on Rust repositories. Status of tracked issues and PRs can be viewed at https://rfcbot.rs.
Rust
157
star
86

triagebot

Automation/tooling for Rust spaces
Rust
155
star
87

prev.rust-lang.org

The previous Rust website. The current website's code is at https://github.com/rust-lang/www.rust-lang.org.
HTML
153
star
88

pkg-config-rs

Build library for invoking pkg-config for Rust
Rust
147
star
89

thanks

Celebrate Rust contributors.
Rust
143
star
90

rustc-reading-club

Rust Code Reading Clubs
141
star
91

gll

GLL parsing framework.
Rust
136
star
92

ena

An implementation of union-find / congruence-closure in Rust. Extracted from rustc for independent experimentation.
Rust
131
star
93

simpleinfra

Rust Infrastructure automation
HCL
128
star
94

wg-cargo-std-aware

Repo for working on "std aware cargo"
125
star
95

rust-memory-model

Collecting examples and information to help design a memory model for Rust.
Python
125
star
96

rust-artwork

Official artwork for the Rust project.
120
star
97

rustup-components-history

Rustup package status history
Rust
100
star
98

libs-team

The home of the library team
Rust
100
star
99

const-eval

home for proposals in and around compile-time function evaluation
CSS
98
star
100

wg-grammar

Where the work of WG-grammar, aiming to provide a canonical grammar for Rust, resides
Rust
98
star