在LLVM上引导语言

时间:2010-01-05 20:46:32

标签: c llvm bootstrapping

我在LLVM之上引导编程语言编译器。目前我大部分时间都在为自编译的C子集编写编译器。当我完成这项工作后,我将从C语言中引导我的语言,保持自我编译。

由于编译器是自编译的,我使用的C的任何功能都必须实现。所以这是一个恒定的平衡:如果我使用太多的功能,我将不得不实现比我想要的更多,但如果我没有实现足够的功能,那么编写代码将很困难。

一个这样的功能是LLVM绑定。在没有LLVM C绑定的情况下生成LLVM中间表示很困难。但是,如果我使用LLVM绑定,当我离开C时,我必须再次实现它们。

我在这里遇到一些困难,所以我一直在寻找其他解决方案。有什么想法吗?

3 个答案:

答案 0 :(得分:10)

您可以使用LLVM C绑定,但这需要您的语言了解足够的C来执行此操作。

另一种方法是写出LLVM汇编语言(文本文件)并使用llvm-as将其转换为bitcode。

<小时/> 编辑:

我重新读了你的问题,我想你已经理解了llvm-as与绑定的东西。

您的语言可能希望无论如何都能够绑定到C以获得支持库等。现在使用C绑定并在进一步编写时编写自己的绑定。

答案 1 :(得分:5)

答案 2 :(得分:1)

在某些时候,您可能希望提供一个API来将C库包装为扩展模块。 LLVM可能已经支持这个(我知道parrot vm会这样做)。为什么不使用您使用的任何扩展系统来包装LLVM自己的API?他们也可能已经支持了这一点。 :)