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.
This was a good week, with default type parameters, do
removal, @[]
removal, and some code bloat reduction.
What's cooking on master?
61 pull requests were merged this week.
Breaking Changes
do
has been removed. Replacedo spawn { ... }
withspawn(proc() { ... })
.libextra
has exploded. It exploded some more. It will continue to explode until it no longer exists.#[simd]
has been feature gated.- We now generate static libraries by default, rather than dynamic libraries.
@[]
and@str
have been removed from the language. All that is left is@T
!- Various methods on vectors now return Options, to be in line with the rest of everything else.
next_power_of_two_opt
has been renamed tochecked_next_power_of_two
. Additionally, the various functions for division instd::uint
were removed.#[no_send]
etc have been removed in favor of marker types. Additionally, variance of types and lifetimes can explicitly be annotated with these marker types. They are zero-sized and have no runtime impact.std::borrow
has been removed.Times
has finally been removed. Good riddance.- The various
CopyableVector
-like types have been renamed toCloneableVector
etc.
Other Changes
- There are now lints for unused
values. Types annotated with
#[must_use]
will now warn when (surprise) their results are not used. - debuginfo should now be fixed on OS X, due to us now explicitly setting the DWARF version.
fp-elim
has been re-disabled, but only if debuginfo generation is disabled.- Errors from
#[deriving(...)]
have seen some work. - The evil environment pointers has been removed from bare
functions, as well as
self
now being a mostly-normal argument, to the compiler. This was a huge effort (88 changed files with 1,436 additions and 2,138 deletions) by Eduard Burtescu, and is awesome! - Also from Eduard is default type
parameters! They are currently
behind a feature flag, but allow you to say, for example,
struct Foo<T = uint>
and useFoo
as a bare type. - The tydesc is used in less places to help fend off code bloat.
- The occasional infinite recursion in some recursive types has been fixed.
- Take glue has been removed from tydescs, also to fend off code bloat.
fail!()
also generates less code now, to fend off bloat. In particular,fn main() { fail!() }
now compiles 2-3x faster due to generating less code.
New Contributors
- JeremyLetang
- Johannes Muenzel
- Keshav Kini
- Michael Darakananda
- Nathaniel Herman
Weekly Meeting
The weekly meeting discussed default type parameters, the unused result lint, minor changes to the attribute syntax, how to deal with I/O splitting, and the visit glue.
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 32 PRs, significantly above our usual PR landing rate!
Notable additions
- Patrick Walton landed a huge number of PRs that significantly improved our performance and parallelism #1600, #1564, #1567, #1589, #1566 #1574, #1571, #1559, etc.
- Rui (xiongmao86) fixed a linking issue in our Makefiles in #1603.
- Isabelle Carter landed multiple display list support in #1579.
- Lars Bergstrom finally re-enabled ref tests in #1565 and started a quest to improve test reliability in #1597 and #1570.
- Bruno Abinader pushed on more DOM features in #1583 and #1580.
- Clark Gaebel (wowus) enabled a limit on the number of redirects Servo follows in #1562.
- Tetsuharu Ohzeki cleaned up Node's
remove
andinsert
members #1582. - Deokjin Kim implemented
whitespace:pre
in #1547. - Patrick Kim landed border support for inline flows in #1546.
- Simon Sapin used his CSS wizardry to redo a performance tweak we made so that it's actually spec-compliant in #1560.
New contributors
- Clark Gaebel (wowus)
- Rui (xiongmao86)
Meetings
In this week's meeting, we discussed moving the build of fontconfig on Linux into Servo to avoid situations where the system version is old and not threadsafe, what's blocking the JSManaged conversion (which is required for our next Rust upgrade), and the status of ref and content tests.
Josh Matthews is at FOSDEM this weekend, giving a talk on Servo. Look for video on air.mozilla.org shortly!
Announcements, etc
- An xxHash implementation in Rust, as well as some benchmarks comparing to gcc and clang.
- Using LLVM From Within Rust
- Felix's CodeMesh presentation
- A 1.0 roadmap spreadsheet
- rust-lua, safe bindings to Lua 5.1
- InfoQ interview with Felix
- Parameters and Bounds in Rust
- Network Communication and Serialization in Rust
- Recording of the Bay Area Rust January meetup, wherein Brian talks about 1.0, Niko talks about DST, Kevin talks about rust-lua, and I talk about evangelism.
- Deprecating rustpkg