「付费阅读」 如何为Rust语言做贡献
本文基于macOSX平台,通过对Rust 1.32 Nightly版本中rustdoc的一个ICE问题进行复盘,分析并记录整个Bug修复的过程。主要目的是,通过这个过程,来学习如何给Rust做贡献。
(阅读时间:17m)
缘起
Rust本地调试环境准备
ICE问题分析
调试代码
提交PR说明
cargo-inspect: 探索Rust内部的工具
之前介绍过这个库,今天看到该库作者写了篇文章,更详细介绍它的用法。
cargo-call-stack: 分析程序中的静态调用栈
官方嵌入式组老大japaric写的库。可以对整个程序做静态调用栈的分析,可以最终生成svg图片。调用栈分析结果还包含了栈的具体使用情况(以字节为单位),以及包括Max最大值。
在写一些对栈内存要求苛刻的程序,比如嵌入式,比较有用。
Rust 1.31.0 预览版 测试
Rust 1.31.0版本代表Rust 2018 edition的首个版本。
「博文」教你如何用Rust写C++
长文预警!
背景: Firefox有一个名为encoding_rs的新字符编码转换库。它是用Rust编写的,取代了1999年初发布的名为uconv的旧C++字符编码转换库。因为调用该字符编码转换库的都是C++代码,所以新的库,尽管用Rust编写,但是该库在C++调用者看来,应该像是一个现代的C++库。也就是说,提供给C++调用者的接口使它看起来和感觉就像一个真正的C++库。
(啊哈?假装写C++,你学到了吗?)
「CLI」indicatif: 命令行进度条工具
#cli #indicatif #color #progressbar
可生成各样且彩色的进度条,非常酷。就不上图了。
另一个轻量级的序列化框架:sval
未定义行为确实是未定义的
未定义行为是C/CPP中用来描述任何事情都有可能发生的状况。UB历史上涵盖了现有C编译器以不可调和的方式行事的案例。标准委员会以其无限的智慧决定:不做任何决定。UB也适合标准未能定义的行为假设。然而,这个概念很快又有了新的意义:UB代表了优化的机会。C/Cpp开发人员真的很喜欢优化,他们非常坚持要求编译器尽最大的努力来让代码快速执行。
文章里列出了很多C的未定义行为案例,告诫C/Cpp开发者应该尽量避免UB,或者,最好不要使用C/C++。
C数据结构转换为Rust只需要四步
作者在rust-and-c,展示了如何从较大的C程序中获取数据结构并将其转换为Rust代码。该git仓库中的每次提交都对应一个转换步骤:
- 将Cargo集成到makefile中
- 创建C库的Rust绑定
- 用Unsafe Rust实现替换掉C库
- 用Rust包装C API
最后,除了struct声明之外,实现是100%Rust。
每日新闻订阅地址:
欢迎通过GitHub issues投稿。