gpt4 book ai didi

scala - Scala 编译器是可重入的吗?

转载 作者:行者123 更新时间:2023-12-03 20:57:00 26 4
gpt4 key购买 nike

对于多人编程游戏,我正在为 Scala 开发一个后台编译服务器,该服务器支持编译玩家提交的多个独立的源代码树。通过实例化 Global,我成功地运行了快速、连续的编译,而无需重新加载编译器。编译器对象通过

val compilerGlobal = new Global(settings, reporter)

然后通过运行单独的编译作业
val run = new compilerGlobal.Run
run.compile(sourceFilePathList)

我现在理想地希望并行化服务器(即同时运行多个编译),但仍然没有每次从头开始重新加载编译器(主要是为了避免重新解析库)。这是可能的,即上面显示的第二部分(安全地:-) 是可重入的,还是保持全局状态?如果没有,还有什么我可以尝试的吗?我目前专注于支持 Scala 2.9.1。

最佳答案

是的,编译器运行共享状态,因此您不应该在线程之间共享它们。这是 Eclipse 插件中出现的问题之一。正如@EJP 所指出的,符号表是共享的。

这在您的情况下并不重要,但会出现在 IDE 中:编译器在类型中使用惰性,这意味着在 Symbol 上调用方法时可能会发生额外的计算(和变异)。 .由于可见性问题,在与创建它们的线程相同的线程上调用这些方法很重要。

关于scala - Scala 编译器是可重入的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com