Spec-Zone.ru › Julia 1.1

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

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

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

Примечание

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

Spec-Zone.ru

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