【发布时间】:2017-01-13 06:54:53
【问题描述】:
我正在研究一种类似 c++ 的小型语言,我将编译为 LLVM。我想要实现的一件事是协作式多任务处理;将会有一个“yield”操作符,它有望将堆栈指针和程序计数器切换到我程序中的下一个“线程”。
是否可以在 llvm 中执行此操作?我可以设置堆栈指针寄存器吗?如果没有,我还能做其他类似的事情吗?
编辑:LLVM 协程 (http://llvm.org/docs/Coroutines.html) 听起来很有希望,尽管 https://internals.rust-lang.org/t/llvm-coroutines-to-bring-awarness/3708/12 提出了一些关于堆栈或无堆栈协程的问题。我想知道,它们可以用来实现一个通用的类似 yield 的操作符吗?
编辑 2:在 c++ 中,boost 有一个称为“上下文”的东西,它可以实现堆栈协同程序。仍然试图弄清楚他们是如何做到的。有人知道吗?
【问题讨论】:
标签: llvm coroutine llvm-clang boost-context