因此,作为一名新的web程序员(背景是C、C++和Python),我没有javascript经验(或基于我所看到的经验),我一直在CoffeeScript上做一些前兆研究,我真的很喜欢我看到的东西。我注意到的一个很酷的细微差别是CoffeeScript是用CoffeeScript写的,这很酷.但我真的不明白这怎么可能。不幸的是,在我上次的高级计算机科学课程中,我选择了网络安全而不是编译器。
我听说过有人用目标语言编写语言来使用现有的编译器来解释该语言,但由于这是第一个实现,所以我无法找到任何关于该语言如何工作的信息。
我猜是一个嵌入的shell脚本,它可能会为构建self-referential提供一些初始框架(这个术语是否恰当地描述了这种行为?)语言?
发布于 2011-06-02 03:45:46
这不是什么新鲜事。C编译器是用C. Python是用Python编写的编写的。
可以使用Language X编译器来编译新版本的自身,并提供更多的功能。它叫自举。
顺便说一句,如果您想了解更多关于编译器的知识,尽管错过了uni,请看一看学习编写编译器 --特别是龙书。
发布于 2011-06-02 19:50:06
马特的回答很好。让我详细介绍一些特定于CoffeeScript的信息:
CoffeeScript编译器的原始版本是用Ruby编写的,但是在2010年2月21日,它被转换为0.5.0版本的CoffeeScript。
作为一件实际的事情,引导编译器会使不断变化的语言变得困难,因为编译器必须被重写以适应这些更改。官方文档中的这一段让您对所涉及的挑战有了一些了解:
在使用核心语言时,
git checkout lib && bin/cake build:full是一个很好的运行命令。它将刷新lib目录(万一您弄坏了什么),构建您修改过的编译器,使用它重新构建自己(一个良好的正常测试),然后运行所有的测试。如果他们通过了,很有可能你已经做了一个成功的改变。
lib目录包含CoffeeScript编译器的编译后的JavaScript (明白吗?),在引导过程中提供了一个有用的中介。由于编译器的CoffeeScript代码从来不直接在自身上运行,这使得对语言进行中断更改变得更加容易。
https://stackoverflow.com/questions/6210105
复制相似问题