Юля каждый раз компилирует скрипт?

Язык Джулии компилирует скрипт каждый раз, можем ли мы вместо этого скомпилировать двоичные файлы с Джулией? Я попробовал небольшой сценарий helloworld с функцией println. Джулии понадобилось 2,3 секунды, чтобы показать результат! Было бы лучше, если бы мы могли делать двоичные файлы вместо компиляции каждый раз

Обновление: в Юлии произошли некоторые изменения, так как я задал этот вопрос. Хотя я больше не слежу за обновлениями для Юлии, так как я задал этот вопрос и, если вы ищете что-то похожее, посмотрите на ответы и комментарии ниже людей, которые следят за Юлией.

Также полезно знать, что теперь для загрузки скрипта требуется около 150 мс.

Ответы на вопрос(2)

Решение Вопроса

иблиотеку. Мы знаем об этой ситуации и в настоящее время работаем над кэшированием выходных данных JL LLVM, чтобы исправить ситуацию, но до тех пор ее нельзя обойти (кроме использования REPL).

 01 мая 2014 г., 05:17
Это было реализовано в ночных вечеринках Джулии и будет включено в релиз 0.3. Время запуска значительно улучшено.

но, может быть, я могу немного подробнее рассказать о том, что происходит и что мы планируем с этим делать.

В настоящее время существует только режим LLVM JIT:

There's a very trivial interpreter for some simple top-level statements. All other code is jitted into machine code before execution. The code is aggressively specialized using the run-time types of the values that the code is being applied to, propagated through the program using dynamic type inference.

Вот как Юлия получает хорошую производительность, даже когда код написан без аннотаций типов: если вы звонитеf(1) Вы получаете специализированный код дляInt64 & # x2014; & # xA0; тип1 на 64-битных системах; если ты позвонишьf(1.0) Вы получаете новую версию, которая специализируется наFloat64 & # X2014; тип1.0 на всех системах. Поскольку каждая скомпилированная версия функции знает, какие типы она будет получать, она может работать с C-подобной скоростью. Вы можете саботировать это, написав и используя & quot; нестабильный тип & quot; функции, тип возвращаемого значения которых зависит от данных времени выполнения, а не только от типов, но мы очень старались не делать этого при разработке базового языка и стандартной библиотеки.

Большая часть Джулии написана сама по себе, затем проанализирована, выведена и выведена, поэтому начальная загрузка всей системы с нуля занимает около 15-20 секунд. Чтобы сделать это быстрее, у нас есть поэтапная система, в которой мы анализируем, выводим тип, а затем кэшируем в файл сериализованную версию AST с выводом типа в файлеsys.ji, Этот файл затем загружается и используется для запуска системы при запускеjulia, Код LLVM или машинный код не кэшируются вsys.jiтем не менее, поэтому все джитирование LLVM все еще нужно делать каждый разjulia запускается, что, следовательно, занимает около 2 секунд.

Эта 2-секундная задержка запуска довольно раздражающая, и у нас есть план по ее устранению. Основной план состоит в том, чтобы иметь возможность компилировать целые программы Julia в двоичные файлы: исполняемые файлы, которые можно запустить, или.so/.dylib общие библиотеки, которые можно вызывать из других программ, как если бы они были просто общими библиотеками Си. Время запуска двоичного файла будет таким же, как и для любой другой программы на С, поэтому задержка запуска в 2 секунды исчезнет.

Addendum 1: Начиная с ноября 2013 года, у версии Julia для разработки больше нет двухсекундной задержки при запуске, поскольку она предварительно компилирует стандартную библиотеку в виде двоичного кода. Время запуска по-прежнему в 10 раз медленнее, чем у Python и Ruby, поэтому есть возможности для улучшения, но оно довольно быстрое. Следующим шагом будет разрешить предварительную компиляцию пакетов и скриптов, чтобы они могли запускаться так же быстро, как это делает сама Джулия.

Addendum 2: Начиная с июня 2015 года, разрабатываемая версия Julia автоматически компилирует множество пакетов, что позволяет быстро их загружать. Следующий шаг - статическая компиляция целых программ Julia.

 16 дек. 2013 г., 16:55
Эта функциональность теперь завершена и объединена с мастером Юлией. Вместо того, чтобы ~ 1,5 секунды в моей системе запускать Джулию, теперь требуется ~ 150 миллисекунд & # x2013; впечатляющее 10-кратное ускорение. Если нам удастся накопить еще одно 10-кратное ускорение, что вполне возможно, время запуска Джулии будет сопоставимо с Ruby и Python.
 24 сент. 2015 г., 18:03
Для справки, @ G.Grothendieck, прекомпиляция модулей является новой функциейjulia v0.4и значительно улучшает время загрузки модуля.
 06 мар. 2013 г., 22:26
Я видел несколько комментариев по всему Интернету за последний год или около того, указывающих на то, что скомпилированные исполняемые файлы / общие объекты являются целью для Джулии, но нет признаков какого-либо прогресса. Можете ли вы предложить какое-либо понимание того, как обстоят дела с этим?
 25 сент. 2013 г., 19:29
Большой прогресс был достигнут Джеймсоном Нэшем и Исайей Нортоном, но пока он еще не достигнут.
 04 июн. 2014 г., 13:48
@StefanKrpinski, После запуска самой julia загрузка всех необходимых мне пакетов занимает немного времени. Например, с помощью предварительной версии Julia версии 0.3.0 + 3381 (2014-06-02 13:19 UTC) команда оболочкиjulia -e "using DataFrames" занимает 21 секунду на моей машине. Есть ли способ решить эту проблему?

Ваш ответ на вопрос