Spec-Zone.ru › Julia 1.0

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

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

Пожалуйста, прочтите запись в блоге о релизе для общего обзора языка и многих изменений с момента Julia v0.6. Обратите внимание, что версия 0.7 была выпущена вместе с 1.0, чтобы обеспечить путь обновления для пакетов и кода, предшествующего релизу 1.0. Единственное отличие между 0.7 и 1.0 — это удаление предупреждений о устаревании. Полный список всех изменений с момента 0.6 см. в примечаниях к релизу версии 0.7.

Введение

Научные вычисления традиционно требовали максимальной производительности, но специалисты в предметных областях в основном перешли к медленным динамическим языкам для повседневной работы. Мы считаем, что есть много хороших причин предпочесть динамические языки для этих приложений, и мы не ожидаем, что их использование уменьшится. К счастью, современный дизайн языков и методы компиляции позволяют в основном устранить компромисс в производительности и предоставить единую среду, достаточно продуктивную для прототипирования и достаточно эффективную для развертывания ресурсоемких приложений. Язык программирования 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.0.4/

Spec-Zone.ru

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