CoffeeScript如何用CoffeeScript编写?

时间:2011-06-02 03:39:09

标签: compiler-construction coffeescript interpreter bootstrapping

因此,作为一名新的网络程序员(背景是C,C ++和Python中的背景)没有javascript经验(或者希望体验它,基于我所看到的)我一直在做一些关于CoffeeScript的前期研究。真的很喜欢我所看到的。我注意到的一个很酷的细微差别就是CoffeeScript是用CoffeeScript编写的,这很酷......但我真的不明白这是怎么回事。不幸的是,在我上一期高级计算机科学课程中,我选择使用网络安全而不是编译器。

我听说有人用目标语言编写语言来解释使用该语言的现有编译器,但我无法挖掘任何关于这可能如何工作的信息,因为这是第一次实现。

我的猜测是一个嵌入式shell脚本,它可能会为构建自引用这个术语是否正确描述这种行为?)奠定了一些初始框架。 em>语言?

2 个答案:

答案 0 :(得分:46)

这不是什么新鲜事。 C编译器用C语言编写。Python has been written in Python

可以使用Language X编译器编译自身的更新版本,具有更多功能。它被称为bootstrapping

顺便说一句,如果你想了解更多关于编译器的信息,尽管错过了大学,请看看Learning to write a compiler - 具体来说,the Dragon Book

答案 1 :(得分:42)

马特的答案非常好。让我详细说明一些特定于CoffeeScript的信息:

CoffeeScript编译器的原始版本是用Ruby编写的,但它于2010年2月21日转换为CoffeeScript for v0.5.0。

实际上,自举编译器可以通过不断变化的语言使事情变得困难,因为编译器必须被重写以适应这些变化。官方文档中的这一段让您对所涉及的挑战有所了解:

  当您使用核心语言时,

git checkout lib && bin/cake build:full是一个很好的命令。它将刷新lib目录(如果你破坏了某些东西),构建你改变的编译器,用它来重建自己(一个很好的健全性测试),然后运行所有的测试。如果他们通过,你很有可能做出成功的改变。

lib目录包含CoffeeScript编译器的已编译JavaScript(得到了吗?),在引导过程中提供了一个有用的中介。由于编译器的CoffeeScript代码从不直接在上运行,因此可以更容易地对语言进行重大更改。