【问题标题】:How do I interpret or otherwise evaluate Rust at runtime?如何在运行时解释或评估 Rust?
【发布时间】:2019-01-28 23:33:37
【问题描述】:

我一直在搜索,虽然这似乎是一个非常需要的功能,但所有搜索结果似乎都至少有一年的历史。

目前的状态是什么?是否有在运行时评估任意 Rust 代码的好解决方案(如 Haskell 的 hint)?

也许可以用Miri做点什么?

【问题讨论】:

  • “一个非常受欢迎的功能”,真的吗?谁想要那个?为什么想要那个?美里有一个完全不同的目的。恐怕你不应该试图追求这个目标。您不想解释 C 或 C++ 吗?
  • 好吧,如果你用谷歌搜索,你会发现很多人一直在问这个问题,而且它也确实存在于许多其他语言中。我不能告诉你为什么其他人想要那样,这似乎有点奇怪不是吗。我的用例在很大程度上是一个边缘案例,但我希望能够将任何类型的 rust 代码发送到服务器并在运行时执行它,这就是我的用例。
  • 许多(大多数?)支持“eval”的流行语言都是解释型语言。大多数编译语言要么根本不提供对 eval 的支持,要么通过比 eval(string) 简单得多的 api 提供支持。
  • 好吧,scala 和 haskell 都提供了这个,我相信还有更多 - 但他们都有 REPL。

标签: rust interpreter ctfe rust-compiler-plugin


【解决方案1】:

MiriMIR Interpreter 的缩写)是 Rust 代码事实上的解释器。它是 rustc(Rust 编译器)内部编译时函数评估的动力,但 Miri 比编译器当前使用的功能更强大。

出于实验目的,Miri 也可用于 Rust 游乐场。它可用于评估程序的特定运行,检测是否存在某些类型的未定义行为。

Miri 确实提供 Rust REPL,但它可能是 part of creating such a tool

【讨论】:

  • 我以为 Rust 并没有真正的 CTFE?或者是吗?我调查了 Miri,但这似乎真的是一个非常 hacky 的解决方案。我也可以只从 rust 本身调用 rustc,是不是更干净一些?
  • @jundl77 当然,CTFE 仍处于初期阶段。某些能力可用(例如,AtomicUsize::newconst fn)而其他能力则不可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多