Spec-Zone.ru › Julia 1.6

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

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

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

Документация также доступна в формате PDF: julia-1.6.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.6.0/

Spec-Zone.ru

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