🦀 Rust 1.93.0 正式发布:静水流深,稳若磐石
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把闭包一键变格式化器,日志与调试代码由此更轻盈。
其他变更
- Cargo 1.93 同步升级,详见 Cargo 变更日志。
- Clippy 1.93 新增 12 条 lint,详见 Clippy 变更日志。
升级指南
已安装 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 §ions {
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许可证)