Улучшение Scala script времени запуска - режим клиента?

Я бы хотел, чтобы короткие скрипты Scala выполнялись так же быстро, как скрипты python, особенно в терминах времени запуска script.

Может ли кто-нибудь рекомендовать некоторые способы сделать это, например, не включать компиляцию с GCJ?

Один из способов, о котором я могу думать, - запустить script с помощью режима JVM-клиента, но я не могу заставить это работать. Пример (хорошо известный) shebang для этого был бы большим.

ОБНОВЛЕНИЕ. Я знаю другие вопросы, но не думаю, что какие-либо рабочие ответы были найдены до сих пор, поскольку я ищу решения, которые работают с установками STANDARD, без дополнительных требований. Это то, к чему я пытался подключиться, "не включает компиляцию с GCJ, например".

Кажется, что -клиент-режим предназначен для этой прямой цели, но по какой-то причине просто не удается активировать скрипты Scala.

Ответ 1

Как много прочее questions раньше, если можно было только знать, как их искать, используйте Nailgun.

Другими способами улучшить производительность script является запуск fsc при загрузке системы, поэтому он будет доступен для скриптов и использовать -savecompiled, чтобы избежать повторной компиляции скриптов.

ИЗМЕНИТЬ

Вы упомянули режим -client, но я думаю, что это действительно не очень хороший выбор. Это даст вам более медленный компилятор Scala и мало что поможет улучшить время запуска самого компилятора, если не Java. Намного лучше иметь fsc в качестве демона, работающего как -server, и/или сохранить скомпилированные скрипты с -savecompiled.

Теперь я не знаю, какие проблемы у вас возникают с -client, но я прочитал, что он не работает с 64-битным JVM. Возможно, это ваш случай?

PS: глядя похожие вопросы, я заметил, что JRuby имеет встроенную поддержку Nailgun!

Ответ 2

Я еще не пробовал, но scala-native обещает почти мгновенный запуск, потому что он компилируется в собственный двоичный файл. Таким образом, одно решение состоит в том, чтобы предоставить это как число бинарных загрузок.

http://www.scala-native.org/en/latest/

Ответ 3

Я просто попытался передать параметр '-client' через Scala в JVM следующим образом:

#!/bin/sh
exec scala -J-client "$0" "[email protected]"
!#
args.foreach(println)

Вроде работает. Даниэль С. Собрал написал, что он читал, что он не работает с 64-битной JVM. Я не знаю, может быть, это устарело. В любом случае, кажется, что время запуска немного уменьшается.

Бег:

:~$ time /tmp/testScalasScript arg1
arg1

real    0m2,170s
user    0m2,228s
sys     0m0,217s

Это был самый быстрый пробег всего за пару тестов. Без этого это займет до 0,5 с дольше. Но это был действительно быстрый тест, и его следует проводить более систематически, чтобы достичь значимых результатов.

Разве не было способа заставить Scala скомпилировать и сохранить результат компиляции при первом запуске скрипта для более быстрого повторного использования? Но я не уверен, на данный момент.

ОБНОВЛЕНИЕ: я только что видел, что в 'java -help опция' -client 'не документирована (больше?). В любом случае, ошибка не генерируется (что делается при использовании несуществующих опций). Поэтому я не уверен, действительно ли у опции [-client "есть последствия.