kickstart - 一键生成项目模板的命令行工具
这是一款集成式的项目模板生成工具。集成了各种项目模板,并且可以创建自定义模板。
https://github.com/Keats/kickstart
Rust的增量编译的目前状态
这篇文章讨论了Rust编译器的增量编译架构,这是Rust社区为了提高编译效率和支持IDE实时反馈所采取的一种创新设计。传统编译器依赖于固定的流水线结构,而Rust则采用了基于查询的模型,通过动态调用查询来处理程序属性并实现增量编译。
主要内容总结:
-
增量编译的需求
Rust语言的模块化设计(如"crate"的使用)使得传统的文件级增量编译无法满足需求。因此,Rust开发团队从2016年开始重构编译器以支持更细粒度的增量编译。 -
基于查询的模型
- Rust编译器以查询为核心,例如
type_of()
查询用于推断局部绑定的类型。 - 查询可以通过从磁盘缓存中检索结果或根据其他查询动态计算结果。
- 这种机制类似于构建系统,利用依赖关系跟踪和结果缓存来减少重复计算。
- Rust编译器以查询为核心,例如
-
工作机制
- 当代码发生更改时,只有与更改相关的查询会被重新计算,极大地减少了编译开销。
- 查询的结果被序列化并存储在磁盘上,通过计算哈希值避免不必要的重新计算。
-
技术挑战与优化
- 为了支持增量编译,Rust需要为内部ID提供稳定的表示形式,例如通过路径(如
std::collections::HashMap
)来识别函数和类型定义。 - 哈希计算虽然高效,但增加了编译器的开销。
- 编译器运行结束后会遍历查询图,确保缓存的完整性,从而支持未来的增量编译。
- 为了支持增量编译,Rust需要为内部ID提供稳定的表示形式,例如通过路径(如
-
现状与展望
- Rust的增量编译功能已经稳定,成为开发构建的默认选项,但出于安全性考虑,发布构建中默认关闭。
- 这一复杂但高效的架构是否会被其他编程语言采用仍需观察。
总的来说,Rust通过查询模型显著优化了编译效率,为现代编译器架构提供了新的思路。
https://lwn.net/Articles/997784/
async 闭包已经稳定了
此PR已合并进入rust仓库主分支。
https://github.com/rust-lang/rust/pull/132706
--
From 日报小组 Mike
社区学习交流平台订阅:
1
共 0 条评论, 1 页
评论区
写评论还没有评论