Spec-Zone.ru › Julia 0.7

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

Добро пожаловать в документацию Julia 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/v0.7.0/

Spec-Zone.ru

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