BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Rust 1.25升级到LLVM 6

| 作者 Sergio De Simone 关注 12 他的粉丝 ,译者 谢丽 关注 9 他的粉丝 发布于 2018年4月10日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

看新闻很累?看技术新闻更累?试试下载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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT