javascript - TypeScript 100.0% 是如何用 TypeScript 编写的?

标签 javascript typescript compiler-construction

TypeScript repository on GitHub根据 GitHub 的说法,存储库仅包含 100.0% TypeScript (.ts 文件)

enter image description here

它是如何工作的?以及 TypeScript 如何自行将自身编译为 JavaScript?

最佳答案

这叫做 compiler bootstrapping并且由于多种原因而很常见,其中最重要的是您正在编写的语言通常是最适合理解您正在使用您正在编写的语言实现的概念的语言...

如果您看一下这篇文章,大多数主要语言都有自托管编译器(C、C++)。这样做意味着您正在通过新编译器运行大量代码,这是一个很好的功能测试。在通常情况下,您编写编译器是因为您想要一种比当前语言有一些好处的新语言,因此在编写编译器时能够利用这些好处是很有意义的。

第一遍必须用现有的语言编写,但是一旦有了编译器,就可以用它来编译下一个修订版,依此类推。显然,这将您的编译器限制为仅使用 n-1 修订版中的功能,但由于您控制编译器,这应该是一个小问题。引用维基百科:

The main parts of the C++ compiler clang were written in a subset of C++ that can be compiled by both g++ and Microsoft Visual C++.

由于 TypeScript 是 JavaScript 的超集,因此编译器(理论上)可以用共享语法编写并在任一语法下编译。我不相信这里是这种情况,但这种关系确实为您提供了初始编译器的良好起始语言。

关于javascript - TypeScript 100.0% 是如何用 TypeScript 编写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39235612/

相关文章:

javascript - JS Discord 机器人获取角色

javascript - 使用 $and 和 $in 运算符过滤 mongodb 中标签组的项目时出现问题

typescript - 如何在 tsconfig.json 上启用 typeRoots 的 typescript/expressjs 应用程序上运行 jest

javascript - 查找回文逻辑中的边缘情况

c - 你如何解析悬垂的其他东西?

JavaScript 无法识别所需输出的反斜杠

javascript - 正则表达式 使用 OR ( | ) 时非捕获组

angular - Observable.combineLatest 即使失败也会继续

linux - 如何测试你的 Linux 是否支持 SSE2

compilation - 解释器如何翻译 for 循环?