写点什么

现代编译器程序员到底在做些什么?

作者:VectorizeOrz
  • 2025-11-01
    上海
  • 本文字数:975 字

    阅读完需:约 3 分钟

现代编译器程序员到底在做些什么?

第一次写编译技术相关的文章(>_<),想和大家分享一下:现代编译器程序员到底在做些什么?



为什么选这个主题呢?因为我相信大家肯定有这样的疑惑,像 GCC/LLVM 这些编译器以及大家平常写的 Java、Go 等语言的编译器都已经非常成熟了,那还需要编译器程序员做什么?当然不是这样。



要回答这个问题,我们先要了解一下编译器的结构,现代编译器一般分为前端中端后端,前端负责读入高级语言源代码,进行词法分析语法分析并生成中间代码(IR),中端对中间代码做目标机器无关的优化,后端对中间代码做目标机器相关的优化最终输出汇编或者是二进制。目标机器可以理解为我们平常说的 x86、ARM、RISCV 等不同架构的芯片。



如果我们只看前端和后端,会发现当前端对接的高级语言或者后端对接的芯片有变化时,编译器都需要有新的开发。这就代表了两类典型的编译器相关的工作。


  • 第一类:开发新的编程语言开发新的编程语言的时候,需要开发新的编译器,例如国内我知道的现在做编程语言的比较大团队有华为的仓颉和 IDEA 研究院的 Moonbit。


  • 第二类:自研新的芯片还有一类就是自研新的指令集的芯片的时候,也需要开发新的编译器。在国内这几年芯片创业的热潮下,这些公司就很多了,比如寒武纪摩尔线程这种。但是这里有个特殊的问题大家需要注意,即便是芯片的指令集一模一样,比如你设计一款兼容 ARM 指令集的芯片,但是因为你芯片的内部实现不一样,同样一条机器指令消耗的芯片资源可能不一样,那么编译器也要根据这些额外的特性做出调整,才能实现生成的机器指令最优。


  • 第三类:借助编译技术除了上面典型的这两类,还有一类就比较宽泛了。典型的编译器是将高级语言编译为汇编语言,但如果将这个概念放宽 ,只要是一种语言转换为另一种语言的都可以被称为编译器,因为本质都需要借助编译器相关的技术。第三类就是这种宽泛概念下的比较杂的编译器工作了,举点例子,我看到过有公司有需求将一种类 BASIC 的很古老的编程语言翻译到 Lua 然后跑在 LuaJIT 上想要提高性能,这种编译器也可以被称为转译器(Transpiler)。

还有近年来比较火的 AI 编译器,把 AI 模型的计算图编译为在 GPU 和 NPU 上运行的 Kernel,我认为也可以算在这类中。

现代编译器程序员的工作基本就在我说的这三类范畴里了,支持新语言,新芯片和其他借助编译技术的事情。


如果大家对编译器以及其他计算机底层技术感兴趣,喜欢我的文章的话,欢迎点赞关注我~ 我会持续输出优质内容 :)

发布于: 刚刚阅读数: 6
用户头像

VectorizeOrz

关注

INTJ | 编译器菜鸡 | 成为硬核程序员ing... 2025-08-10 加入

还未添加个人简介

评论

发布
暂无评论
现代编译器程序员到底在做些什么?_c++_VectorizeOrz_InfoQ写作社区