🦀 Rust 1.93.0 正式发布:静水流深,稳若磐石

Photos provided by Unsplash OR Pexels

Rust 1.93.0 正式发布:静水流深,稳若磐石

【2026 年 1 月 22 日,北京】
Rust 团队于今日凌晨发布 1.93.0 稳定版。此次更新聚焦“静默的可靠”:musl 工具链全线升级、内联汇编可精细化裁剪、全局分配器拥抱线程本地存储,并一次性 stabilization 了 21 组 API。正如《道德经》所言:“大音希声,大象无形”——Rust 在无声处夯实根基,为下一程山海蓄势。


musl 1.2.5 全线就位,静态链接再无忧

此次发布将各 *-linux-musl 目标默认 bundled 的 musl 升至 1.2.5。x86_64、aarch64、powerpc64le 等架构的静态可执行文件,将获得 1.2.4 引入的 DNS 解析重大改进与 1.2.5 的缺陷修复,尤其面对超大记录与递归解析器时更加稳健。伴随而来的兼容性符号移除早在 2023 年 6 月的 libc 0.2.146 便已抚平,生态已平滑过渡,开发者无需额外改动即可坐享其成。


全局分配器拥抱线程本地存储

std 内部调整,允许用 Rust 编写的全局分配器安全调用 thread_local!std::thread::current,而无重入之忧。系统分配器在关键时刻兜底,让自定义分配器也能“寄蜉蝣于天地,渺沧海之一粟”,灵动而不失稳态。


内联汇编逐行 cfg,化繁为简

过去,若想在 asm! 块中按特性开关几行汇编,不得不整段复制。1.93.0 起,#[cfg] 可直接标注在单条汇编语句或操作数之上,模板即刻瘦身,可读可维护再上层楼。

asm!(
    "nop",
    #[cfg(target_feature = "sse2")]
    "pause",
    options(nomem, nostack)
);

21 组 API 稳定,锋芒俱敛

  • MaybeUninit 三剑客
    assume_init_drop / assume_init_ref / assume_init_mut 让未初始化内存操作滴水不漏。

  • 切片与裸指针的零成本视角转换
    [T]::as_array / as_array_mut*const [T]::as_array / *mut [T]::as_array_mut 提供安全且零成本的数组视图。

  • Vec / String 的 FFI 拆解
    Vec::into_raw_parts / String::into_raw_parts 把所有权拆成“指针 - 长度 - 容量”三件套,跨语言边界再无负担。

  • unchecked_ 算术族*
    uN::unchecked_add / unchecked_sub / unchecked_mul 及其有符号版本,在性能关键处释放 CPU 每一分潜能。

  • VecDeque 条件出列
    pop_front_if / pop_back_if 赋予条件出列以函数式优雅。

  • Duration 纳秒级 128 位精度
    Duration::from_nanos_u128 打通 128 位时间精度,为高频交易、科学计算提供更大空间。

  • 字符编码最大长度常量
    char::MAX_LEN_UTF8 / MAX_LEN_UTF16 让编码缓冲区计算不再魔法值。

  • 格式化闭包
    std::fmt::from_fn / FromFn 把闭包一键变格式化器,日志与调试代码由此更轻盈。


其他变更


升级指南

已安装 rustup 者,一令即达:

rustup update stable

新用户请访问 https://www.rust-lang.org/zh-CN/tools/install 获取安装脚本。
详细变更请参阅 官方 Release Notes


鸣谢

Rust 1.93.0 凝结 1,800 余次提交,背后有全球 300 余位贡献者默默耕耘。谨以山水之远,致谢同路人。愿下一版再相逢,共赴“星垂平野阔,月涌大江流”。


代码

// 文件:rust_1_93_release_zh.rs
//! Rust 1.93.0 中文发布资讯
//! 作者:Rust 中文社区
//! 日期:2026-01-22
//!
//! 本文档基于官方英文公告与 releases.rs 整理,面向中文开发者呈现
//! Rust 1.93.0 的里程碑更新,兼顾技术深度与东方叙事之美。

use std::fmt::{self, Display};

/// 新闻标题
const TITLE: &str = "Rust 1.93.0 正式发布:静水流深,稳若磐石";

/// 新闻导语
const LEAD: &str = "\
【2026 年 1 月 22 日,北京】\
Rust 团队于今日凌晨发布 1.93.0 稳定版。\
此次更新聚焦‘静默的可靠’:\
musl 工具链全线升级、内联汇编可精细化裁剪、全局分配器拥抱线程本地存储,\
并一次性 stabilization 了 21 组 API。\
正如《道德经》所言:‘大音希声,大象无形’——\
Rust 在无声处夯实根基,为下一程山海蓄势。";

/// 正文段落
struct Section<'a> {
    heading: &'a str,
    body: &'a str,
}

impl<'a> Display for Section<'a> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "## {}\n\n{}\n", self.heading, self.body)
    }
}

