了解和理解编译器构造的优点是什么?


10

我是软件工程专业三年级的本科生。从今年开始,我的大学推出了一门名为“编译器构造”的新课程,该课程向您教授构建编译器理论的基础知识。

对于学习编译器构造的软件工程师来说,现实世界的优势是什么?


2
尽管我绝对不后悔参加编译器课程,但这是我有史以来最艰难的一次。大多数CSci课程要么具有必须学习的重要理论,要么具有大量编程知识,而不是两者兼而有之。编译器兼有。
David Thornley


1
我也是在三年级的时候在大学念书的。-是我在整个课程中学习的第二好的模块(仅次于AI)。
TWith2Sugars 2011年

@ TWith2Sugars:您为什么要说CC是最好的之一?
Nipuna 2011年

1
一分钱在课堂上对我来说掉了好几次-再加上一位引人入胜的讲师和像样的同学使我感到非常满意。我记得其中一刻是我们从一开始就开始做语法表达式,而讲师说“这要等到第二学期才有意义”-第二学期是我们开始构建其余的编译器时(1'st术语,我们构建了一个解析器/令牌器)。对我来说,这是一个很棒的模块。
TWith2Sugars 2011年

Answers:


12

学习编译器构造有实际方面。在很多情况下,我都需要构建解析器来实现一些特定于应用程序的命令语言。它使我能够创建灵活,可编写脚本的应用程序界面。

它还使您可以更好地了解为什么某些语言是按其原样设计的,以及为什么没有一种语言是完美的。

这是一门艰难的课程,是课程中最艰难的课程之一。我在暑假上犯了一个错误。切勿在夏季课程中参加编译器课程,否则您的大脑会爆炸。


5
+1使大脑爆炸。另外,在学期末之前不要推迟编写编译器!我从经验中知道...
Jeremy Heiler 2011年

20

哦,是个好人。接受它,您将不会后悔。

您将了解编程语言的魔力,它们的比较特性,将高级代码转换为可执行代码的方式。您将更好地理解许多语言功能,将对可能的事物以及这些事情的完成方式有更广泛的了解。您将用不同的眼睛看到所有这些。

花时间在大学里学习CS的基本知识是明智的。具体的编程语言,工具和库都可以使用,但是基础仍然存在。

同样,如果您在课程中生存下来(前提是要认真的话),那么您可能会祝贺自己拥有适合编程的大脑。用这个理论完成一些实际的项目,在您的履历表中提到它,您将大大引起良好雇主的兴趣。


2
另外,它还使您可以洞悉什么是好/坏语言,这是此处的常规主题。
JBR威尔金森2011年

8

绝对!

例如,它可能不是像数据库类那样每天都会使用的主题,理解编译器将为您提供良好的基础。

一个类似的例子是操作系统类。您可能是一名程序员,并且没有考虑过操作系统的日常工作,但是从长远来看,扎根于操作系统将为您提供帮助。


2
我的本科操作系统课程是我必须真正了解并发性的第一部分。这非常实用。当我们编写解析器时,我的本科编程语言课程是最好的。
justkt 2011年

出于某种原因,在我3年的去除OS模块:(真正想要做的一样好。
TWith2Sugars

6

是! 本课程将使您对解析编程语言,数据类型和函数以及如何将其转换为特定CPU的机器代码有更深入的了解。

就其本身而言,这可能并不是日常实用的工具,但是它将使您确信您实际上知道东西是如何工作的。当您必须进行低级优化并查找那些真正令人讨厌的错误时,这非常有帮助(请在此处与经验交流),其他人都很困惑。


4

如今,有关领域特定语言的讨论越来越多。他们确实值得所有人关注,他们的真正潜力尚待探索。因此,编译器的构建技能在将来不仅将变得很重要,而且将变得至关重要。即使当前的问题根本不与编译器直接相关,我仍将大约60%的开发时间用于实现eDSL编译器。


eDSL编译器是什么意思?
Nipuna 2011年

1
当我使用支持元编程的语言时,我实现的每种嵌入式领域特定语言实际上都是一个编译器宏。有些比较复杂,具有自己的类型系统和大量的转换过程,有些则微不足道,但都是编译器。除非真正需要口译员,否则毫无意义。
SK-logic

1

值得学习一门课程,以了解您将在整个编程职业中使用的工具(例如,编译器,解释器,解析器)是如何构建的,并且存在哪些限制。

在学术环境中这样做也是值得的,因为它揭示了有趣的基础知识,而不是现实世界的许多复杂性,这在处理传统语言和体系结构(即很多复杂性)时是混乱且陷入困境的。与在行业中编写一个完整的编译器相比,在课程中构建一个完整的编译器的所有方面也更有可能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.