【FCon】聚焦金融行业在数智化的全面革新,一线的金融数智化实践干货 了解详情
写点什么

Rust 1.45 发布:修复了 Cast Unsoundness 并稳定了 Web 框架 Rocket 的支持

  • 2020-07-28
  • 本文字数:1238 字

    阅读完需:约 4 分钟

Rust 1.45发布:修复了Cast Unsoundness并稳定了Web框架Rocket的支持

6 月 17 日,极客时间《企业级 Agents 开发实战营》正式上线,10 周掌握企业级 Agents 从设计、开发到部署全流程。

Rust 1.45修复了一个长期存在的浮点数强制转换问题,该问题可能导致未定义行为(undefined behaviour )异常,并稳定了流行 Web框架Rocket所使用的特性。


将浮点数转换为整数时,Rest 会抛出一个 未定义行为(undefined behaviour)的已知异常。如果你对 Rust 的 value proposition有所了解的话,可能会对此感到惊讶。具体来说,下面的代码片段虽然编译时不会报错,但由于使用了 cast ( as ) 将浮点数 300 强制转换为 8 位无符号整数(仅表示值介于 0 到 255 之间的整数),在 Rust 1.44 中会抛出未定义行为的异常:


fn cast(x: f32) -> u8 {     x as u8 } fn main() {     let f = 300.0;     let x = cast(f);     println!("x: {}", x); } 
复制代码


在底层,这个问题与 LLVM 的 fptoui 指令有关,该指令在上述情况下使用会生成一个“有毒”的值。回想一下,Rust 提供了 unsafe 关键字来标记希望 挂起Rust安全保证的代码块。上面所示的代码片段虽然没有被标记为不安全,但它却包含了不安全的代码,这违背了 Rust 作为安全语言的承诺。


Rust 团队花了几年的时间来修复这个不健全的强制转换问题,主要是因为不清楚怎样才能正确地处理它。最终,他们决定让 as 执行“saturating”强制转换,这意味着将过大的浮点数强制转换为可表示的最大整数,将过小的浮点数和 NaN 强制转换为 0。此外,他们还引入了一种新的 unsafe 强制转换,如果你想要跳过 Rust 的安全行为可以使用如下代码:


let x: f32 = 1.0; let y: u8 = unsafe { x.to_int_unchecked() }; 
复制代码


虽然 saturating 强制转换提供了一种处理溢出的安全方法,但从数学角度来看,它仍然会产生错误的结果。 这就是为什么as 在Rust中不被视为值间转换的惯用方法,并且还被Rust的Clipply linter标记的原因。在 Rust 中,将浮点数转换为整数更惯用的方法是,使用 into 来进行不会出错的强制转换,而使用 try_into 来进行可能会出错的强制转换。


Rust 1.45 还在三个新地方增加了对调用过程宏的支持,即:作为表达式的一部分、在模式匹配中或作为语句。过程宏在 Rust 1.30 中进行了扩展,以支持类函数宏的定义(即看起来像函数的宏)。例如,下面的代码片段定义了一个 sql 宏,该宏可生成解析 SQL 语句所需的 Rust 语法树:


// 解析SQL语句 let sql = sql!(SELECT * FROM posts WHERE id=1); #[proc_macro] pub fn sql(input: TokenStream) -> TokenStream {    ... } 
复制代码


该变更版本的重要性还和 它在Rocket中的使用有关,Rocket 是一个流行的声明式 Web 框架,它使用了几个仅在 nightly Rust 中可用的实验特性。由于 Rocket 非常受欢迎,Rust 团队一直在努力稳定其中的一些特性,而 Rocket 则移除了其他的一些特性。作为这一努力的结果,尚未发布的 Rocket 0.5 将成为首个能够使用稳定的 Rust 进行编译的 Rocket 版本。


除了本文提到的内容之外,Rust 1.45 还包含了许多其他特性的稳定和修复。 请不要错过官方发布的详细说明。


原文链接:


Rust 1.45 Fixes Cast Unsoundness and Stabilizes Support for Web Framework Rocket


2020-07-28 09:001891

评论

发布
暂无评论
发现更多内容

音视频流媒体高级开发(FFmpeg6.0/WebRTC/RTMP/RTSP/编码解码)

Geek_da9872

全新Swift从入门到进阶实战探探iOS APP(高清原画)

Geek_da9872

Navicat for MySQL Mac版(数据库管理开发工具)v17.0.9中文特别版

影影绰绰一往直前

接口测试:Mock 的价值与意义

测试人

软件测试 Mock

汽车配件制造业工厂生产管理MES系统解决方案

万界星空科技

mes 汽车行业 万界星空科技 汽车零部件 制造业工厂

淘宝商品搜索API返回值全面解析:关键字搜索助力商家决策优化

技术冰糖葫芦

api 网关 API 安全 API 策略 pinduoduo API

React18+TS 通用后台管理系统解决方案落地实战(完结)

Geek_da9872

MES系统对制造业工厂的重要性

万界星空科技

数字化转型 智能制造 mes 万界星空科技 制造业工厂

软件测试学习笔记丨Python 内置库 pythonlogging 进阶用法

测试人

软件测试

Capture One 23 Enterprise for Mac(图片编辑工具)企业版v16.4.3.15汉化版

影影绰绰一往直前

Trent硬件工程师培训

Geek_da9872

一款自研国产数据库的产品进化论

Geek_2d6073

iText for mac(OCR识别图中文字工具) v1.7.7版

Mac相关知识分享

Mac软件 软件下载 图文识别

碳课堂 | 手把手教你申报CBAM

AMT企源

双碳 碳管理

QCN6224, QCN6274, QCN6024 three kinds of chip difference and WiFi 7 technical analysis

wifi6-yiyi

wifi

数字人引领虚拟主播时代,开启全天候抖音(不封号)智能AI数字人直播带货!

青否数字人

数字人

京东数字人直播,东哥真人出镜效果会更好,为什么要使用数字人进行直播?

青否数字人

数字人

一文读懂Partisia Blockchain 全新开发者计划,最高25k $MPC 资助

西柚子

VideoProc Converter for mac(全能视频处理软件)v6.5中文激活版

影影绰绰一往直前

智领云端,逐梦低空 中国电信成立低空经济产业联盟

Geek_2d6073

RAW图像编辑工具:Capture One 23 Pro v16.4 激活版

你的猪会飞吗

mac软件下载 苹果软件下载

DAPP开发

区块链技术

Capture One Studo for mac( RAW 转换器)v16.4.3.15中文直装版

影影绰绰一往直前

Navicat for Oracle for Mac(专业数据库管理工具)v17.0.9中文特别版

影影绰绰一往直前

深入了解 API 设计:从基础到实践

Apifox

程序员 接口 API API 安全 API 设计

腾讯广告代理全国诚招加盟合作,微信广告代理权全国授权

Geek_bd7410

互联网项目 创业项目

RN从0到1系统精讲与小红书APP实战(2023版)|完结无密

Geek_da9872

React18+TS+Vite 从0自定义组件库实战复杂项目

Geek_da9872

如何实现埋点日志精准监控

百度Geek说

监控 数据埋点 企业号 6 月 PK 榜

以意图为引擎,能否构建基于群体智慧的去中心化产品?

TechubNews

Navicat for MongoDB mac(MongoDB 数据库管理和开发)v17.0.9激活版

影影绰绰一往直前

Rust 1.45发布:修复了Cast Unsoundness并稳定了Web框架Rocket的支持_大前端_Sergio De Simone_InfoQ精选文章