Есть ли обзор API компилятора nsc для Scala 2.11?

scala.tools.nsc API был полностью изменен с 2.10 на 2.11. Например, Interpreter больше нет.

Я пытаюсь создать на Scala сайт, аналогичный http://codingbat.com, поэтому мне нужна возможность компилировать и запускать код, предоставленный пользователем, во время работы моей программы.

Кто-нибудь знает что-то, что объясняет, как использовать новый API в любом месте? (Мне не удалось погуглить то, что я считал разумными условиями поиска.) Если нет, может ли кто-нибудь, кто что-то знает о новом API, предоставить небольшой рабочий пример, который позволит вам скомпилировать код, а затем получить результат его выполнения?

ОБНОВЛЕНИЕ 2.11.0-M5, кажется, нарушает поддержку Script Engine, но я вернулся к 2.11.0-M4 и могу использовать ScriptEngineManager для получения интерпретатора. Странно то, что тип scala.tools.nsc.interpreter.IMain. Этот пакет и класс не появляются в 2.11.0-M4 Scaladocs, поэтому мне интересно, переместились ли они из артефакта компилятора куда-то еще, или это просто недосмотр в производстве Scaladoc, и они все еще должны быть там .


person Todd O'Bryan    schedule 12.10.2013    source источник
comment
Посмотрите, как работает сценарий оболочки scala.   -  person pedrofurla    schedule 12.10.2013


Ответы (1)


Scala 2.11.0-M4 теперь имеет поддержку сценариев JSR 223, которые, я думаю, могут заменить некоторые функции, которые вы ищете. См. docs.scala-lang.org/scala/2.11.

Эта функция не работает в scala 2.11.0-M5, но, по-видимому, исправлена ​​в 2.11.0-M6 и 2.11.0-M4

 Welcome to Scala version 2.11.0-M4 (OpenJDK Server VM, Java 1.7.0_25).
 Type in expressions to have them evaluated.
 Type :help for more information.

 scala> import javax.script.ScriptEngineManager
 import javax.script.ScriptEngineManager

 scala> val e = new ScriptEngineManager().getEngineByName("scala")
 e: javax.script.ScriptEngine = scala.tools.nsc.interpreter.IMain@1741b6d

См. документ JavaScriptEngine и сводка пакета javax.script

person Mark Lister    schedule 12.10.2013
comment
Вероятно, мне все еще нужно что-то компилировать, особенно если я собираюсь провести с ними кучу тестов, но M5, похоже, нарушил поддержку Script Engine: Добро пожаловать в Scala версии 2.11.0-M5 (Java HotSpot(TM) 64). -Bit Server VM, Java 1.7.0_40). Введите выражения для их оценки. Введите :help для получения дополнительной информации. scala› import javax.script.ScriptEngineManager import javax.script.ScriptEngineManager scala› val e = new ScriptEngineManager().getEngineByName(scala) e: javax.script.ScriptEngine = null - person Todd O'Bryan; 12.10.2013
comment
Ага. Похоже, они разбили пакет nsc.interpreter на отдельный подпроект под названием repl. Но я не могу понять, с чем это связано. Документов нет ни в документах компилятора, ни в библиотеке, и, похоже, нет отдельного артефакта repl. - person Todd O'Bryan; 12.10.2013