2015-10-15 69 views
1

我一直在为LLVM编写玩具语言。我想实现的最雄心勃勃的功能是光纤。我已经阅读了很多关于这个问题的内容,我想我对他们传统上的实现有一个模糊的概念。据我所知,光纤通常建模为指令指针和堆栈。 (参见:Golang运行时)有没有办法在LLVM中维护多个堆栈/指令指针?

是否支持异步执行的LLVM支持,具有不同的指令指针?多个堆栈?

我知道LLVM是一个注册机,有没有什么办法可以确保所有的相关数据都保存在堆栈中?和/或一种方法来保存和恢复当前的寄存器状态?

实现这个手工将是一个真正的害虫,所以任何帮助表示赞赏!

+0

关于保存/恢复寄存器状态的问题是一个有趣的问题。尽管它可能值得它自己的问题。 –

回答

0

对于玩具语言,一个快速解决方案是模拟使用线程的纤维行为。制作一堆线程,但确保只有其中一个线程正在做任何事情。您可以让其他线程冷静下来,让他们对连接到主线程的套接字进行阻塞调用。

显然,线程比光纤更昂贵。所以这不会是理想的,在性能方面。

不幸的是,据我所知,唯一的办法就是自己明确地管理前端堆栈。例如,一种方法是

的“延续”的对象,然后履行的作用指令指针(尽管以一种非常不同的方式!),并且您的手动分配内存实现了堆栈数据的角色。更多细节可以在here找到。