首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala编译器是可重入的吗?

Scala编译器是可重入的吗?
EN

Stack Overflow用户
提问于 2012-04-01 12:45:16
回答 1查看 333关注 0票数 15

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

代码语言:javascript
复制
val compilerGlobal = new Global(settings, reporter)

,然后运行单独的编译作业。

代码语言:javascript
复制
val run = new compilerGlobal.Run
run.compile(sourceFilePathList)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-08 05:21:43

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

这在你的例子中并不重要,但在集成开发环境中会出现:编译器在类型中使用惰性,这意味着在Symbol上调用方法时可能会发生额外的计算(和突变)。由于可见性问题,在创建这些方法的线程中调用这些方法是很重要的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9961967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档