Compiler construction 学习如何构建编译器对程序员有益吗?

Compiler construction 学习如何构建编译器对程序员有益吗?,compiler-construction,Compiler Construction,当涉及到不同类型的程序员时,有很多种类。一般来说,程序员学习如何构建编译器是否有益?在什么情况下需要或不需要编译器编程 我是一名网络开发人员;我大部分时间都花在PHP和MySQL上。我不认为学习编译对我有多大好处 不同类型的程序员将获得不同程度的好处 有点没有答案,我知道…我认为,从知识的角度学习更好。至少您可以查看现有的编译器源代码,了解编译的每个阶段所涉及的典型编译步骤和复杂性。虽然很少有程序员最终不得不实现编译器,但编译器构建的早期阶段,也就是说,词法分析和解析是经常出现的事情:谁不必为一

当涉及到不同类型的程序员时,有很多种类。一般来说,程序员学习如何构建编译器是否有益?在什么情况下需要或不需要编译器编程

我是一名网络开发人员;我大部分时间都花在PHP和MySQL上。我不认为学习编译对我有多大好处

不同类型的程序员将获得不同程度的好处


有点没有答案,我知道…

我认为,从知识的角度学习更好。至少您可以查看现有的编译器源代码,了解编译的每个阶段所涉及的典型编译步骤和复杂性。

虽然很少有程序员最终不得不实现编译器,但编译器构建的早期阶段,也就是说,词法分析和解析是经常出现的事情:谁不必为一些奇怪的文件格式编写解析器呢?通常,在没有编译器构建经验的情况下,这些都很简单,可以管理,但并不总是如此。

我认为我在大学的编译器和语言理论课程对我对计算机语言的理解产生了巨大的影响,甚至十年后也是如此。但是我不确定我是否需要为此实现一个编译器。

编译器编程是一个有趣的话题,它有很大的价值。在我上的大学里,这是一门选修课,语言设计和实现。我个人很感激接受了它。我们学习了实现lexer、parser和字节码发射器的各种方法

我所看到的真正价值在于它照亮了我赖以启动和运行程序的黑匣子。它让我更好地了解了编译器的工作原理,并帮助我更好地理解编译器错误

将源代码编译成代码的过程实际上是大多数程序所做的一般性工作,即接受一些输入,执行一些过程,然后输出结果。编译器对如何最好地实现这一点有一些非常明确的想法


我认为这一切对我都是有益的,目前我正在开发基于Java的web应用程序。

编译器编程是多方面的,因为它包括将代码解析为逻辑树,然后将代码转换为另一种形式的代码。并可能在输入进入树后对其进行分析以进行优化

因此,从总体上讲,它将帮助每一位程序员,因为您知道如何更快地解释语句,或者如何编写预编译器来为您选择的语言生成宏。甚至只是如何比你的同事更好地解析平面文件


对于大多数没有编译器的基于脚本的语言,您将无法通过学习如何制作编译器来优化日常工作流程。但是您仍然能够理解解析。

是的,这是一个好主意。学习所有这些东西的工作原理只能使程序员受益。我已经用SX ASM编写了一个基本编译器,从中我学到了很多东西

不过,正如其他人所提到的,有很多程度的程序员和知识。主要研究标记和脚本语言的web开发人员可能不会像编写嵌入式系统软件的核心C或ASM程序员那样从中受益匪浅,但这并不是说它不是有用的知识


重新发明轮子对于教育价值总是有用的。

理解编译过程是理解计算机如何工作的一般方法,因此提供了广泛的理解范围。许多现代程序员在复杂的环境中工作,这些环境几乎不需要这种理解,至少在基本层面上是这样。java就是一个例子,它向开发人员隐藏了编译的链接步骤

知识就是知识,它几乎总是有用的。在我的例子中,我发现在进行性能增强时,理解编译过程非常有用,这是我的工作。(我在超低延迟环境中工作)

如果您使用PHP mySql完成所有工作,那就太棒了。只要记住,所有的技术都会过时,你需要了解下一件伟大的事情。拥有像理解编译这样的“常识”在你和那些不能适应的笨蛋之间提供了一个概念缓冲


学习如何学习。

我正在阅读《龙之书》(编者),在书的开头,你会收到以下信息:

虽然很少有人愿意 构建甚至维护一个编译器,用于 一种主要的编程语言 读者可以有益地应用这些想法 以及本书中讨论的技术 用于通用软件设计。对于 例如,字符串匹配 构建词汇表的技巧 文本中也使用了分析仪 编辑、信息检索 系统和模式识别 程序。上下文无关文法和 语法导向的定义已被删除 用于构建许多小语言 例如排版和图形 产生这种效果的绘图系统 书。代码技术 优化已在程序中使用 验证程序,以及 从中生成“结构化”程序 非结构化代码

简而言之,您不仅仅是在学习如何构建编译器。在此过程中,您将学习许多不同的低级技术,以帮助您进行日常编程。虽然有人说这是一本过时的书,但我仍然喜欢它,我会推荐它,尽管阅读可能会有点沉重。如果你确实得到了它,就要留出大量的时间来阅读和理解它。

这就像是在问“拥有更多编程知识对程序员有益吗?”。很简单,是的,这是有益的。它对日常的非编译程序事务有多大的好处很难猜测。但它肯定会教你如何理解你所做的