CoffeeScript如何用CoffeeScript编写?

Hor*_*ein 38 compiler-construction bootstrapping interpreter coffeescript

因此,作为一个新的Web程序员(背景mostely在C,C++和Python),没有JavaScript的经验(或渴望体验一下吧,根据我所看到的),我一直在做CoffeeScript的一些前兆研究,我真的喜欢什么我知道了.我注意到的一个很酷的细微差别就是CoffeeScript是用CoffeeScript编写的,这很酷......但我真的不明白这是怎么回事.不幸的是,在我上一期的高级计算机科学课程中,我选择使用网络安全而不是编译器.

我听说有人在目标语言编写语言使用现有的编译器用于该语言来诠释,但我不能挖就如何实现这一可能的工作,因为这是第一次执行的任何信息.

我的猜测是,可能照顾放下一些初步框架的构建的嵌入式shell脚本的自我指涉的(没有这个词形容恰当这种行为?)语言?

Mat*_*all 45

这不是什么新鲜事.C编译器是用C语言编写的.Python是用Python编写的.

可以使用编译器Language X来编译自身的更新版本,具有更多功能.它叫做bootstrapping.

顺便说一句,如果你想了解更多关于编译器,尽管在大学已经错过了,看看学写一个编译器 -具体而言,龙书.


Tre*_*ham 42

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

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

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

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

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

  • 希望我能更多地投票,谢谢你提供语言细节. (3认同)