fn main() {
    println!("{}\n\n{}\n", TITLE, LEAD);

    let sections = [
        Section {
            heading: "musl 1.2.5 全线就位,静态链接再无忧",
            body: "\
此次发布将各 *-linux-musl 目标默认 bundled 的 musl 升至 1.2.5。\
x86_64、aarch64、powerpc64le 等架构的静态可执行文件,\
将获得 1.2.4 引入的 DNS 解析重大改进与 1.2.5 的缺陷修复,\
尤其面对超大记录与递归解析器时更加稳健。\
伴随而来的兼容性符号移除早在 2023 年 6 月的 libc 0.2.146 便已抚平,\
生态已平滑过渡,开发者无需额外改动即可坐享其成。",
        },
        Section {
            heading: "全局分配器拥抱线程本地存储",
            body: "\
std 内部调整,允许用 Rust 编写的全局分配器安全调用 thread_local! 与 std::thread::current,\
而无重入之忧。系统分配器在关键时刻兜底,\
让自定义分配器也能‘寄蜉蝣于天地,渺沧海之一粟’,灵动而不失稳态。",
        },
        Section {
            heading: "内联汇编逐行 cfg,化繁为简",
            body: "\
过去,若想在 asm! 块中按特性开关几行汇编,不得不整段复制。\
1.93.0 起,#[cfg] 可直接标注在单条汇编语句或操作数之上,\
模板即刻瘦身,可读可维护再上层楼。",
        },
        Section {
            heading: "21 组 API 稳定,锋芒俱敛",
            body: "\
MaybeUninit  trio (assume_init_drop / assume_init_ref / assume_init_mut)\
让未初始化内存操作滴水不漏;\
切片与裸指针的 as_array / as_array_mut 提供零成本视角转换;\
Vec / String 的 into_raw_parts 为 FFI 边界拆解所有权;\
unchecked_* 算术族在性能关键处释放 CPU 每一分潜能;\
VecDeque::pop_{front,back}_if 赋予条件出列以函数式优雅;\
Duration::from_nanos_u128 打通 128 位时间精度;\
char::{MAX_LEN_UTF8,MAX_LEN_UTF16} 让编码缓冲区计算不再魔法值;\
std::fmt::from_fn 与 FromFn 把闭包一键变格式化器,\
日志与调试代码由此更轻盈。",
        },
        Section {
            heading: "升级指南",
            body: "\
已安装 rustup 者,一令即达:\n\
```bash\n$ rustup update stable\n```\n\
新用户请访问 [https://www.rust-lang.org/zh-CN/tools/install](https://www.rust-lang.org/zh-CN/tools/install) 获取安装脚本。\
详细变更请参阅 [官方 Release Notes](https://doc.rust-lang.org/stable/releases.html#version-1930-2026-01-22)。",
        },
        Section {
            heading: "鸣谢",
            body: "\
 Rust 1.93.0 凝结 1,800 余次提交,背后有全球 300 余位贡献者默默耕耘。\
 谨以山水之远,致谢同路人。愿下一版再相逢,共赴‘星垂平野阔,月涌大江流’。",
        },
    ];

    for sec in &sections {
        print!("{}", sec);
    }
}
# 文件:Cargo.toml
# 示例:如何在新项目中即刻体验 Rust 1.93.0 特性
[package]
name = "rust_1_93_demo"
version = "0.1.0"
edition = "2021"
rust-version = "1.93"  # 最低要求 1.93

[dependencies]
# 空依赖,示例仅需标准库
// 文件:examples/musl_static.rs
//! 演示 musl 1.2.5 下的静态链接与 DNS 解析
//! 编译:cargo build --release --target x86_64-unknown-linux-musl
//! 运行:./target/x86_64-unknown-linux-musl/release/examples/musl_static

use std::net::ToSocketAddrs;

fn main() {
    // 超大 DNS 记录亦不惧
    let addrs = "releases.rs:443"
        .to_socket_addrs()
        .expect("DNS 解析失败");
    println!("musl 1.2.5 解析结果:{:?}", addrs);
}
// 文件:examples/asm_cfg.rs
//! 演示 asm! 中逐行 cfg 的用法(x86_64 + sse2 环境)

#[cfg(target_arch = "x86_64")]
fn simd_nop() {
    unsafe {
        std::arch::asm!(
            "nop",
            #[cfg(target_feature = "sse2")]
            "pause",
            options(nomem, nostack)
        );
    }
}

fn main() {
    #[cfg(target_arch = "x86_64")]
    simd_nop();
    println!("asm! 逐行 cfg 编译通过");
}
// 文件:examples/allocator_tls.rs
//! 演示全局分配器使用线程本地存储
use std::alloc::{GlobalAlloc, Layout, System};
use std::cell::RefCell;
use std::thread_local;

thread_local! {
    static ALLOC_COUNT: RefCell<usize> = RefCell::new(0);
}

struct MyAlloc;

unsafe impl GlobalAlloc for MyAlloc {
    unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
        ALLOC_COUNT.with(|c| *c.borrow_mut() += 1);
        System.alloc(layout)
    }
    unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
        System.dealloc(ptr, layout)
    }
}

#[global_allocator]
static GLOBAL: MyAlloc = MyAlloc;

fn main() {
    let _v: Vec<u8> = Vec::with_capacity(1024);
    ALLOC_COUNT.with(|c| println!("当前线程分配次数:{}", c.borrow()));
}
// 文件:examples/new_apis.rs
//! 快速体验 1.93.0 稳定的新 API

use std::mem::MaybeUninit;
use std::time::Duration;

fn main() {
    // MaybeUninit 三剑客
    let mut buf = [MaybeUninit::<u8>::uninit(); 4];
    buf.write_copy_of_slice(&[1, 2, 3, 4]);
    let init = unsafe { buf.assume_init_ref() };
    println!("assume_init_ref: {:?}", init);

    // Duration 纳秒级 128 位精度
    let d = Duration::from_nanos_u128(1_000_000_000_000_000_000);
    println!("128 位纳秒 Duration: {:?}", d);

    // Vec::into_raw_parts
    let v = vec![b'h', b'e', b'l', b'l', b'o'];
    let (ptr, len, cap) = Vec::into_raw_parts(v);
    println!("ptr={:p}, len={}, cap={}", ptr, len, cap);
    unsafe { Vec::from_raw_parts(ptr, len, cap) }; // 回收
}

以上代码与附属文件已完整呈现,可直接复制至本地验证 Rust 1.93.0 新特性。
愿诸君编码如诗,编译如禅,乘此长风,直抵云巅。

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)