Является ли компилятор Scala реентерабельным?

Для многопользовательской игры по программированию я работаю над сервером фоновой компиляции для Scala, который поддерживает компиляцию нескольких независимых исходных деревьев, представленных игроками. Мне удалось запустить быструю последовательную компиляцию без перезагрузки компилятора, создав экземпляр объекта компилятора Globalчерез

val compilerGlobal = new Global(settings, reporter)

, а затем запустив отдельные задания компиляции через

val run = new compilerGlobal.Run
run.compile(sourceFilePathList)

. Теперь в идеале я хотел бы распараллелить сервер (т.е. несколько компиляций выполняются одновременно), но все же без перезагрузки компилятора (в первую очередь, чтобы избежать повторного анализа библиотеки) с нуля каждый раз. Возможно ли это, т.е. является ли показанная выше вторая часть (безопасно :-) реентерабельной или она сохраняет глобальное состояние? Если нет, есть ли что-то еще, что я могу попробовать? В настоящее время я сосредоточен на поддержке Scala 2.9.1.

15
задан Michael Petrotta 1 April 2012 в 04:47
поделиться