CoffeeScript如何在CoffeeScript中编写?
所以作为一个新的web程序员(背景是C,C ++和Python),没有javascript的经验(或基于我所见过的经验),我一直在做一些关于CoffeeScript的前期研究,我真的很喜欢我懂了。 我注意到一个很酷的小细微差别就是CoffeeScript是用CoffeeScript编写的,这很酷……但是我不太明白这是怎么可能的。 不幸的是,在我上一次的高级计算机科学课程中,我select了networking安全而不是编译器。
我听说有人用目标语言编写语言来解释使用该语言的现有编译器,但我不能挖掘任何有关如何工作的信息,因为这是第一个实现。
我的猜测是一个embedded式的shell脚本,可能会考虑为构build一个自引用 ( 这个术语是否恰当地描述这种行为?)语言的一些初始框架?
这不是什么新鲜事。 C编译器已经用C 编写了。Python已经用Python编写了 。
可以使用Language X
的编译器来编译自身的更新版本,并提供更多function。 这就是所谓的自举 。
- 引导一种语言
- 用自己的语言编写一个编译器
- 你怎么用这种语言编写一个语言的编译器?
- 引导一个编译器:为什么?
顺便说一句,如果你想了解更多关于编译器的知识,尽pipe错过了uni,看看学习编写一个编译器 – 特别是龙书 。
马特的回答非常好。 让我来详细介绍一些CoffeeScript特定的信息:
CoffeeScript编译器的原始版本是用Ruby编写的,但是在2010年2月21日它已经转换到CoffeeScript for v0.5.0。
实际上,引导式编译器可以用不断变化的语言使事情变得困难,因为编译器必须被重写以适应这些变化。 官方文档中的这一段让您对所涉及的挑战有所了解:
git checkout lib && bin/cake build:full
当你使用核心语言时,git checkout lib && bin/cake build:full
是一个很好的命令。 它会刷新lib
目录(万一你破坏了某些东西),build立你的改变的编译器,使用它重build自己(一个很好的理性testing),然后运行所有的testing。 如果他们通过,那么你很有可能已经做出了成功的改变。
lib
目录包含了CoffeeScript编译器的编译好的JavaScript(得到了?),在引导过程中提供了一个有用的中介。 由于编译器的CoffeeScript代码从不直接在本身上运行,因此更容易对语言进行重大更改。