在Rust中不可能编写线程代码吗?



我正在阅读关于Erlang BEAM虚拟机的文章,它使用一种叫做直接线程代码的技术来有效地调度VM操作。据我所知,它依赖于宿主C语言中不受限制的跳转语句的可用性,以便在解释期间动态安排程序流。这是否意味着该技术不可能在Rust中使用,或者是否存在逃生舱口?

Rust使用结构化的控制流。这意味着没有gotos或类似的结构。

为了允许非结构化控制流用结构化语言(如Rust)表示,WASM的转译器(C ->WASM)或C2Rust (C ->Rust)中,可以使用一种称为Relooper的算法,它将非结构化控制流表示为有限状态机。阅读"为什么我们又需要Relooper算法?">

Relooper算法最初是为Emscripten (WASM的前身)开发的,这里有一个白皮书描述它:Emscripten:一个LLVM-to-JavaScript编译器(PDF)。参见第3.2节的Relooper,它以

开头:

Relooper是Emscripten中最复杂的模块。它接收一个"块汤",它是一组标记的碎片一段代码,每段代码以一个分支操作结束目标是生成正常的高级JavaScript代码流如循环和if等结构。

最新更新