美烦资源网

专注技术文章分享,涵盖编程教程、IT 资源与前沿资讯

Rust 1.87.0正式发布 & Rust 1.0十周年纪念日

5 月 15 日是 Rust 1.0 发布十周年纪念日,Rust 项目开发者在荷兰的 Utrecht 举办了“Rust 十周年”庆祝活动,并在当天发布新版本 1.87.0。

新版本的主要新特性包括:

  • 标准库加入匿名管道(Anonymous Pipes)
use std::io::Read;

let (mut recv, send) = std::io::pipe()?;

letmut command = Command::new("path/to/bin")
// Both stdout and stderr will write to the same pipe, combining the two.
    .stdout(send.try_clone()?)
    .stderr(send)
    .spawn()?;

letmut output = Vec::new();
recv.read_to_end(&mut output)?;

// It's important that we read from the pipe before the process exits, to avoid
// filling the OS buffers if the program emits too much output.
assert!(command.wait()?.success());
  • 安全架构 intrinsics
#![forbid(unsafe_op_in_unsafe_fn)]

use std::arch::x86_64::*;

fnsum(slice: &[u32]) -> u32 {
#[cfg(target_arch = "x86_64")]
    {
if is_x86_feature_detected!("avx2") {
// SAFETY: We have detected the feature is enabled at runtime,
// so it's safe to call this function.
returnunsafe { sum_avx2(slice) };
        }
    }

    slice.iter().sum()
}

#[target_feature(enable = "avx2")]
#[cfg(target_arch = "x86_64")]
fnsum_avx2(slice: &[u32]) -> u32 {
// SAFETY: __m256i and u32 have the same validity.
let (prefix, middle, tail) = unsafe { slice.align_to::<__m256i>() };

letmut sum = prefix.iter().sum::<u32>();
    sum += tail.iter().sum::<u32>();

// Core loop is now fully safe code in 1.87, because the intrinsics require
// matching target features (avx2) to the function definition.
letmut base = _mm256_setzero_si256();
for e in middle.iter() {
        base = _mm256_add_epi32(base, *e);
    }

// SAFETY: __m256i and u32 have the same validity.
let base: [u32; 8] = unsafe { std::mem::transmute(base) };
    sum += base.iter().sum::<u32>();

    sum
}
  • 通过 asm! 内联汇编可跳转到 Rust 代码中的标记块
unsafe {
    asm!(
"jmp {}",
        label {
println!("Jumped from asm!");
        }
    );
}
  • 稳定 API 等等

为庆祝 Rust 1.0 稳定版发布十周年,Rust 作者 Graydon Hoare 写了一篇《10 Years of Stable Rust: An Infrastructure Story》长文进行回顾,他在文章提到了一组数据:

  • 1.0 之前,Rust 代码库记录了 4 万次变更;此后又新增了 24.6 万次提交。换算下来,过去 10 年几乎是每小时合并 2.8 次提交。
  • 贡献者从 1.0 时不足 1000 人,发展到现在约 6700 人
  • 项目已关闭超过 4.7 万个 issue,处理了 14 万多个 PR
  • 1.0 时共计约 1100 份 RFC(用于语言演进的提案),如今累计达到了 3772 份
  • 自 1.0 以来发布了 87 个正式版本,大多数都按六周节奏准时发布
  • 推出过 3 个 Edition(版本变更打包,兼容旧代码),用于引入需要 opt-in 的非兼容变更
  • 每个版本的兼容性测试范围从 2500 个 crate 增长到了现在的 58.7 万个

话说当初创建 Rust 语言,据传是 Graydon Hoare 回家后发现电梯坏了,自己得爬到 21 楼上。爬楼的时候就在瞎琢磨电梯故障很可能是 C/C++ 引发的内存软件故障,越想越气,爬上去就决定要搞个新的内存安全的语言出来。

小编把上面这段文字发给 AI 判定真实性,得到了如下回复:

这段内容并非完全虚假杜撰,是有一定真实背景的。Rust 编程语言的诞生确实与 Graydon Hoare 的一次电梯故障经历有关,但具体的细节在流传过程中可能有所夸张或演绎。

2006 年,Graydon Hoare 在 Mozilla 公司工作,住在温哥华的公寓 21 楼。某天他下班回家发现电梯又坏了,只能爬楼梯上去。他很清楚,电梯软件大多是用 C 或 C++ 编写的,而这类语言容易出现内存管理问题导致软件崩溃。

于是便萌生了设计一门新编程语言的想法,希望这种语言既能写出小而快的程序,又能从根本上避免内存错误等常见问题,Rust 语言由此诞生。

不过,Rust 语言的创建并非仅因这一偶然事件,Graydon Hoare 当时对 C/C++ 等语言在内存安全、并发等方面的不足已有深刻认识,也一直希望探索一种更好的编程语言。

而且,Rust 从最初构想到最终成型经历了漫长过程,背后还有 Mozilla 等众多团队和个人的共同努力。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言