惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
H
Help Net Security
Recorded Future
Recorded Future
The Register - Security
The Register - Security
F
Full Disclosure
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hackread – Cybersecurity News, Data Breaches, AI and More
爱范儿
爱范儿
Security Archives - TechRepublic
Security Archives - TechRepublic
Simon Willison's Weblog
Simon Willison's Weblog
Cisco Talos Blog
Cisco Talos Blog
I
InfoQ
T
Tenable Blog
T
Tor Project blog
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
NISL@THU
NISL@THU
Google DeepMind News
Google DeepMind News
博客园 - 叶小钗
B
Blog
V
V2EX
Jina AI
Jina AI
L
LangChain Blog
月光博客
月光博客
W
WeLiveSecurity
U
Unit 42
AWS News Blog
AWS News Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 聂微东
V
Visual Studio Blog
A
Arctic Wolf
T
Tailwind CSS Blog
The Cloudflare Blog
SecWiki News
SecWiki News
S
SegmentFault 最新的问题
Hacker News - Newest:
Hacker News - Newest: "LLM"
宝玉的分享
宝玉的分享
MyScale Blog
MyScale Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Securelist
www.infosecurity-magazine.com
www.infosecurity-magazine.com
腾讯CDC
雷峰网
雷峰网

Rust Blog

Security Advisory for Cargo (CVE-2026-5223) | Rust Blog Security Advisory for Cargo (CVE-2026-5222) | Rust Blog Project goals update — April 2026 (end of 2025H2) | Rust Blog Rust is participating in Outreachy | Rust Blog Raising the baseline for the `nvptx64-nvidia-cuda` target | Rust Blog Announcing Google Summer of Code 2026 selected projects | Rust Blog Announcing Rust 1.95.0 | Rust Blog docs.rs: building fewer targets by default | Rust Blog Changes to WebAssembly targets and handling undefined symbols | Rust Blog Announcing Rust 1.94.1 | Rust Blog Security advisory for Cargo | Rust Blog What we heard about Rust's challenges | Rust Blog Call for Testing: Build Dir Layout v2 | Rust Blog Announcing rustup 1.29.0 | Rust Blog Announcing Rust 1.94.0 | Rust Blog 2025 State of Rust Survey Results | Rust Blog Rust debugging survey 2026 | Rust Blog Update on the October 15, 2018 incident on crates.io Announcing Rust 1.29.2 Announcing Rust 1.29 Launching the 2018 State of Rust Survey Announcing Rust 1.28 What is Rust 2018? Announcing Rust 1.27.2 Announcing Rust 1.27.1 Security Advisory for rustdoc Announcing Rust 1.27 Announcing Rust 1.26.2 Announcing Rust 1.26.1 Rust turns three Announcing Rust 1.26 The Rust Team All Hands in Berlin: a Recap Increasing Rust’s Reach 2018 Announcing Rust 1.25 Rust's 2018 roadmap Announcing Rust 1.24.1 Announcing Rust 1.24 The 2018 Rust Event Lineup Announcing Rust 1.23 New Year's Rust: A Call for Community Blogposts Rust in 2017: what we achieved Announcing Rust 1.22 (and 1.22.1) Fearless Concurrency in Firefox Quantum Announcing Rust 1.21 impl Future for Rust Rust 2017 Survey Results Announcing Rust 1.20 Announcing Rust 1.19 The 2017 Rust Conference Lineup Rust's 2017 roadmap, six months in Increasing Rust’s Reach Announcing Rust 1.18 Two years of Rust The Rust Libz Blitz Launching the 2017 State of Rust Survey Announcing Rust 1.17 Announcing Rust 1.16 Rust's language ergonomics initiative Announcing Rust 1.15.1 Rust's 2017 roadmap Announcing Rust 1.14 Announcing the First Underhanded Rust Contest Announcing Rust 1.13 Announcing Rust 1.12.1 Announcing Rust 1.12 Incremental Compilation Announcing Rust 1.11 Shape of errors to come The 2016 Rust Conference Lineup Announcing Rust 1.10 State of Rust Survey 2016 Announcing Rust 1.9 One year of Rust Taking Rust everywhere with rustup Launching the 2016 State of Rust Survey Cargo: predictable dependency management Introducing MIR Announcing Rust 1.8 Announcing Rust 1.7 Announcing Rust 1.6 Announcing Rust 1.5 Announcing Rust 1.4 Announcing Rust 1.3 Rust in 2016 Announcing Rust 1.2 Rust 1.1 stable, the Community Subteam, and RustCamp Announcing Rust 1.0 Abstraction without overhead: traits in Rust Rust Once, Run Everywhere Mixing matching, mutation, and moves in Rust Fearless Concurrency with Rust Announcing Rust 1.0 Beta Announcing Rust 1.0.0.alpha.2 Rust 1.0: status report and final timeline Announcing Rust 1.0 Alpha Rust 1.0: Scheduling the trains Yehuda Katz and Steve Klabnik are joining the Rust Core Team Cargo: Rust's community crate host Stability as a Deliverable Road to Rust 1.0
Announcing Rust 1.15
The Rust Core Team · 2017-02-02 · via Rust Blog

The Rust team is happy to announce the latest version of Rust, 1.15.0. Rust is a systems programming language focused on safety, speed, and concurrency.

If you have a previous version of Rust installed, getting Rust 1.15 is as easy as:

$ rustup update stable

If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes for 1.15.0 on GitHub. 1443 patches were landed in this release.

What's in 1.15.0 stable

Rust 1.15 sees an extremely eagerly-awaited feature land on stable: custom derive! To review, in Rust, you've always been able to automatically implement some traits through the derive attribute:

