近10年,摩尔定律逐渐失效,芯片性能已经摸到了天花板。功率消耗与优化的基石——编译器技术再次进入了人们视野,我们请到了鉴释研发负责人赖建新,通过通俗的语言与示例带大家走近编译器技术。
这次分享将分为共六个问题向大家介绍:
- 什么是编译器技术?
- 初学编译器技术的开发者需要具备哪些基础?
- 当今现代编译器的关键挑战是什么?
- 编译器中哪个部分最重要?
- 编译器技术除了生成代码在进程或VM中执行之外,是否还有其他领域使用编译器技术?
- 为什么数据流分析在发现程序问题(包括错误、安全漏洞等)方面更有效?
一、什么是编译器技术?
编译器技术与高级语言程序设计技术一同诞生,狭义的编译器技术是指将高级语言翻译成机器码。但倘若没有编译器的存在,那么程序员只能用机器码,这些由0和1组成的数字代码来编写程序,在如今庞大的软件体量里,这几乎是不可能完成的任务。
所以千万不要小看编译器,它自下而上贯穿了程序开发的全过程,从硬件到应用全都有它的存在。
除了常见的高级语言到机器码的编译器外,编译器技术还广泛应用于领域特定语言(Domain Specific Language, DSL)到通用编程语言的源到源编译器(例如区块链中智能合约编译器,Web开发中各种高级语言到JavaScript的编译器),高级语言解释器(例如Python)和虚拟机(例如Java VM和WebAssembly VM),以及二进制翻译(Binary Translation,例如Apple Silicon M1上的Rosetta 2)等领域。
随着现代软件规模不断增大,技术栈日趋复杂,只有充分利用编译器技术,才能在程序的正确性、稳定性、安全性、性能,代码的可读性、可维护性、可移植性和开发人员的开发效率等多方面取得更好的平衡