Skip to content

Commit ff18921

Browse files
committed
Merge pull request #101 from aturon/one-year-anniversary
Rust birthday post
2 parents 03eb597 + 6bb5d4b commit ff18921

File tree

1 file changed

+269
-0
lines changed

1 file changed

+269
-0
lines changed

_posts/2016-05-16-rust-at-one-year.md

+269
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
---
2+
layout: post
3+
title: "One year of Rust"
4+
author: Aaron Turon
5+
description: "Rust's trajectory one year after 1.0"
6+
---
7+
8+
Rust is a language that gives you:
9+
10+
- uncompromising performance and control;
11+
- prevention of entire categories of bugs, including [classic concurrency pitfalls];
12+
- ergonomics that often rival languages like [Python] and [Ruby].
13+
14+
It's a language for writing highly reliable, screamingly fast software—and
15+
having fun doing it.
16+
17+
[classic concurrency pitfalls]: http://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html
18+
[Python]: http://lucumr.pocoo.org/2015/5/27/rust-for-pythonistas/
19+
[Ruby]: http://diesel.rs/
20+
21+
And yesterday, Rust turned one year old.
22+
23+
<img src="http://rustcamp.com/images/after/cupcakes.jpg" height="300px" width="300px">
24+
25+
### Rust in numbers
26+
27+
A lot has happened in the last 365 days:
28+
29+
- 11,894 [commits] by 702 contributors added to the core repository;
30+
- 88 [RFCs] merged;
31+
- 18 compiler targets introduced;
32+
- 9 releases shipped;
33+
- 1 year of [stability delivered].
34+
35+
On an **average week** this year, the Rust community merged two RFCs and
36+
published 53 brand new [crates]. Not a single day went by without at least one
37+
new Rust library hitting the central package manager. And Rust topped the
38+
"[most loved] language" in this year's StackOverflow survey.
39+
40+
Speaking of numbers: we recently launched a [survey] of our own, and want to
41+
hear from you whether you are an old hat at Rust, or have never used it.
42+
43+
One place where our numbers are not where we want them to be: community
44+
diversity. We've had ongoing local outreach efforts, but the Rust community team
45+
will soon be launching a coordinated, global effort following the [Bridge] model
46+
(e.g. RailsBridge). If you want to get involved, or have other ideas for
47+
outreach, please let [the community team] know.
48+
49+
[survey]: http://blog.rust-lang.org/2016/05/09/survey.html
50+
51+
[most loved]: https://stackoverflow.com/research/developer-survey-2016
52+
53+
[commits]: https://github.com/rust-lang/rust/commits/master
54+
[RFCs]: https://github.com/rust-lang/rfcs
55+
[stability delivered]: http://blog.rust-lang.org/2014/10/30/Stability.html
56+
[crates]: https://crates.io/
57+
58+
[Bridge]: http://bridgefoundry.org/
59+
[the community team]: mailto:[email protected]
60+
61+
### Rust in production
62+
63+
This year saw more companies [betting on Rust]. Each one has a story, but two
64+
particularly resonated.
65+
66+
[betting on Rust]: https://www.rust-lang.org/friends.html
67+
68+
First, there's Dropbox. For the last several years, the company has been
69+
secretively working on a move
70+
[away from AWS and onto its own infrastructure][dropbox]. The move, which is now
71+
complete, included developing custom-build hardware and the software to drive
72+
it. While much of Dropbox's back-end infrastructure is historically written in
73+
Go, for some key components the memory footprint and lack of control stood in
74+
the way of achieving the server utilization they were striving for. They rewrote
75+
those components in Rust. In the [words of Jamie Turner][dropbox quote], a lead
76+
engineer for the project, "the advantages of Rust are many: really powerful
77+
abstractions, no null, no segfaults, no leaks, yet C-like performance and
78+
control over memory."
79+
80+
[dropbox]: http://www.wired.com/2016/03/epic-story-dropboxs-exodus-amazon-cloud-empire/
81+
[dropbox quote]: https://news.ycombinator.com/item?id=11283688
82+
83+
Second, there's Mozilla. They've long been developing [Servo] as a research
84+
browser engine in Rust, but their first *production* Rust code shipped through a
85+
different vehicle: *Firefox*. In Firefox 45, without any fanfare, Rust code for
86+
[mp4 metadata parsing] went out to OSX and 64-bit Linux users; it will hit
87+
Windows in version 48. The code is currently running in test mode, with its
88+
results compared against the legacy C++ library: 100% correctness on
89+
[1 *billion* reported executions][ff]. But this code is just the tip of the iceberg:
90+
after laying a lot of [groundwork for Rust integration], Firefox is poised to
91+
bring in significant amounts of new Rust code, including components from
92+
Servo&mdash;and not just in test mode.
93+
94+
[Servo]: https://github.com/servo/servo/
95+
[mp4 metadata parsing]: https://github.com/mozilla/mp4parse-rust
96+
[ff]: https://telemetry.mozilla.org/new-pipeline/dist.html#!cumulative=0&end_date=2016-04-07&keys=__none__!__none__!__none__&max_channel_version=release%252F45&measure=MEDIA_RUST_MP4PARSE_SUCCESS&min_channel_version=null&product=Firefox&sanitize=1&sort_keys=submissions&start_date=2016-03-03&table=0&trim=1&use_submission_date=0
97+
[groundwork for Rust integration]: http://wiki.mozilla.org/Oxidation
98+
99+
We're hearing [similar stories] from a range of other shops that are putting
100+
Rust into production: Rust helps a team punch above its weight. It gives many of
101+
the same benefits as traditional systems languages while being more
102+
approachable, safer and often more productive.
103+
104+
[similar stories]: http://confreaks.tv/videos/rustcamp2015-using-rust-from-c-or-any-language
105+
106+
These are just a few stories of Rust in production, but we'd love to [hear yours]!
107+
108+
[hear yours]: https://github.com/rust-lang/rust-www/issues/new?title=New+Website+Logo%3A+[insert+name]%0A&body=To+list+your+organization%27s+logo+on+the+Rust+website%2C+fill+out+the+following+information+and+click+%22submit+new+issue%22.+Alternately%2C+you+may+edit+_data%2Fusers.yml+as+described+therein+and+submit+a+pull+request.%0D%0A%0D%0A-+Organization+name%3A+%28as+you+want+it+displayed%29%0D%0A-+Homepage+url%3A+%28homepage%2Fprimary+entry+point+for+users%29%0D%0A-+Logo+url%3A+%28svg+if+possible%2C+pngs+over+400x200px+with+transparent+backgrounds+are+also+acceptable%29%0D%0A-+How+you+are+using+Rust%3A+%28one+sentence+describing+your+use+of+Rust%29%0D%0A-+Url+describing+Rust+usage%3A+%28optional+link+to+e.g.+blog+post+explaining+how+you+use+Rust%29%0D%0A-+Organization+contact%3A+%28name+and+email.+we+may+contact+you+when+updating+this+page.+alternately+you+may+email+this+information+to+user-logos%40rust-lang.org+and+it+will+be+kept+secret%29.%0D%0A
109+
110+
### Rust, improved
111+
112+
Of course, Rust itself hasn't been standing still. The focus in its first year
113+
has been growing and polishing its ecosystem and tooling:
114+
115+
- **Ecosystem**. The standard library has steadily expanded, with growth focused
116+
on [filesystem access], [networking], [time], and [collections] APIs&mdash;and
117+
dramatically better documentation coverage. There's good support for working
118+
with C libraries via the [libc], [winapi], and [gcc] crates. And new libraries
119+
for [low-level async io][mio], [easy parallelism][rayon],
120+
[lock-free data structures][crossbeam],
121+
[Rails-like object-relational mapping][diesel], [regular expressions][regex],
122+
and several [parsing][nom] [libraries][lalrpop], including [html5ever], a
123+
unique HTML5 parser that leverages Rust's macro system to make the code
124+
resemble the spec as closely as possible. These are just scratching the
125+
surface, of course, and ecosystem growth, curation and
126+
coherence&mdash;particularly around async IO and the web stack&mdash;will
127+
continue to be a major focus in the coming year.
128+
129+
[filesystem access]: http://static.rust-lang.org/doc/master/std/fs/index.html
130+
[networking]: http://static.rust-lang.org/doc/master/std/net/index.html
131+
[time]: http://static.rust-lang.org/doc/master/std/time/index.html
132+
[collections]: http://static.rust-lang.org/doc/master/std/collections/index.html
133+
[libc]: https://github.com/rust-lang/libc
134+
[winapi]: https://github.com/retep998/winapi-rs
135+
[gcc]: https://github.com/alexcrichton/gcc-rs
136+
[mio]: https://github.com/carllerche/mio/
137+
[rayon]: http://smallcultfollowing.com/babysteps/blog/2015/12/18/rayon-data-parallelism-in-rust/
138+
[crossbeam]: http://aturon.github.io/blog/2015/08/27/epoch/
139+
[regex]: https://github.com/rust-lang-nursery/regex
140+
[diesel]: http://diesel.rs/
141+
[nom]: https://github.com/Geal/nom
142+
[lalrpop]: http://smallcultfollowing.com/babysteps/blog/2015/09/14/lalrpop/
143+
[html5ever]: https://kmcallister.github.io/talks/rust/2014-rust-macros/slides.html
144+
145+
- **Platforms and targets**. Rust's footprint is not much bigger than C's, which
146+
makes it ideal for using in all kinds of places. Over the last year, Rust
147+
gained the ability to work directly with the native [MSVC toolchain] on
148+
Windows, to target [musl] (thereby creating a binary that can be used with
149+
zero dependencies on *any* variety of Linux), to target Android and ARM
150+
devices, and [many more platforms][platforms]. The new [rustup tool] makes it
151+
a breeze to manage and compile to these various targets. As of
152+
[Rust 1.6][no_std], you can use Rust without its full standard library,
153+
limiting to a core library that does not require any OS services (and hence is
154+
suitable for [writing OSes](http://os.phil-opp.com/)
155+
[in Rust][intermezzos]). Finally, there are an increasing number of libraries
156+
for embedding Rust code into other contexts, like [node.js][neon],
157+
[Ruby][helix] and [Go][rure-go].
158+
159+
[MSVC toolchain]: https://github.com/rust-lang/rust/pull/25350
160+
[MUSL]: https://www.musl-libc.org/
161+
[platforms]: https://forge.rust-lang.org/platform-support.html
162+
[rustup tool]: http://blog.rust-lang.org/2016/05/13/rustup.html
163+
[no_std]: http://blog.rust-lang.org/2016/01/21/Rust-1.6.html
164+
[intermezzos]: https://intermezzos.github.io/
165+
[neon]: http://calculist.org/blog/2015/12/23/neon-node-rust/
166+
[helix]: http://blog.skylight.io/introducing-helix/
167+
[rure-go]: https://github.com/BurntSushi/rure-go
168+
169+
- **Tools**. Because Rust looks just like C on the outside, it's instantly
170+
usable with a wide range of existing tools; it works out of the box with
171+
[lldb], [gdb], [perf], [valgrind], [callgrind], and many, many more. Our
172+
focus has been to [enrich the experience] for these tools by adding
173+
[Rust-specific hooks][gdb hooks] and [workflows][cargo profile]. Another major
174+
priority is providing full IDE support, in part by providing daemonized
175+
services from the compiler; we made [good progress][IDEs] on that front this
176+
year, and thanks to the [Racer] project, [numerous IDE plugins] are already
177+
providing some semantic support for Rust. At the same time, the [rustfmt] code
178+
formatting tool has matured to the point that the Rust community is ready to
179+
produce an [official style]. And the beating heart of Rust's workflow,
180+
[Cargo], gained numerous abilities this year, most notably the
181+
[install subcommand].
182+
183+
[lldb]: http://lldb.llvm.org/
184+
[gdb]: https://www.gnu.org/software/gdb/
185+
[perf]: https://perf.wiki.kernel.org/index.php/Main_Page
186+
[valgrind]: http://valgrind.org/
187+
[callgrind]: https://kcachegrind.github.io/html/Home.html
188+
[enrich the experience]: https://michaelwoerister.github.io/2015/03/27/rust-xxdb.html
189+
[gdb hooks]: https://sourceware.org/ml/gdb-patches/2016-04/msg00570.html
190+
[cargo profile]: http://www.suchin.co/2016/05/11/Introducing-Cargo-Profiler/
191+
[IDEs]: https://www.rust-lang.org/ides.html
192+
[Racer]: https://github.com/phildawes/racer
193+
[numerous IDE plugins]: https://areweideyet.com/
194+
[rustfmt]: https://github.com/rust-lang-nursery/rustfmt
195+
[official style]: https://github.com/rust-lang/rfcs/pull/1607
196+
[Cargo]: http://blog.rust-lang.org/2016/05/05/cargo-pillars.html
197+
[install subcommand]: http://blog.rust-lang.org/2015/12/10/Rust-1.5.html
198+
199+
- **Compiler**. We've seen some [across-the-board improvements] to compile
200+
times, and now offer [parallelized code generation][parallel codegen] for
201+
further speedups. But the biggest wins will come from the ongoing work on
202+
[incremental compilation], which will minimize the amount of work the needed
203+
when recompiling code after editing it. A vital step here was the move to a
204+
[custom intermediate representation][MIR], which has many other benefits as
205+
well. Another focus has been errors, including
206+
[detailed explanations of most errors][error index], and ongoing work to
207+
[improve the "at a glance" readability of errors][error format]. Expect to
208+
hear more on both fronts soon.
209+
210+
[across-the-board improvements]: http://blog.rust-lang.org/2015/06/25/Rust-1.1.html
211+
[parallel codegen]: http://blog.rust-lang.org/2015/08/06/Rust-1.2.html
212+
[incremental compilation]: https://github.com/rust-lang/rfcs/pull/1298
213+
[MIR]: http://blog.rust-lang.org/2016/04/19/MIR.html
214+
[error index]: https://doc.rust-lang.org/error-index.html
215+
[error format]: https://internals.rust-lang.org/t/new-error-format/3438
216+
217+
- **Core language**. We've kept one list purposefully short this year: growth in
218+
the core language. While we have some important features in the pipeline (like
219+
[improved error handling], [more flexible borrowing rules] and
220+
[specialization]), [Rust users] by and large are happy with the core language
221+
and prefer the community to focus on the ecosystem and tooling.
222+
223+
[Rust users]: https://internals.rust-lang.org/t/production-user-research-summary/2530
224+
[improved error handling]: https://github.com/rust-lang/rfcs/pull/243
225+
[more flexible borrowing rules]: http://smallcultfollowing.com/babysteps/blog/2016/04/27/non-lexical-lifetimes-introduction/
226+
[specialization]: https://github.com/rust-lang/rfcs/pull/1210
227+
228+
There's a lot more to say about what's happened and what's coming up in the Rust
229+
world&mdash;over the coming months, we'll be using this blog to say it.
230+
231+
### Rust in community
232+
233+
It turns out that people like to get together and talk Rust. We had a sold out
234+
[RustCamp] last August, and several upcoming events in 2016:
235+
236+
- September 9-10, 2016: the first [RustConf] in Portland, OR, USA;
237+
- September 17, 2016: [RustFest], the European community conference, in Berlin, Germany;
238+
- October 27-18, 2016: [Rust Belt Rust], a Rust conference in Pittsburgh, PA, USA;
239+
- 71 Rust-related [meetup] groups worldwide.
240+
241+
[RustCamp]: http://rustcamp.com/
242+
[RustConf]: http://rustconf.com/
243+
[RustFest]: http://www.rustfest.eu/blog/happy-birthday-announcing-rustfest
244+
[Rust Belt Rust]: http://rust-belt-rust.com/
245+
[meetup]: http://rust.meetup.com/
246+
247+
And that's no surprise. From a personal perspective, the best part about working
248+
with Rust is its [community]. It's hard to explain quite what it's like to be
249+
part of this group, but two things stand out. First, its sheer *energy*: so much
250+
happens in any given week that [This Week in Rust] is a vital resource for
251+
anyone hoping to keep up. Second, its *welcoming spirit*. Rust's core message is
252+
one of empowerment&mdash;you can [fearlessly] write safe, low-level systems
253+
code&mdash;and that's reflected in the community. We're all here to learn how to
254+
be better programmers, and support each other in doing so.
255+
256+
[fearlessly]: http://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html
257+
[This Week in Rust]: https://this-week-in-rust.org/
258+
[community]: https://www.rust-lang.org/community.html
259+
260+
There's never been a better time to get started with Rust, whether through
261+
attending a local [meetup], saying hello in the [users forum], watching
262+
[a talk], or reading [the book]. No matter how you find your way in, we'll be
263+
glad to have you.
264+
265+
[users forum]: https://users.rust-lang.org/
266+
[a talk]: http://www.infoq.com/presentations/rust-thread-safety
267+
[the book]: https://doc.rust-lang.org/book/
268+
269+
Happy birthday, Rust!

0 commit comments

Comments
 (0)