#[derive(Debug)]
struct Pet {
    name: String,
}

The Debug trait is then implemented for Pet, with vastly less boilerplate. However, this only worked for traits provided as part of the standard library; it was not customizable. With Rust 1.15, it now is. That means, if you want to turn your Pet into JSON, it's as easy as adding Serde to your Cargo.toml:

[dependencies]
serde = "0.9"
serde_derive = "0.9"
serde_json = "0.9"

And adding another trait to your Pet:

#[macro_use]
extern crate serde_derive;

extern crate serde_json;

#[derive(Serialize, Deserialize, Debug)]
struct Pet {
    name: String,
}

fn main() {
    let pet = Pet { name: String::from("Ferris") };

    let serialized = serde_json::to_string(&pet).unwrap();
    println!("serialized = {}", serialized);

    let deserialized: Pet = serde_json::from_str(&serialized).unwrap();
    println!("deserialized = {:?}", deserialized);
}

This will output:

serialized = {"name":"Ferris"}
deserialized = Pet { name: "Ferris" }

Another common use-case is Diesel. Say we had a database of Pets. We could fetch them like this:

// some extern crate and use lines elided here

#[derive(Queryable)]
struct Pet {
    name: String,
}

fn main() {
    use diesel_demo::schema::pets::dsl::*;

    let connection = establish_connection();
    let results = pets
        .limit(5)
        .load::<Pet>(&connection)
        .expect("Error loading pets");

    println!("Displaying {} pets", results.len());
    for pet in results {
        println!("{}", pet.name);
    }
}

For full instructions, see the website.

These kinds of libraries are extremely powerful, but rely on custom derive for ergonomics. While these libraries worked on Rust stable previously, they were not as nice to use, so much so that we often heard from users "I only use nightly because of Serde and Diesel." The use of custom derive is one of the most widely used nightly-only features. As such, RFC 1681 was opened in July of last year to support this use-case. The RFC was merged in August, underwent a lot of development and testing, and now reaches stable today!

To find out how to write your own custom derives, see the chapter of "The Rust Programming Language".

While we've said "Serde and Diesel" a number of times here, there's a lot of other cool things you can do with custom derive: see derive-new for another example. See the syn crate's reverse dependencies for more. (syn is important for writing custom derives, see the book chapter, linked above, for more.) Custom derive was also known as "macros 1.1", as it includes the infrastructure for supporting even more compile-time powers of Rust, nicknamed "macros 2.0." Expect to hear more about this space in future releases.

Other improvements

The build system for Rust has been re-written in Rust, using Cargo. It is now the default. This process has been long, but has finally borne fruit. Given that all Rust development happens on the master branch, we've been using it since December of last year, and it's working well. There is an open PR to remove the Makefiles entirely, landing in Rust 1.17. This will pave the way for rustc to use packages from crates.io in the compiler like any other Rust project, and is a further demonstration of the maturity of Cargo.

Rust has gained Tier 3 support for i686-unknown-openbsd, MSP430, and ARMv5TE.

A number of compiler performance improvements have landed. We continue to work on making the compiler faster. Expect to see more in the future!

As a smaller improvement, ?Sized can now be used in where clauses. In other words:

struct Foo<T: ?Sized> {
    f: T,
}

struct Foo<T> where T: ?Sized {
    f: T,
}

This second form is now accepted, and is equivalent to the first.

See the detailed release notes for more.

Library stabilizations

The slice::sort algorithm has been rewritten, and is much, much, much faster. It is a hybrid merge sort, drawing influences from Timsort. Previously it was a straightforward merge sort.

If you had a Vec<T> where T: Copy, and you called extend on it, your code will now be a lot faster.

Speaking of things getting faster, chars().count(), chars().last(), and char_indices().last() are too!

Chinese characters now display correctly in fmt::Debug.

There were a number of functions stabilized as well:

See the detailed release notes for more.

Cargo features

Cargo will now emit a warning if you have a file named build.rs at the top level of a package, but don't have a build = "build.rs" annotation. This is in anticipation of inferring that build.rs at the top level is always a build script, but is a warning right now for compatibility reasons. Previously, all build scripts required configuration, but this convention was strong within the community, so we're going to encode it into Cargo.

In this release, Cargo build scripts no longer have access to the OUT_DIR environment variable at build time via env!("OUT_DIR"). They should instead check the variable at runtime with std::env. That the value was set at build time was a bug, and incorrect when cross-compiling. Please check what your packages are doing and update to use std::env!

The cargo test command has gained support for a --all flag, which is useful when you have a workspace.

We now Compile statically against the MSVC CRT on Windows, and Link OpenSSL statically on Mac OS X.

See the detailed release notes for more.

Contributors to 1.15.0

In this part of the release announcements, we usually post a list of contributors. However, we've recently started a new initiative, "Thanks!", to do this in a more comprehensive way. One issue with this section is that it only counted contributions to the rust-lang/rust repository; those who committed to Cargo weren't thanked, for example. We also had to manually generate this list, which wasn't terrible, but running the correct git commands to determine who contributed is exactly what code is good for!

As such, you can now visit https://thanks.rust-lang.org/ to see more comprehensive contribution calculations. If you prefer, we also have an alias at https://❤.rust-lang.org as well. For now, this will only show what we've shown in previous release posts. We do have one additional feature, which is an all-time contributions list, sorted by commit count. That's located here: https://thanks.rust-lang.org/rust/all-time

We have done some of the needed backend work to enable more repositories than only rust-lang/rust, but it's not quite done yet. If you'd like to get involved, please check out thanks on GitHub!

We had 137 individuals contribute to Rust 1.15. Thanks!