Улучшение времени запуска скрипта Scala - режим клиента? - PullRequest
11 голосов
/ 21 ноября 2010

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 21 ноября 2010

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

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

РЕДАКТИРОВАТЬ

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

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

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

0 голосов
/ 04 февраля 2019

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

#!/bin/sh
exec scala -J-client "$0" "$@"
!#
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 есть последствия.

0 голосов
/ 17 апреля 2018

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

http://www.scala -native.org / ен / последний /

...