写点什么

可信编程 – Rust 语言开发的实践和愿景

  • 2021-02-11
  • 本文字数:2426 字

    阅读完需:约 8 分钟

可信编程 – Rust语言开发的实践和愿景

作者:

Yijun Yu

可信编程首席专家

华为可信软件工程与开源实验室

华为爱尔兰研究所

Amanieu d’Antras

Rust 高级专家

华为可信软件工程与开源实验室

华为爱尔兰研究所


Rust 带来的创新

StackOverflow 的调查表明, 自 2015 年以来,Rust 一直是开发者最爱的编程语言。

学术界对于 Rust 也越来越重视,在编程语言和软件工程顶会上发表的关于 Rust 的论文正逐年增加。

不仅如此,《自然》杂志 2020 年尾的文章《Why Scientists are Turning to Rust》中也强调:科学家极为推崇 Rust。

Rust 在华为的初步推进

华为的目标是引领通信系统软件向安全可信演进,其中 Rust 语言正在发挥很大的作用。例如,我们希望通过部分 C/C++代码向 Rust 的迁移,在保证高性能的同时,拥有更高的安全性。在此过程中, 我们为开发者提供一套自动化工具支持:基于开源的 C2Rust 转译工具, 首先从 C 代码生成 Rust 代码, 然后通过源到源变换工具自动重构。


华为内部还基于 actor 的并发编程模式开发了 Rust 库,例如 async, await,方便程序员充分利用 Rust 的语言特性。


华为的通信系统软件开发以 C/C++ 代码为主, 在需要的时候,这些 Rust 库将使 C/C++ 到 Rust 的迁移更加顺畅。作为业界领先公司和 Rust 基金会创始成员,华为致力于推进 Rust 在通信软件行业的发展,并将持续为 Rust 社区做出贡献。

华为对 Rust 社区的贡献

我们为 Rust 社区贡献了许多重要的功能特性。例如,我们最近为 Rust 编译器提交了一系列代码,使得 Rust 编译目标可以支持 ARM AArch64 32 位大端变体 ILP32 芯片组, 以便用于我们的通信产品中。这些改进使得我们和友商可以在这些常用网络硬件架构上执行 Rust 原生程序。这些代码已经通过我们的 Rust 专家 Amanieu d’Antras 提交给了 LLVM 编译器, libc 库, 以及 Rust 编译器等开源项目。


这些对 Rust 编译器的更改引入了新的端到端交叉编译目标,基于此针对定制硬件构建 Rust 产品变得更容易, 只需要简单的命令,比如:

cargo build --target aarch64_be-unknown-linux-gnucargo build --target aarch64-unknown-linux-gnu_ilp32cargo build --target aarch64_be-unknown-linux-gnu_ilp32
复制代码

华为在中国 Rust 社区贡献方面也走在前列。去年 12 月 26 日至 27 日,在深圳战略赞助了 Rust China Conf 2020 ,并推行多项社区活动,包括为中国的开发者提供 Rust 教程和 Rust 编码规范。

配置华为的端到端 Rust 工具链

(C、C++、Rust 代码在 Fuchsia 项目的占比)

Rust 社区中有几种端到端的工具,我们已经开始从开发人员和工具的交互中获取信息。

这里有一些例子

tokei

由于可信编程项目通常涉及多个编程语言,我们采用了 tokei 作为多语言代码复杂性度量工具,可识别多达 200 种编程语言。例如,开源的 Fuchsia 项目涉及了多种编程语言,下面的统计信息显示有多少行不同语言的代码:

另外,为了在大型项目中满足处理多种编程语言的场景需求,我们为 tokei 提供新特性,使其支持识别编程语言的批处理。

cargo-geiger

为了提高安全性,我们经常想知道有多少代码已经被 Rust 编译器检查过。幸运的是,通过统计带有“unsafe”关键字的 fn、expr,struct、impl、trait 及其在各相关库, cargo-geiger 几乎做到了这点。

不过,统计数字中并没有反映安全性,所以没办法展现 Rust 项目总体上取得了多少进展的比例。因此,我们提交了代码,在改进的 cargo-geiger 计数器报告中提供 Rust 项目的安全检查比率。这些代码被采纳后,我们的研发团队现在每天都在使用这个工具,这份典型的报告能够很容易看出哪些代码库还没被 Rust 编译器完全检查到。


通过深度代码学习研究 Rust

随着 Rust 开源社区代码的发展和革新,初学者需要学习掌握 Rust 最佳的实践,其包括但不限于 Rust 语言本身。把统计机器学习的方法应用到源代码数据上,也称为 Big Code,正被全世界的软件工程研究团队关注:类似于图像处理和自然语言处理中的机器学习问题,这些问题都需要通过深度神经网络 (deep neural networks DNN) 提取大量的特征,Big Code 可能同样需要去训练 DNN 来反映程序的统计特性,所以也称为“深度代码学习”。


在这方面,华为与英国开放大学和新加坡管理大学进行技术合作,在现在最先进的“跨语言”深度代码学习基础上进行优化研究。


例如,最初的深度代码学习方法应用于北京大学编程课程收集到的 104 个算法类的 5.2 万个 C/C++ 程序。对此数据集,树基卷积神经网络 (TBCNN) 算法分类准确率达到 94%(AAAI’16)。最近的 SOTA 在语句级使用抽象语法树 (ICSE ’19) 准确率达到 98%。近期我们同英国开放大学和新加坡管理大学在树基胶囊网络的合作研究进展推动了 SOTA 进一步提高,达到 98.4% 的准确率 (AAAI’21)。


