【发布时间】:2013-12-31 17:02:36
【问题描述】:
我想将 GCC 用作 JIT 编译器,我只是不时地编译简短的 sn-ps 代码。虽然我当然可以为要编译的每个函数派生一个 GCC 进程,但我发现 GCC 的启动开销太大(在我的计算机上似乎大约 50 毫秒,这需要 50 秒编译 1000职能)。因此,我想知道是否可以将 GCC 作为守护程序运行或将其用作库或类似的东西,这样我就可以提交一个函数进行编译而无需启动开销。
如果您想知道,我不考虑使用实际 JIT 库的原因是因为我还没有找到一个支持我想要的所有功能的库,其中至少包括对 ABI 的良好了解,以便它可以处理结构参数(GNU Lightning 中缺少)、带有闭包的嵌套函数(libjit 中缺少)和仅 C 接口(LLVM 中缺少;我也认为 LLVM 缺少嵌套函数)。
不,我不认为我可以将函数一起批处理以进行编译;一半是我只想在它们第一次真正被调用时才编译它们。
我注意到libgccjit,但据我所知,这似乎非常实验性。
【问题讨论】:
-
你确定 C 是一门很好的语言吗?像
lua这样的语言更适合这种操作,至少这是我想到的。 -
我很确定。 :) 更准确地说,我想在一个用 C 语言编写的系统中使用它。
-
不是迂腐,而是 Lua 在 C 运行的地方运行,考虑到所需的系统规范和 C 编译器的必要性,您有两种选择。 lua 解释器是 ANSI C 代码,并且有使用 lua 的低端 ARM 芯片组,它们运行非常流畅。
-
当然,但它必须与 C 进行实际的 ABI 互操作。我希望能够从正常的静态编译代码中调用生成的函数,而它们又需要能够静态调用编译函数。
-
prespawn N gcc 的进程在输入(命名管道)时被阻塞。将您的函数写入 gcc 进程(异步启动新进程)。重复。