15
對於多人編程遊戲,我正在爲Scala開發一個後臺編譯服務器,該服務器支持編譯玩家提交的多個獨立源樹。我通過Scala編譯器是否可重入?
val compilerGlobal = new Global(settings, reporter)
,然後成功運行速度快,連續編譯沒有通過實例化Global
編譯對象重裝編譯器通過
val run = new compilerGlobal.Run
run.compile(sourceFilePathList)
運行單個編譯工作現在我非常喜歡並行服務器(即同時進行多個編譯運行),但仍然沒有每次從頭重新加載編譯器(主要是爲了避免重新解析lib)。這是否可能,即上面顯示的第二部分(安全地:-)是否可重入,還是它保持全局狀態?如果沒有,還有什麼我可以嘗試?我目前專注於支持Scala 2.9.1。
它包含符號表的'全局狀態',作爲開始。 – EJP 2012-04-01 08:18:08
使用編譯器實例池。 – retronym 2012-04-01 10:26:23
@retronym感謝您的建議。但我的主要問題是「我可以回收多少?」。您的評論意味着(內存中)編譯器實例(Global類)之間沒有全局共享狀態,這是一個好的開始。但是,你是否也建議單個運行DO共享狀態(超出解析的標準庫)?我需要更多信息。 – 2012-04-01 11:38:30