是否可以在运行时生成和执行Rust代码?

问题描述 投票:20回答:2

使用C,在运行时,我可以:

  1. 创建函数的源代码,
  2. 调出gcc将其编译为.so(Linux)(或使用llvm等),
  3. 加载.so,然后
  4. 调用函数。

Rust中可能有类似的事情吗?

特别是我想使用代数数据类型,因此仅使用Rust功能的C子集是不够的。

c rust algebraic-data-types
2个回答
19
投票

尚未正式发布,尽管至少应该没有太多黑客攻击。最大的障碍是这些库还没有进行动态加载的能力。这是一个可行的策略(在Rust的传入分支上)。

  • 链接到rustc条板箱以编程方式驱动编译器。请注意,编译器不是线程安全的,因此一次只能运行一个进程内构建。
  • #[no_mangle]标记要调用的功能。这应该(我还没有尝试过)产生一个完整的符号名称,因此很容易找到。
  • 创建对dlopen / dlsym的最小绑定
  • 找到函数指针并将其安全地转换为Rust闭包类型(当前在sys::Closure中定义。)>]
  • 呼叫关闭。
  • Rust还具有经过最低测试的JIT,可用于这种类型的事情,但是它有一些主要的错误。


0
投票

可能还有其他可能的解决方案,但是,我最近使用了以下解决方案,它对于我的特定要求一直很好。

© www.soinside.com 2019 - 2024. All rights reserved.