原创 图解 Rust 编译器与语言设计 | Part 1 :Rust 编译过程与宏展开

发布时间:2021-06-24 16:32:18 浏览 428 来源:猿笔记 作者:Rust_Magazine

    《图解Rust编译器与语言设计》系列文章特点,是为了帮助开发者从整体结构、语义层面来掌握Rust编译器与语言设计。并且Rust基金会也已经进入了最后都流程,为什么国内社区不能为Rust多做点实质性的贡献呢:然后社区里的朋友就帮我做了一个计算,但其实这个Flag我并没有打算个人完成。而是想推动社区对Rust感兴趣对朋友一起完成,那么这个1000个PR的Flag就轻松完成了。1.组织社区力量来翻译官方的《Rust编译器开发指南》,并且将在此过程中自己的学习和经验沉淀为《图解Rust编译器与语言设计》系列文章,人家搞编译器的都是PL出生。


    #主题列表:juejin,github,smartblue,cyanosis,channing-cyan,fancy,hydrogen,condensed-night-purple,greenwillow,v-green,vue-pro,healer-readable,mk-cute,jzman,geek-black,awesome-green,qklhk-chocolate

    #投稿主题:

    theme:juejin

    highlight:

    作者:张汉东

    ##说明

    《图形Rust编译器与语言设计》系列文章特色;

    1.重点插画。插图的目的是帮助开发者从整体结构和语义层面掌握Rust编译器和语言设计。

    2.练习总结,不一定每个月都要,但是要努力。

    3.希望大家一起写,不过我只是抛砖引玉。硬骨头,一起嚼。

    ##引子

    想必读者朋友们已经看到了《Rust Daily》上的新闻:微软、亚马逊、Facebook等巨头都在组建自己的Rust编译器团队,这些团队都是以Rust语言为战略导向的。而且Rust基金会已经进入了最后的流程,所以我们可以猜测这些巨头很有可能加入了基金会。

    在RustChinaConf2020大会分享的《锈病的五年》中,我指出锈病是在过去的五年中发展起来的。Rust虽然势头不错,但大部分贡献其实是国外社区带来的,而国内社区则处于学习观望状态,等待所谓杀手级应用的出现,引领Rust的“流行”。为什么国内社区不能对Rust做出更实质性的贡献?

    所以,2020年新年来临时,我定一个五年旗:五年内给Rust语言发1000 PR。

    然后小区的朋友给我算了一下:五年1000,然后每年200,然后一天0.5。也有朋友说Rust的PR审核周期每次都很长。就算你一年能筹到200个PRs,政府也给不了你那么多兼并。

    这个计算真的很合理。这个目标真的很难实现。但其实我并没有打算亲自完成这个旗子,而是想推动社区对Rust感兴趣,和朋友一起完成。如果我能在五年内推广1000人参与,那么每人只提交一份PR,那么1,000 PR的旗帜就可以轻松完成了。

    因此,为了完成这面旗帜,我把未来五年分为三个阶段:

    1.第一阶段:2021年。这个阶段的目标是“上路”。

    2.第二阶段:2022 ~ 2023年。这个阶段的目标是“高级”。

    3.第三阶段:2024~2025年。这个阶段的目标是“达标”。

    换句话说,今年是你想“上路”的一年。所以为了实现这个目标,我制定了以下计划:

    1.组织社区力量翻译官方Rust编译器开发指南。

    2.组织Rust编译器团队,开始为Rust语言做一些贡献,把自己在这个过程中的学习和体会沉淀成一系列题为《图形Rust编译器与语言设计》的文章。

    通过这两个文档,希望能帮助和影响更多的人为Rust语言做贡献。

    我知道编译器作为程序员的三大浪漫之一,水很深。你也可以说PL是人从事编译器的时候诞生的,普通人也有那种本事。可以想象,编译器很难。但幸运的是,困难并不意味着不可能。不,我们可以学习。另外,不是让你从零开始实现一个Rust编译器。

    对Rust语言的贡献不是由KPI驱动的,而是由兴趣驱动的。也许你已经读完了编译原理三大经典,龙书,虎书,鲸书,也许你已经实现了自己的一种语言。然而,它可能永远不会像实际参与像Rust这样的现代语言项目那样有回报。

    所以《图形Rust编译器与语言设计》系列文章,不仅记录了我自己对Rust编译器的学习,也记录了你的沉淀,如果你愿意贡献的话。在这个浮躁的世界里,给自己一片净土,找到技术的初衷。

    ##图解Rust编译过程

    对于学习,我一般是从整体和外围开始,去了解一个事物的全貌和结构,然后逐渐深入细节。否则很容易迷失在细节中。

    所以首先要了解Rust的编译过程。如下图:

    上图中间部分展示了Rust代码的整个编译过程,左右两边分别展示了过程宏和声明宏的解释过程。

    Rust语言是基于LLVM后端实现的编程语言。在编译器层面,Rust编译器只是一个编译器前端,负责将文本代码一步步编译成‘LLVM’(‘LLVMIR’)的中间代码,然后交给‘LLVM’最终编译生成机器码,所以‘LLVM’就是编译后端。

    # # #用###Rust语言编译的全过程

    1.rush文本代码必须首先通过“词法分析”阶段。

    将文本语法中的元素标识为对Rust编译器有意义的“条目”,即标记。

    2.词汇分析后,通过语法分析将词汇条目转移到“抽象语法树(AST)”。

    3.得到AST后,Rust编译器会对其进行语义分析。

    一般来说,语义分析就是查源过程

作者信息

Rust_Magazine [等级:3] 《Rust 中文精选》
发布了 15 篇专栏 · 获得点赞 80 · 获得阅读 7314

相关推荐 更多