这是我最近想到的一个问题。作为一名计算机工程专业的学生,我想知道计算机科学或计算机工程的哪些领域特别关注编译器,原因是:
我将在一个有不同专业的教师学习:
- 计算机(CPU架构,操作系统,计算机网络,实时系统和其他一些硬件问题,我喜欢的那个)
-Software(软件架构,数据库设计,Web服务,高级编程概念,分布式系统......)
- 计算机科学(算法,逻辑,图形,人工智能......一切都纯粹是理论上的,我猜)
最后一个专业化有一个叫做“编译器”的主题,所以这里是我的问题:只是编译器而且只与逻辑,算法和类似的东西有关吗?有没有机会自己学习涉及编译器的所有内容,或者从另一个角度来面对它?还有其他专业专注于它们吗?
谁能给我一个关于这个问题的一般看法?
答案 0 :(得分:1)
编译器位于CS的几乎所有分支的交叉点。虽然他们从一些特定的学科中汲取了很多东西,但构建一个好的编译器需要很好地理解CS的众多分支。
编译器的前端利用了形式语言理论(常规语言,正则表达式,有限自动机,语法,解析等),理论CS(类型系统)和许多其他学科的技术。还有语言设计和实现的问题,这通常是系统编程和理论CS的交叉。
代码生成器依赖于对机器实际工作方式的深入理解。您需要熟悉内存布局,寄存器,汇编指令,处理器流水线等。
编译器优化通常具有强大的理论基础(控制流图,满足半格,传递函数,图着色等),但是受实际关注(并行性,分支预测等)的驱动。
还有关于语言运行时的问题,例如垃圾收集,动态优化等。这些需要一些强有力的理论保证,但肯定也是系统问题的挑战。
甚至还有一些AI技术出现:一些全局流分析使用通过机器学习调整的数据结构,而超优化有时可以通过使用马尔可夫链蒙特卡罗技术来实现。
希望这有帮助!