我们应该知道多少编译器?

Dec*_*ira 10 compiler-construction

为了编写更好的代码,深入了解编译器的作用是否值得?

多少就足够了?我不是一个擦洗器,但我在想,了解编译器的运行方式会让我成为更好的程序员.我错了吗?

如果是这样,您会推荐哪些资源?

coo*_*ird 20

知道编译器如何优化代码,但不要为编译器编写代码,而是写给人们阅读,可能不会有什么坏处.

以更适合编译器的方式编写代码可能会使人们更难以阅读它,现在编译器可能更了解为您优化代码.


dmc*_*kee 10

在没有任何有效性证据的情况下,我觉得更好地了解我的代码会发生什么,因为我只知道编译器和一些汇编.通过阅读Jack Crenshaw的Let's Build a Compiler,你可以学到很多东西.

如果您发现自己感兴趣,那么您可能会研究更复杂的编译器方法.


编辑:值得注意的是,许多不需要"编译器"的问题仍然最好由编译器方法提供.解析任何适度复杂的命令语言都是编译器问题,即使您没有编写可执行文件也是如此.


编辑2:许多通常的文本对编译器问题采取了相当抽象的数学方法,这可能会让人感到恐惧或困惑.Crenshaw教程采用了"开始敲击代码"的方法,该方法由作者更加微妙的理解提供信息.很好的介绍,但如果你是认真的,你应该跟进一个更正式的研究.


tva*_*son 2

我认为每个程序员都应该对编译器如何将高级代码转换为机器指令、可以执行的优化、内存如何工作以及代码如何在硬件上执行有基本的了解。我认为了解这一点有助于您更好地了解程序的性能,并且可以帮助您做出更好的实施选择。

您是否能够实际编写机器代码或确切地知道您的系统使用什么虚拟内存架构可能并不重要,但我认为这些概念的基本概念很重要。

编辑

例如:C 编译器以行主格式将数据存储在数组中,因此您应该迭代多维数组,首先改变最高维度(最右边的索引),然后继续到最低维度(最左边的索引)。Fortran 的做法恰恰相反,以列主格式存储数组。这意味着在 Fortran 中,您应该首先改变最低维度,然后再改变最高维度。这将提高代码的缓存命中率,并显着提高大型多维数组的性能。