向Julia添加通用代码生成后端有多难?

时间:2017-06-07 07:52:51

标签: compiler-construction llvm julia crystal-lang

code-genJulia的静脉中向go添加通用chez-scheme后端有多困难,即。没有LLVM。

LLVM是一种更好的方法吗 - 假设rustcrystal几乎完全是自托管的,他们可以利用LLVM发出二进制文件,甚至交叉编译。

有关背景信息,我在此处针对各种LLVM前端询问了code-gen的具体问题What are the issues faced while implementing a self-hosted language on LLVM?

2 个答案:

答案 0 :(得分:5)

朱莉娅确实有一种代码生成形式,就是它的类型化AST。您可以在任何函数调用前使用@code_typed查看键入的AST。从理论上讲,你可以使用它来发射任何IR,Julia选择LLVM IR是出于别处所述的原因。 Transpiler.jl是一个包,用于输出来自Julia函数的OpenCL代码等内容。

您可以使用LLVM IR发出其他字节码。 CUDANative.jl使用LLVM的.ptx后端直接从Julia函数发出CUDA内核。 @polly项目正在寻找类似的东西,宏允许Julia自动加速GPU上的一些代码(我承认对此知之甚少,other than reading the post which suggested itthe followup。被选为LLVM的GSoC项目。)

答案 1 :(得分:4)

rustc链接并使用LLVM,通过LLVM C API和C ++中的extended wrapper公开,作为C ABI公开。我不了解水晶,但有些语言直接针对文本或字节码LLVM IR,这有一些潜在的优势,但也有性能和兼容性问题。

至于"有多困难":NaN,我猜?最直接的方法是从Julia的type-inferred lowered form开始,已经接近SSA。具有良好编译器背景的人可能在短时间内(〜几个月)编写未优化(溢出,无代码运动等),单架构模板汇编器。没有编译器背景的人可能需要相当多的研究才能正确地提出问题。