Spec-Zone.ru › Julia 1.7

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

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

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

Документация также доступна в формате PDF: julia-1.7.0.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–2021 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.7.0/

Spec-Zone.ru

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