forked from wezm/wezm.net
193 lines
9.1 KiB
Markdown
193 lines
9.1 KiB
Markdown
_This is my response to the [call for 2019 roadmap blog posts][rust2019]
|
||
proposing goals and directions for 2019 and future editions. See also [Read
|
||
Rust][readrust], where I've collected all the #Rust2019 posts._
|
||
|
||
2018 was a very busy year for the Rust project. A new edition was released,
|
||
progress on stabilising Rust's asynchronous I/O story was made, a new website
|
||
was launched, and so much more! In 2019 I'd like to see the language and
|
||
wider crates community become more sustainable, address some common gothca's
|
||
that newcomers experience, and promote more platforms/architectures to tier 1
|
||
status.
|
||
|
||
## 2018 Retrospective
|
||
|
||
Before diving into 2019 goals I think it's worth tracking how the project went
|
||
on my ideas from [last year][rust2018]:
|
||
|
||
1. Become a better option for building network daemons and HTTP
|
||
micro-services.
|
||
1. Continue to improve the discoverability and approachability of crates and
|
||
Rust's web presence in general.
|
||
1. Gain wider, more diverse tier-1 platform support (especially on servers).
|
||
1. Start delivering on the prospect of safer system components, with fewer
|
||
security holes.
|
||
|
||
### Network Services
|
||
|
||
A lot of progress was made on [Futures] async/await in 2018. The keywords were
|
||
reserved in the 2018 edition but are not yet usable on a stable release. [Are
|
||
we async yet?][areweasyncyet] shows there's still some work to do. [Hyper] saw
|
||
more major changes to keep up with the Futures work and added HTTP/2 support!
|
||
|
||
### Improve Rust's Web Presence
|
||
|
||
The Rust web presence was improved with the release of the new website and
|
||
blog. The rest of the ecosystem remains much the same. Content from crates.io
|
||
is still largely invisible to non-Google search engines such as
|
||
[DuckDuckGo][ddg-results] (my primary web search tool), and Bing. The [Rust
|
||
Cookbook][rust-cookbook] remains in the nursery.
|
||
|
||
### Platform Support
|
||
|
||
[Tier 1 platform support][platform-support] remains unchanged from last year.
|
||
There were a number Tier 2 additions/promotions.
|
||
|
||
### System Components and Increased Safety
|
||
|
||
The oxidisation of [librsvg] continued in 2018 to the point where almost all
|
||
the public API is done in terms of Rust. I'm not aware of many other projects
|
||
following this path at the moment:
|
||
|
||
<iframe src="https://mastodon.social/@federicomena/101383973224691323/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400"></iframe><script src="https://mastodon.social/embed.js" async="async"></script>
|
||
|
||
----
|
||
|
||
## Rust 2019
|
||
|
||
In 2019 I'd like to see the Rust community focus on three areas:
|
||
|
||
1. Sustainable development
|
||
1. Make is easier for newcomers to write fast code / don't surprise people
|
||
1. More portability
|
||
|
||
## Sustainable Development
|
||
|
||
Recently [Murphy Randle](https://twitter.com/splodingsocks) and [Jared
|
||
Forsyth](https://twitter.com/jaredforsyth) were discussing the [event-stream
|
||
compromise][event-stream] on the Reason Town podcast. Jared commented:
|
||
|
||
> The problems of having infrastructure that’s based on unpaid labour that has
|
||
> a high degree of burnout.
|
||
|
||
— [Reason Town podcast episiode 13 @ 19:29](https://overcast.fm/+LfcjXelpg/19:29)
|
||
|
||
This is a pretty succinct summary of the problem with our industry. Rust hasn't
|
||
shied away from tackling hard problems before and taking on the sustainability
|
||
of open source doesn't feel out of the question. There's evidence that many of
|
||
the folks deeply involved with the Rust project are already feeling the
|
||
pressure and we don't want to lose them to burnout. Such as these posts:
|
||
|
||
* [Organizational Debt](https://boats.gitlab.io/blog/post/rust-2019/) by withoutboats
|
||
* [ Thoughts on Rust in 2019](https://words.steveklabnik.com/thoughts-on-rust-in-2019) by Steve Klabnik
|
||
* [Rust in 2019: Focus on sustainability](http://smallcultfollowing.com/babysteps/blog/2019/01/07/rust-in-2019-focus-on-sustainability/) by Niko Matsakis
|
||
|
||
Part of this revolves around culture. The Rust community generally values
|
||
quality, correctness, performance, and treating each other with respect. I
|
||
think it would be possible to make it normal to contribute financially, or
|
||
other means (equipment, education) to Rust language and crate developers (where
|
||
people are in a position to do so). A simple first step might be allowing for a
|
||
donate badge, akin to CI badges to be added to crate meta data and have this
|
||
shown on the Crate page.
|
||
|
||
Michael Gattozzi covered some similar thoughts in his,
|
||
[Rust in 2019: The next year and edition](https://mgattozzi.com/rust-in-2019-the-next-year-and-edition/),
|
||
post.
|
||
|
||
## Naïve Code Is Fast Code
|
||
|
||
People hear that Rust is fast and lean, they try it out converting something
|
||
from a language they already know and are surprised to find that it's slower
|
||
and/or a much larger binary.
|
||
|
||
There are
|
||
[many](https://www.reddit.com/r/rust/comments/adyd9j/why_is_the_rust_version_of_this_fn_60_slower_than/)
|
||
[many](https://www.reddit.com/r/rust/comments/aaood3/go_version_of_program_is_40_quicker_than_rust/)
|
||
[many](https://www.reddit.com/r/rust/comments/7w3v77/why_is_my_rust_code_100x_slower_than_python/)
|
||
[many](https://www.reddit.com/r/rust/comments/aaood3/go_version_of_program_is_40_quicker_than_rust/)
|
||
examples of this in the [Rust Reddit][reddit]. Things that frequently seem to
|
||
trip newcomers up are:
|
||
|
||
1. Not compiling with `--release`
|
||
1. Stdio locking
|
||
1. Binary size
|
||
|
||
It would be good to apply the [principle of least surprise][pls] here. I think
|
||
the current defaults are inspired by the behaviours expected from C/C++
|
||
developers, Rust's original target audience. However the Rust audience is now
|
||
much wider than that. With that in mind it might worth reevaluating some of
|
||
these things in terms of the current audience. These need not require API
|
||
changes, perhaps they could be `clippy` lints. Perhaps they could be slight
|
||
changes to language. For example, `cargo` currently says:
|
||
|
||
> `Finished dev [unoptimized + debuginfo] target(s) in 0.11s`
|
||
|
||
Perhaps a second line could be added that says:
|
||
|
||
> `Compile with --release for an optimized build`
|
||
|
||
to help guide people.
|
||
|
||
## More Tier 1 Platforms
|
||
|
||
This one is inherited from last year. I do all my server hosting with [FreeBSD]
|
||
and up until recently used it as my desktop OS as well. It's not uncommon to
|
||
uncover portability bugs or assumptions when using such a platform. Portability
|
||
is type of diversity of software. It makes it stronger and useful to more
|
||
people.
|
||
|
||
Rust is already appealing to people because of its portability. I was recently
|
||
talking to a veteran developer at the [Melbourne Rust meetup's hack
|
||
night][meetup] about what got them into Rust. It was the combination of modern
|
||
language features, native binary **and** portability that drew them to Rust.
|
||
|
||
To this end I'd like to see more platforms and CPU architectures promoted to
|
||
tier 1 status. Up until recently one thing that made this difficult was the
|
||
lack of hosted CI services with support for anything other than Linux, macOS,
|
||
and Windows. Recently two options have become available that make it possible
|
||
to test on other systems, such as FreeBSD. There is [Cirrus CI] which includes
|
||
a FreeBSD image in their hosted option, as well as the ability to create
|
||
custom images. Secondly there is [sr.ht], a completely open source (but hosted)
|
||
option that supports a variety of Linux distributions, and FreeBSD, with more
|
||
planned.
|
||
|
||
[Pietro Albini suggested in his
|
||
post](https://www.pietroalbini.org/blog/rust-2019-wishlist/) that the Rust
|
||
infrastructure team is already planning to start the discussion on CI options.
|
||
I think this would be a perfect opportunity to integrate more platforms into
|
||
the CI infrastructure:
|
||
|
||
> One of the biggest one is switching away from Travis CI for the compiler
|
||
> repository. In the past year we had countless issues with them (both small
|
||
> and big), and that's not acceptable when we're paying (a lot) for it. The
|
||
> infra team is already planning to start the discussion on where we should
|
||
> migrate in the coming weeks, and we'll involve the whole community in the
|
||
> discussion when it happens.
|
||
|
||
## Conclusion
|
||
|
||
After an intense 2018 it sounds like the Rust project needs to focus on making
|
||
the project sustainable over time. I'd love to see some improvements to
|
||
address issues newcomers often experience and push more platforms to tier
|
||
1 status. Rust is still very exciting to me. I can't wait to see what 2019
|
||
brings!
|
||
|
||
_For more great #Rust2019 posts check out [readrust.net][readrust]._
|
||
|
||
[Cirrus CI]: https://cirrus-ci.org/
|
||
[sr.ht]: https://meta.sr.ht/
|
||
[pls]: http://principles-wiki.net/principles:principle_of_least_surprise
|
||
[event-stream]: https://github.com/dominictarr/event-stream/issues/116
|
||
[reddit]: https://www.reddit.com/r/rust/new/
|
||
[Futures]: https://rust-lang-nursery.github.io/futures-rs/
|
||
[#Rust2018]: https://twitter.com/search?f=tweets&vertical=default&q=%23Rust2018&src=typd
|
||
[areweasyncyet]: https://areweasyncyet.rs/
|
||
[ddg-results]: https://duckduckgo.com/?q=site%3Acrates.io&t=ffab&ia=web
|
||
[FreeBSD]: https://www.freebsd.org/
|
||
[Hyper]: https://hyper.rs/
|
||
[librsvg]: https://people.gnome.org/~federico/news-2016-10.html#25
|
||
[platform-support]: https://forge.rust-lang.org/platform-support.html
|
||
[readrust]: https://readrust.net/rust-2019/
|
||
[rust-cookbook]: https://rust-lang-nursery.github.io/rust-cookbook/
|
||
[rust2019]: https://blog.rust-lang.org/2018/12/06/call-for-rust-2019-roadmap-blogposts.html
|
||
[rust2018]: /2018/01/goals-directions-rust-2018/
|
||
[meetup]: https://www.meetup.com/Rust-Melbourne/
|