当前位置: 首页 > 科技观察

为什么每个程序员都应该学习代码编译器

时间:2023-03-15 20:57:39 科技观察

所有优秀的计算机科学学校都提供编译器课程,但相对较少的学校将其作为本科课程的必修部分。本文回答了这个问题:为什么需要学习编译器?即使您从未打算编写编译器。我写这篇文章的原因之一是,尽管我很喜欢本科生的编译器课程,但我几乎看不到它的实际应用。大多数材料似乎要么简单明了,要么深奥(事实上,我发现的大多数编译器材料都非常枯燥。)不管怎样,我花了几年时间总结了为什么这类课程如此有用的实际原因.理由如下。分析器和解析器无处不在认真的程序员必须了解分析器和解析器,因为我们并不总是只写小程序。每次编写可扩展程序或处理新型输入文件时,您都需要了解它们(分析器和解析器)。格林斯潘第十定律:“任何足够复杂的C或Fortran程序都包含一个临时的、半功能的、半规范的、错误的和非常缓慢的CommonLisp实现。”我们花了很多时间做这些事情,我们可以用一次性的小技巧来做这些事情,或者我们可以用60年的理论和实践知识来解决一个问题并把它做好。重要的是:什么时候应该借用现有代码或使用现有工具?什么时候理论知识有用?哪些语言设计原则可以应用到我们日常使用的小语言中呢?您最好编写正确的代码。编译器应该正确地将输入的语言翻译成合法的程序。为了实现这个目标,编译器开发人员必须了解整个输入语言,包括一些普通程序员没有见过的罕见问题。这个理解过程是迈向编程语言本质的重要一步,它与我们通常在编写代码时看到的不同。比如,在学习了序列点、未定义行为、常用算术转换等细节之后,我对C语言的理解彻底改变了。C编译器编写者掌握了这些概念,但大多数初级和中级程序员不知道这些概念。可以毫不夸张地说,一旦你了解了语言的本质,你就会以不同的方式更准确地思考它。这适用于任何语言,尤其是像C、C++这样语义不明确的语言。你可以写出更快的代码通过了解编译器,你可以清楚地知道哪些优化是编译器可以优化的,哪些是编译器不能优化的,不管它们看起来多么合理和简单。您将了解哪种代码通常可以构建最佳代码块、为什么会这样以及代码的作用。你就会知道为什么有些代码可以有更好的性能,比如FIRfilterusinghalfregisterbankcachefiltercoefficient和halfregisterbankcachesample,这和使用普通的优化器是不一样的。你和你最喜欢的编译器是一个创建快速代码的团队,你可以高效地使用这些代码,或者使用早期优化等毫无意义的技巧进行修改。其次,编译器后端与目标架构密切相关。当然,现代架构试图提供对汇编程序程序员友好的平台,而且它们离我们并不遥远。通过了解编译器后端及其生成代码的原因,您可以更好地了解计算机体系结构的运行方式。总结一个编译器(理论上)有三个部分:语言相关的前端(分析、类型检测)语言和目标无关的中间端(优化))目标相关的后端(生成机器代码)在这篇文章中,我有试图说服您理解编译器的每个部分都是有价值的——即使您将来不会实现或修改它们。原文链接:http://www.techug.com/why-take-a-compiler-course