点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

Rust 1.25 升级到 LLVM 6

  • 2018-04-09
  • 本文字数:911 字

    阅读完需:约 3 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Rust 1.25 把 LLVM 升级到 LLVM 6,新增use语句嵌套导入组支持、自定义结构对齐、库稳定化。不过,最新的 Rust 版本没有包含许多期待已久的特性,如impl Trait、稳定的 SIMD 库支持、128 位整数。

升级到 LLVM 6 有若干好处,如各种各样的Bug 修复,其中包括SIMD 相关的编译错误,但是,升级的主要目的是为了方便与LLVM 上游的Wasm 后台保持一致,那样可以快速支持Wasm 的新特性。但有一个重要的例外,就是基于Emscripted 的JavaScript 后台,它使用了锁定的LLVM 4 版本。据Rust 开发者Steve Klabnik 介绍,在一般情况下, LLVM 6 未必会带来任何性能的提升,它编译得更快还是更慢取决于实际的代码。

use 语句的新语法让开发人员可以指定嵌套的导入组,旨在让代码更有可读性、更简洁。例如,下面一组导入:

复制代码
use std::fs::File;
use std::io::Read;
use std::path::{Path, PathBuf};

现在可以写成:

复制代码
use std::{fs::File, io::Read, path::{Path, PathBuf}};

此外,现在可以使用#[repr(align(x))] 注解对齐Rust 1.25 的 structs

复制代码
struct Number(i32);
assert_eq!(std::mem::align_of::<Number>(), 4);
assert_eq!(std::mem::size_of::<Number>(), 4);
#[repr(align(16))]
struct Align16(i32);
assert_eq!(std::mem::align_of::<Align16>(), 16);
assert_eq!(std::mem::size_of::<Align16>(), 16);

在使用有特殊对齐要求的硬件时,这个特性非常有用,可以更好地与 C 代码互操作,例如,更容易把一个结构正确地传递给某些期望使用指定对齐方式的 C 代码,对一些高级场景也有用,如在内核中静态分配页表。

在库方面,最显著的变化是引入了 std::ptr::NonNull ,这很像*mut T,但可以保证非 0 和协变,最适合于使用安全代码构建数据结构。

按照现在的情况,Rust 1.25 并不是许多开发人员期待的 Rust 大版本,因为它没有包含 Rust 团队已经研发了很长时间的重大特性,包括impl Trait(提升性能、简化泛型语法和诊断)、128 位整数、稳定的 SIMD 库支持等。好消息是,据 Klabnik 介绍,这些特性将会在接下来的 1.26 和 1.27 两个版本中提供。

查看英文原文 Rust 1.25 Moves to LLVM 6

2018-04-09 19:001395
用户头像

发布了 1008 篇内容, 共 356.7 次阅读, 收获喜欢 332 次。

关注

评论

发布
暂无评论
发现更多内容
Rust 1.25升级到LLVM 6_语言 & 开发_Sergio De Simone_InfoQ精选文章