当前位置:  开发笔记 > 编程语言 > 正文

引导编译器:为什么?

如何解决《引导编译器:为什么?》经验,为你挑选了5个好方法。

我理解一种语言是如何自我引导的,但是我还没有找到很多关于为什么要考虑引导的参考.

直观的答案是您正在编写的语言提供了编译器的"基础"语言中找不到的实用程序,并且语言的功能相对非常适合编译器.

例如,引导C++编译器是有意义的 - 在正确使用OOP时,维护编译器可能要容易得多,而不是使用普通的C语言.

另一方面,MATLAB确实使矩阵数学比普通C容易得多,但我在MATLAB中编写MATLAB编译器/解释器时看不出任何明显的好处 - 看起来它的可维护性会降低.类似的视图可以应用于R编程语言.或者一个非常极端的例子是引导Whitespace,它是用Haskell编写的 - 绝对是一个巨大的超级空白集.

引导的唯一原因是利用新语言的功能吗?我知道还有"因为我们可以"的理由,但那不是我想要的:)



1> Daniel Earwi..:

有一个叫做"吃自己的狗食"的原则.通过使用工具,您可以证明该工具的实用性.

人们经常会问,"如果语言X的编译器不是用X语言编写的,那我为什么要冒险使用它呢?"

这当然仅适用于适合编译器编写领域的语言.


我认为我所使用的每一种*好*语言都是与使用它的程序一起设计和编写的.有时它是自己的编译器,有时不是,但编译器是一个很好的第一种情况.除了立即有用之外,编译器是一个非常复杂的程序(或者可以),如果你可以编写自己的编译器,它可能会吃早餐时更简单的问题!

2> rcoder..:

引导语言实现有两个主要优点:首先,正如您所建议的那样,在实现中利用所述语言的高级功能.但是,一个不太明显但同样重要的优点是,它允许您自定义和扩展语言,而不会陷入用C语言编写的较低层(或Java,或者新语言运行时下面的任何内容).

元编程可能对大多数日常任务没有用,但有时它可以为您节省大量的重复或样板代码.能够为高级语言挂钩编译器和核心运行时可以使高级元编程任务变得更加容易.



3> brice..:

Ken Thompson的信任信任思考解释了引导的最佳原因之一.从本质上讲,您的编译器会在引导链中为每个版本的编译器学习新的东西,您将永远不必再次教它.

在他提到的情况下,你编写的第一个编译器(C1)必须被明确告知如何处理反斜杠转义.但是,第二个编译器(C2)是使用C1编译的,因此本机处理反斜杠转义处理.

他演讲的基石是你可以教一个编译器为程序添加一个后门程序的可能性,并且使用受损编译器编译的未来编译器也将获得这种能力,并且它永远不会出现在源代码中!

从本质上讲,您的程序可以在每个编译周期中学习新功能,这些功能不需要在以后的编译周期中重新实现或重新编译,因为编译器已经了解了所有这些功能.

花一点时间来实现这些后果.

[编辑]:这是构建编译器的非常糟糕的方法,但很酷的因素是通过屋顶.我想知道它是否可以通过正确的框架进行管理?



4> 小智..:

它可以被认为是将"玩具"语言与"真实"语言分开的标准.如果语言不够丰富,无法实现,那它仍然是一个玩具.但考虑到今天用C语言实现的流行语言数量,这可能是一个过去很久以来的态度.


我不同意"玩具"与"真实"的分类.语言有用.有些是通用语言,如C,VB等,可用于发明自己.其他人,如MATLAB,专门用于解决特定类别的问题.这并不是他们的"玩具"语言,只是专门的.
一种语言甚至不需要Turing Complete来自行引导,因此条形非常低.

5> sepp2k..:

一个优点是,在编译器上工作的开发人员只需要知道正在编译的语言.否则,开发人员需要知道正在编译的语言以及编译器编写的语言.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有