我对 Crystal 编程语言感兴趣,但我有点困惑:
The compiler is written in Crystal.
我知道您可以引导一种语言(自己编写),但您仍然需要一些其他语言的代码,以便您可以运行编译器/解释器。我还在Crystal 存储库上搜索了一些不是 Crystal 源代码的代码,但我只找到了llvm-ext.cc文件,它似乎无法处理整个语言。
所以,我的问题是:Crystal 是否只是一种语言规范,是否需要您拥有其他(非官方)编译器?
1 回答
除了 Crystal 文档推荐的编译器之外,不需要其他编译器,它是 Crystal 前端到 LLVM 的编译二进制文件和 LLVM 的二进制文件,以便从 Crystal 源代码编译程序,包括 Crystal 前端。Crystal 不仅是一种语言规范;它是一种可运行的编译语言,具有自托管前端。
为 Crystal 或任何编译语言编写新的编译器前端是可能的,但困难且不一定实用,以便通过不同的方法提供语言。困难且通常不切实际的证据是,许多语言只有一种当前实现,而具有多种实现的流行语言通常每个编译器套件最多只有一个前端。
为了提供一种“从无到有”的语言,而不是依赖于现有的编译器或解释器,可以通过在表中查找机器代码指令并将它们逐字节输入计算机的方法来编写编译器。这是一种极其困难的编程方法,我的证据是个人经验,我用这种方法编写了大约 10 个字节长的程序,而这些程序并没有做太多事情。我用其他方法编写了更长的程序,对程序所做的事情有更多的选择,而且没有那么大的困难。
自 2013 年 11 月起并持续到 2017 年,Crystal 只有一个自托管编译器前端来实现其实施。在此之前,Crystal 是由一个用 Ruby 编写的前端实现的。Ruby中的前端是用Crystal重写的,然后用Ruby中的前端从Crystal源代码编译前端。这就是导致 Crystal 拥有自托管前端的引导过程。
参考:
再见 Ruby Thursday — Crystal 启动的公告