Документация Julia 1.5
Добро пожаловать в документацию Julia 1.5.
Пожалуйста, ознакомьтесь с заметками о выпуске, чтобы узнать о изменениях с момента последнего релиза.
Документация также доступна в формате PDF: julia-1.5.3.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–2020 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.5.3/