这是我最近一直在思考的问题。作为计算机工程专业的学生,由于以下事实,我想知道计算机科学或计算机工程的哪些领域特别关注编译器:
我将在其中有一些不同专业的学院学习:
-计算机(CPU体系结构,操作系统,计算机网络,实时系统和其他一些硬件问题,我很喜欢)
-软件(软件体系结构,数据库设计,Web服务,高级编程概念,分布式系统...)
-计算机科学(算法,逻辑,图形,人工智能...我认为所有纯粹的理论知识)
最后一个专业有一个名为“编译器”的主题,所以这是我的问题:编译器是否仅与逻辑,算法和诸如此类的东西专门相关?是否有机会独自学习或从另一个角度去面对涉及编译器的所有知识?还有其他专业化专注于它们吗?
谁能给我关于这个问题的一般看法?
编译器几乎位于CS所有分支的交叉点。尽管它们大量地取材于一些特定的学科,但是构建一个好的编译器需要对CS的众多分支有很好的了解。
编译器的前端利用了形式语言理论(常规语言,正则表达式,有限自动机,语法,解析等),理论CS(类型系统)和许多其他学科的技术。还有语言设计和实现方面的问题,这些问题通常恰好在系统编程和理论CS的交集处。
代码生成器依赖于对机器实际工作方式的深刻理解。您需要熟悉内存布局,寄存器,汇编指令,处理器流水线等。
编译器优化通常具有强大的理论基础(控制流程图,满足半晶格,传递函数,图形着色等),但受实际问题(并行性,分支预测等)的驱使。
还存在关于语言运行时的担忧,例如垃圾回收,动态优化等。这些需要一些强大的理论保证,但也肯定会挑战系统问题。
甚至出现了一些AI技术:某些全局流分析使用通过机器学习调整的数据结构,而有时使用Markov链蒙特卡洛技术进行超优化。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句