TypeScript 100.0% 是如何用 TypeScript 编写的?
How is TypeScript 100.0% written in TypeScript?
在 TypeScript repository on GitHub 中并根据 GitHub,存储库仅包含 100.0% TypeScript (.ts 文件)
它是如何工作的?以及 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 的超集,编译器可以(理论上)以共享语法编写并在任一语法下编译。我不相信这里是这种情况,但这种关系确实为您提供了初始编译器的良好起始语言。
Typescript 是自托管的,并维护其自身的最后一次发布 (LKG) 版本以编译下一个版本。当前 (30/08/2016) 该版本位于 lib
目录中。
我只是想补充一些我认为有趣的东西。
在 git 中,您可以拥有一个名为 .gitattributes. Github has a project called linguist which can make use of that file for their language details section in every repository. In the typescript repo there is a .gitattributes 的文件,其中包含以下内容:
*.js linguist-language=TypeScript
* -text
你可以 fork 打字稿回购,删除那个文件,提交到 github 并等待一段时间,而他们的 repository analysis job completes and the language graph will change.
在 TypeScript repository on GitHub 中并根据 GitHub,存储库仅包含 100.0% TypeScript (.ts 文件)
它是如何工作的?以及 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 的超集,编译器可以(理论上)以共享语法编写并在任一语法下编译。我不相信这里是这种情况,但这种关系确实为您提供了初始编译器的良好起始语言。
Typescript 是自托管的,并维护其自身的最后一次发布 (LKG) 版本以编译下一个版本。当前 (30/08/2016) 该版本位于 lib
目录中。
我只是想补充一些我认为有趣的东西。
在 git 中,您可以拥有一个名为 .gitattributes. Github has a project called linguist which can make use of that file for their language details section in every repository. In the typescript repo there is a .gitattributes 的文件,其中包含以下内容:
*.js linguist-language=TypeScript
* -text
你可以 fork 打字稿回购,删除那个文件,提交到 github 并等待一段时间,而他们的 repository analysis job completes and the language graph will change.