Spec-Zone.ru › Julia 1.2

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

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

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

Примечание

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

Spec-Zone.ru

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