Julia 1.5 Улучшает Поддержку Компоновки Структуры


Джулия была обновлена с улучшениями, включая макеты структур и оптимизацию распределения, а также стабилизацию многопоточного API.

Julia-это динамический язык для технических вычислений, который особенно хорош для запуска программ в стиле MATLAB и R. Разработка началась на Джулии в Массачусетском технологическом институте в 2009 году и набрала популярность, недавно став одним из шести лучших языков для проектов машинного обучения на GitHub.

.

Команда разработчиков говорит, что этот выпуск приносит серьезную, долгожданную оптимизацию, которая может значительно сократить распределение кучи в некоторых рабочих нагрузках. До этого выпуска оптимизация компоновки для неизменяемых объектов имела значительное ограничение, требующее выделения кучи. Это было исправлено, так что неизменяемые объекты теперь можно распределять по стеку, передавать и возвращать по значению, а также более эффективно хранить в массивах и других объектах

API многопоточности также был стабилизирован и улучшен. Поддержка потоковой передачи была значительно улучшена в версии 1.3 и в настоящее время широко используется. Он больше не считается экспериментальным, и команда отмечает большую часть API потоков как стабильную. Улучшения включают в себя лучшую потокобезопасность выражений верхнего уровня, а привязки SuiteSparse теперь потокобезопасны,

Теперь разработчики могут выбрать уровень оптимизации для каждого модуля, чтобы уменьшить задержки компиляции, когда код не критичен для производительности. Производительность компилятора также была улучшена, некоторые пакеты загружаются примерно на 40% быстрее.

Последнее главное изменение заключается в том, что в этом выпуске была добавлена «мягкая область». В версиях Julia до версии 1.0 язык делал предположения о том, должна ли переменная быть локальной или глобальной. Основное правило состояло в том, что внутри цикла, но вне любого тела функции—в так называемой «мягкой области видимости»-неглобальные переменные создавались как локальные для цикла. Это было эффективно, но некоторые разработчики сочли это запутанным и непоследовательным. Поэтому в Julia 1.0 было упрощенное правило, когда назначение переменной в локальной области (функции или цикла) без существующей локальной создавало новую локальную переменную.

Хотя это было просто, это не было популярно у всех, до такой степени, что разработчики IJulia (бэкэнд на языке Julia в сочетании с интерактивной средой Jupyter) добавили код для перезаписи входных данных таким образом, чтобы восстановить старое поведение области до 1.0. Как отмечает команда Julia, наличие часто используемого интерфейса Jupyter, который ведет себя иначе, чем REPL по умолчанию, не является хорошей ситуацией. 

В связи с этим решение в версии v1.5 состоит в том, чтобы заставить REPL вести себя как IJulia, а Julia версии 0.6 или более ранние, сохраняя поведение 1.0 в файлах, чтобы избежать нарушения чьего-либо кода.


Добавить комментарий