在code-gen
和Julia
的静脉中向go
添加通用chez-scheme
后端有多困难,即。没有LLVM。
LLVM是一种更好的方法吗 - 假设rust
和crystal
几乎完全是自托管的,他们可以利用LLVM发出二进制文件,甚至交叉编译。
有关背景信息,我在此处针对各种LLVM前端询问了code-gen
的具体问题What are the issues faced while implementing a self-hosted language on LLVM?
答案 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 it和the followup。被选为LLVM的GSoC项目。)
答案 1 :(得分:4)
rustc链接并使用LLVM,通过LLVM C API和C ++中的extended wrapper公开,作为C ABI公开。我不了解水晶,但有些语言直接针对文本或字节码LLVM IR,这有一些潜在的优势,但也有性能和兼容性问题。
至于"有多困难":NaN
,我猜?最直接的方法是从Julia的type-inferred lowered form开始,已经接近SSA。具有良好编译器背景的人可能在短时间内(〜几个月)编写未优化(溢出,无代码运动等),单架构模板汇编器。没有编译器背景的人可能需要相当多的研究才能正确地提出问题。