Spec-Zone.ru › Julia 1.9

Документация Julia 1.9

Добро пожаловать в документацию Julia 1.9.

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

Документация также доступна в формате PDF: julia-1.9.2.pdf.

Введение

Научные вычисления традиционно требуют максимальной производительности, но специалисты в области часто переходят к медленным динамическим языкам для ежедневной работы. Мы считаем, что есть много веских причин предпочитать динамические языки для этих применений, и мы не ожидаем, что их использование уменьшится. К счастью, современный дизайн языка и техники компиляции позволяют в основном устранить компромисс в производительности и предоставить единую среду, достаточно продуктивную для прототипирования и достаточно эффективную для развертывания ресурсоемких приложений. Язык программирования Julia выполняет эту роль: это гибкий динамический язык, подходящий для научных и числовых вычислений, с производительностью, сравнимой с традиционными языками со статической типизацией.

Поскольку компилятор Julia отличается от интерпретаторов, используемых для языков, таких как Python или R, вы можете обнаружить, что производительность Julia на первый взгляд кажется неинтуитивной. Если вы обнаружите, что что-то работает медленно, настоятельно рекомендуем прочитать раздел Рекомендации по производительности перед тем, как пробовать что-либо другое. После того, как вы поймете, как работает Julia, легко написать код, скорость которого почти равна скорости кода на C.

Julia обладает необязательной типизацией, множественным диспетчерированием и хорошей производительностью, достигнутой с помощью вывода типов и компиляции в реальном времени (JIT) (и необязательной компиляции заранее), реализованной с использованием LLVM. Она является многопарадигменной, объединяя возможности императивного, функционального и объектно-ориентированного программирования. Julia предоставляет простоту и выразительность для высокоуровневых числовых вычислений, так же как языки R, MATLAB и Python, но также поддерживает общее программирование. Для этого Julia опирается на традиции математических языков программирования, но также заимствует много из популярных динамических языков, включая Lisp, Perl, Python, Lua и Ruby.

Наиболее существенные отличия Julia от типичных динамических языков:

  • Ядро языка накладывает очень мало ограничений; Julia Base и стандартная библиотека написаны на самом языке Julia, включая примитивные операции, такие как арифметика целых чисел
  • Богатый язык типов для построения и описания объектов, которые также могут быть необязательно использованы для объявления типов
  • Возможность определения поведения функций по многим комбинациям типов аргументов с помощью множественного диспетчерирования
  • Автоматическое генерирование эффективного специализированного кода для различных типов аргументов
  • Хорошая производительность, приближающаяся к производительности таких статически компилируемых языков, как C

Хотя иногда говорят о динамических языках как о «бестиповых», это не так: каждый объект, будь то примитивный или пользовательский, имеет тип. Однако отсутствие объявлений типов в большинстве динамических языков означает, что нельзя дать компилятору информацию о типах значений и часто невозможно явно обсуждать типы. В статических языках, с другой стороны, хотя можно и обычно нужно аннотировать типы для компилятора, типы существуют только во время компиляции и не могут быть изменены или выражены во время выполнения. В Julia типы являются объектами во время выполнения, и их также можно использовать для передачи информации компилятору.

Хотя обычный программист не должен явно использовать типы или множественное диспетчерирование, они являются основными объединяющими особенностями Julia: функции определяются по различным комбинациям типов аргументов и применяются посредством диспетчерирования к наиболее точному совпадающему определению. Эта модель хорошо подходит для математического программирования, где неестественно, чтобы первый аргумент «владел» операцией, как в традиционном объектно-ориентированном диспетчерировании. Операторы — это всего лишь функции со специальной нотацией — чтобы расширить сложение на новые пользовательские типы данных, вы определяете новые методы для функции +. Существующий код беспрепятственно применяется к новым типам данных.

Отчасти благодаря выводу типов во время выполнения (дополненному необязательными аннотациями типов), а отчасти благодаря сильному акценту на производительности с самого начала проекта, вычислительная эффективность Julia превосходит эффективность других динамических языков и даже соперничает со статически компилируемыми языками. Для больших числовых задач скорость всегда была, остается и, вероятно, всегда будет важна: объем обрабатываемых данных легко соответствовал закону Мура в последние десятилетия.

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

  • Свободное и открытое программное обеспечение (лицензия MIT)
  • Пользовательские типы данных так же быстры и компактны, как и встроенные
  • Нет необходимости векторизировать код для повышения производительности; не-векторизованный код тоже быстрый
  • Разработан для параллельных и распределенных вычислений
  • Легковесные «зеленые» потоки (корутины)
  • Ненавязчивая, но мощная система типов
  • Элегантные и расширяемые преобразования и повышения для числовых и других типов
  • Эффективная поддержка Unicode, включая, но не ограничиваясь UTF-8
  • Прямой вызов функций C (без оберток или специальных API)
  • Мощные оболочковые возможности для управления другими процессами
  • Макросы в стиле Lisp и другие средства метапрограммирования

© 2009–2023 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.9/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API