This Week in Rust
Hello and welcome to another issue of This Week in Rust! Rust is a systems language pursuing the trifecta: safe, concurrent, and fast. This is a weekly summary of its progress and community. Want something mentioned? Send me an email! Want to get involved? We love contributions.
There were a surprising number of breaking changes this week. The libextra
dissolution continues. Condition
removal and the IO error overhaul also landed.
rustpkg was also removed, and
rustc’s CLI interface has changed. Additionally, Rust gained another
full-time developer! A big hello to Nick Cameron, I look forward to seeing his
It was also discovered that we closed the second largest number of issues of any repository on GitHub! We trailed behind homebrew, which is almost cheating, because they use it to track issues on over five thousand packages. Good job everyone!
What’s cooking on master?
72 pull requests were merged this week.
- Some intrinsics have been
std::mem, in preparations of the intrinsics no longer being publically exposed.
- A soundness regression has been fixed.
charnow has range asserts. This may cause invalid uses of
char(using invalid values) to break.
- The various traits in
&self, rather than a separate parameter with an argument of type
@Trait(managed trait objects) have been removed.
rustpkghas been removed.
std::fmt::Defaulthas been renamed to
- IO errors have been completely
overhauled, and no longer use
conditions. Alex wrote an
to the mailing list summarizing the changes. Especially take note of the
- Conditions have been removed entirely. A detailed post-mortem is available on the pull request.
rustchas seen some work on its interface. The output flags have been unified, replacing
--rlib, etc with two arguments:
--crate-type. There is another PR in the queue that replaces a bunch of miscellaneous flags behind
-C. It will likely land shortly, and is something to be aware of.
NonCopyablehas been renamed to
NoPodto be consistent with the rest of the “marker types”.
reservenaming has been shuffled around slightly.
SendStrhas been removed in favor of a
As part of the libextra dissolution, the following crates have been introduced:
libcollections, which has inherited
libgetopts, which has inherited
getopts::groupsis now the only interface. It has been moved up a level, into just
getopts, and the old functions have been removed.
libserialize, which has inherited
libuuid, which has inherited
libsemver, which has inherited
libterm, which has inherited
All crates are still documented, and there is a list with links at http://static.rust-lang.org/doc/master/index.html.
black_boxfunction has been added to
extra::test, and the
itermethod on BenchHarness can now return values. As documented (generated version), these exist to make sure that LLVM will not optimize out benchmarks.
fourcc!syntax extension has been added.
unimplemented!macro has been added, used much the same as
- The [runtime libraries have gained examples, and libgreen now has an explanation of how it is structured at a high level, specifically where concurrency and parallelism come from.
from_utf8_lossyfunction has been added that replaces invalid codepoints with the unicode replacement character (�).
- Network streams are now
cloneable. This allows for
multiple tasks reading/writing a
- A copy-on-write Arc container has been added to
libextra, though it’s now in
- SIMD types are now allowed in generics.
- A new mutex type that plays well with the various runtimes has been implemented. It is in the same ballpark as native, pthread mutexes.
- Cole Mickens
- Colin Sherratt
- Ivan Enderlin
- James Deng
- João Souls
- Marek Šuppa
- Yuri Kunde Schlesner
discussed adding a
libprim, operator overloading, and the 1.0 goals for
- There will be a meetup in Paris, on February 25, from 18:30 to 23:30.
- Bay Area Rust will be meeting February 25, at 19:00 in San Francisco. David Renshaw will be talking about Cap’ Proto, Steven Fackler will be talking about exportable macros, and Kevin Cantu about testing.
This Week in Servo
Servo is a web browser engine written in Rust and is one of the primary test cases for the Rust language.
This week, we landed 14 PRs, but there are a substantial number of very close pending PRs that add major layout features to Servo (e.g., lists markers, tables, initial pseudo-class and pseudo-element support).
- Bruno Abinader continued with his great DOM additions in #1634 and #1622 and #1604
- Patrick Kim fixed borders on inline boxes in
#1577 and landed
position:relativesupport in #1613
- Patrick Walton further improved layout performance in #1630 and #1615
- Adrien Bustany fixed
- Lars Bergstrom landed reftest stabilization fixes in #1623 – we are almost ready to gate landing commits on content and ref tests passing on Linux, once we get more fonts installed on our Linux buildbots
- Adrien Bustany (abustany)
In this week’s meeting, we mainly discussed display list construction with respect to layering and stacking contexts.
Josh Matthews’ talk on Servo at FOSDEM is available here.
- Lazily initialized statics
- Rust gains a new full-time developer, Nick Cameron.
- Handling I/O Errors
- Pure-Rust Adler32 and CRC32
- Closures and the borrow checker
- Pure-Rust LZW Compression Algorithm
- Rust by Example: Default arguments, etc
- Standalone rust app
- IDE support?
- Playing with the new Rust I/O error handling
- Another failed attempt at parser combinators
- A case for reflection in Rust
- A persistent map implementation, like in Clojure and Scala, with performance numbers.