早些时候我们已经使用跨语言的数据集证明,对一种编程语言的深度代码学习模型也适用于另一种编程语言。例如,从 GitHub 爬取的数据集 Rosetta Code,从 Java 到 C 语言,可以获得 86% 的算法分类准确度 (SANER’19),在 Java 到 C# 的跨语言 API 映射问题中也能发挥重要作用 (ESEC/FSE’19)。这些统计语言模型在软件工程中可以应用于很多方面,比如代码分类、代码搜索、代码推荐、代码摘要、方法名称预测、代码克隆检测等等 (ICSE’21)。


为了进一步研究分析 Rust 项目,我们向 Rust 解析器项目 tree-sitter 和 XML 序列化 quick-xml 等项目提交了代码,通过 Rust 程序的抽象语法树来训练深度代码学习模型。研究的初步结果显示,算法检测任务在 Rust 代码上的精度高达 85.5%。随着工具链的改进,这个比例还有望进一步提升。


在 Visual Studio Code IDE 上,我们开发扩展插件,使得程序员可以得到合适的算法推荐和可解释性的帮助。

结      论

综上所述,华为可信软件工程与开源实验室正在开展的 Rust 工作为程序员提供智能化端到端 IDE 工具链,以期最大限度地提高代码的安全性和性能。走向可信编程远景的旅程刚刚开始,我们希望与 Rust 社区和 Rust 基金会深度合作,引领电信软件产业的可信革新。


英文原文链接

https://trusted-programming.github.io/2021-02-07/index.html

2021-02-11 10:004460

评论

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

Python 实战!手把手教你调用淘宝商品列表 API 接口

tbapi

淘宝商品详情接口 淘宝数据采集 淘宝API 天猫商品数据采集 淘宝商品详情API

国产法律AI亮相香港!爱问法AI参加香港国际创科展InnoEX

极客天地

时序数据库 TDengine 助力石油石化业务, 平滑接替 Oracle 数据库

TDengine

数据库 tdengine 时序数据库

过来人给1-3 年技术新人的几点小小的建议,帮助你提升职场竞争力

安全乐谷

找工作 招聘 简历 实习 校招

AI与机器人外科手术:如何用智能化技术提升手术精度与安全性?

天津汇柏科技有限公司

人工智能 机器人 AI 人工智能

Coze工作流+DeepSeek模型,躺着管理100个账号的终极秘籍

测试人

人工智能

当东哥开始卷外卖:奶茶砍半价比拼多多还狠!附京东面试题

王中阳Go

面经 京东

WebGIS 开发框架及性能

北京木奇移动技术有限公司

软件外包公司 webGIS开发 webGIS软件外包

解决方案评测|告别复杂配置!基于阿里云云原生应用开发平台CAP快速部署Bolt.diy

Geek_b7ce72

人工智能与智能教育:AI如何帮助实现个性化学习与在线教育的未来?

天津汇柏科技有限公司

人工智能 AI 人工智能

GPUStack v0.6超重磅更新:vLLM多机分布式、昇腾MindIE、模型兼容性检测、模型故障自动恢复,上百项增强打造最好用的模型推理平台

GPUStack

人工智能 大模型 模型推理 生成式AI GPU集群

企业AI落地指南系列文章:AI应用开发平台选型六大核心评估维度

UniverAI智宇苍穹

评估标准 开发平台 AI工程化 企业 AI 应用 AI落地

演讲实录:中小企业如何快速构建AI应用?

阿里云大数据AI技术

人工智能 云计算 大数据 阿里云

等保二级测评国家标准详解

黑龙江陆陆信息测评部

Python 实战 | 1688 商品详情 API 接口调用全流程解析

tbapi

1688商品详情接口 1688API 1688数据采集 1688商品详情采集

Go Context 最佳实践

俞凡

golang 最佳实践

三级等保的法定审核周期与形式

黑龙江陆陆信息测评部

行业热点丨可持续建筑新纪元:GFRP如何重塑混凝土的未来

Altair RapidMiner

仿真 hyperworks GFRP 建筑仿真软件 可持续建筑

从被动救火到主动预防,StarRocks 监控与告警全攻略

StarRocks

数据库 数据处理 StarRocks 数据查询 物化视图

数据分析与AI|面对 RapidMiner 一万多行汉化翻译难题:中国工程师如何直接实现自动翻译?

Altair RapidMiner

AI 数据分析 RapidMiner 人工智能平台

案例分享|基于 Altair SimSolid 的大型通用工装结构力学仿真分析及试验对标

Altair RapidMiner

仿真 CAE 有限元仿真 SimSolid 无网格技术

(JS实现编辑DWG)AI实现网页CAD多行文本开发

WEB CAD SDK

AI编程 网页CAD 在线CAD AI协助CAD二次开发

强强联合,智见未来:麦杰科技将携手视源股份亮相数字中国,以“集团级生产管理平台”赋能数实融合

麦杰研究院

GPUStack v0.5:模型Catalog、图生图功能上线,多维优化全面提升产品能力与使用体验

GPUStack

人工智能 大模型 模型推理 生成式AI GPU集群

强强联合,智见未来:麦杰科技将携手视源股份亮相数字中国,以“集团级生产管理平台”赋能数实融合

麦杰科技

Web3项目开发框架及性能

北京木奇移动技术有限公司

软件外包公司 web3开发 web3外包公司

快速理解 MCP(模型上下文协议)核心价值

柯杰

MCP

过去一年的工作总结

yuanyxh

JavaScript 总结 前端

WebGIS 开发框架的调试工具

北京木奇移动技术有限公司

软件外包公司 webGIS开发 GIS开发

大胆试错、持续推进,拓展 GenAI 在客户服务领域的新场景

亚马逊云科技 (Amazon Web Services)

WebGIS 开发的性能优化

北京木奇移动技术有限公司

软件外包公司 webGIS开发 webGIS软件外包

可信编程 – Rust语言开发的实践和愿景_架构_施尧_InfoQ精选文章