【问题标题】:How can CoffeeScript be written in CoffeeScript?如何用 CoffeeScript 编写 CoffeeScript?
【发布时间】:2011-09-06 19:05:43
【问题描述】:

所以作为一个没有 javascript 经验的新 web 程序员(背景主要是 C、C++ 和 Python)(或希望体验它,基于我所看到的),我一直在对 CoffeeScript 进行一些前期研究,现在真的很喜欢我所看到的。我注意到一个很酷的细微差别是 CoffeeScript 是用 CoffeeScript 编写的,这很酷……但我真的不明白这怎么可能。不幸的是,我在上一门高级计算机科学课程中选择了网络安全而不是编译器。

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

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

【问题讨论】:

  • 请注意,您需要熟悉 Javascript 才能在 CoffeeScript 中编码,因为所有运行时错误都指向编译后的源代码。
  • 重新术语:您可以说 CoffeeScript 编译器是从其原始 Ruby 实现引导。您也可以说 CoffeeScript 语言是自托管
  • Bootstrapping a language的可能重复

标签: compiler-construction coffeescript interpreter bootstrapping


【解决方案1】:

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

可以使用Language X 的编译器来编译具有更多功能的更新版本。它叫bootstrapping

顺便说一句,如果您想了解有关编译器的更多信息,尽管您错过了 uni,请查看 Learning to write a compiler — 具体来说,the Dragon Book

【讨论】:

  • 我以前听说过 Bootstrapped 这个词,但对它没有真正的清晰理解。这真的很有趣,感谢伟大的链接,我会做一些关于引导的阅读。我也听说过龙书,也在 SO 上阅读“必须阅读编程书籍”的威胁,我将不得不检查一下
  • 我同意马特的观点。但是,如果你想学习 Coffeescript,我强烈建议你先学习 Javascript。对于来自不同语言背景的人来说,它可能看起来有点陌生,但它的概念(如函数和原型库)对于各种软件/应用程序解决方案和框架都很有用。再次,Coffeescript 编译为 Javascript。因此,很明显,隐藏在 CS 中的类和外观不同的概念之下,Javascript 的概念发挥了重要作用。并阅读 The Dragon Book 以了解编译器的工作原理。
【解决方案2】:

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

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

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

git checkout lib && bin/cake build:full 是在使用核心语言时运行的好命令。它将刷新lib 目录(以防您破坏了某些东西),构建您更改后的编译器,使用它来重建自身(一个良好的健全性测试),然后运行所有测试。如果他们通过了,那么您很有可能已经成功进行了更改。

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

【讨论】:

  • 希望我能多点赞,谢谢你提供语言细节。
猜你喜欢
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2012-01-22
  • 2018-11-30
相关资源
最近更新 更多