Для многопользовательской игры по программированию я работаю над сервером фоновой компиляции для Scala, который поддерживает компиляцию нескольких независимых исходных деревьев, представленных игроками. Мне удалось запустить быструю последовательную компиляцию без перезагрузки компилятора, создав экземпляр объекта компилятора Global
через
val compilerGlobal = new Global(settings, reporter)
а затем запускать отдельные задания компиляции через
val run = new compilerGlobal.Run
run.compile(sourceFilePathList)
Теперь в идеале я хотел бы распараллелить сервер (т.е. одновременно выполнить несколько компиляций), но все же без перезагрузки компилятора (в первую очередь, чтобы избежать повторного анализа библиотеки) с нуля каждый раз. Возможно ли это, т.е. является ли показанная выше вторая часть (безопасно :-) реентерабельной или она сохраняет глобальное состояние? Если нет, есть ли что-то еще, что я могу попробовать? В настоящее время я сосредоточен на поддержке Scala 2.9.1.