Julia 1.11 Documentation
Welcome to the documentation for Julia 1.11.
Пожалуйста, прочитайте release notes, чтобы увидеть, что изменилось с последнего релиза.
The documentation is also available in PDF format: julia-1.11.5.pdf.
Important Links
Ниже приведен неполный список ссылок, которые будут полезны вам при изучении и использовании языка программирования Julia.
- Julia Homepage
- Download Julia
- Discussion forum
- Julia YouTube
- Find Julia Packages
- Learning Resources
- Read and write blogs on Julia
Introduction
Научные вычисления традиционно требовали высокой производительности, однако эксперты в области в значительной степени перешли на более медленные динамические языки для повседневной работы. Мы считаем, что есть много хороших причин предпочитать динамические языки для этих приложений, и не ожидаем, что их использование уменьшится. К счастью, современный дизайн языков и техники компиляции делают возможным в значительной степени устранить компромисс в производительности и предоставить единую среду, достаточно продуктивную для прототипирования и достаточно эффективную для развертывания приложений с высокой производительностью. Язык программирования Julia выполняет эту роль: это гибкий динамический язык, подходящий для научных и численных вычислений, с производительностью, сопоставимой с традиционными статически типизированными языками.
Поскольку компилятор Julia отличается от интерпретаторов, используемых для языков, таких как Python или R, вы можете обнаружить, что производительность Julia вначале неинтуитивна. Если вы заметите, что что-то работает медленно, мы настоятельно рекомендуем ознакомиться с разделом Performance Tips перед тем, как пробовать что-либо еще. Как только вы поймете, как работает Julia, писать код, который почти так же быстр, как C, будет легко.
Julia Compared to Other Languages
Julia имеет опциональную типизацию, множественное распределение и хорошую производительность, достигаемую с помощью вывода типов и just-in-time (JIT) compilation (и optional ahead-of-time compilation), реализованную с использованием LLVM. Это многопарадигменный язык, который сочетает в себе особенности императивного, функционального и объектно-ориентированного программирования. Julia обеспечивает простоту и выразительность для высокоуровневых численных вычислений, так же как языки, такие как R, MATLAB и Python, но также поддерживает общее программирование. Для достижения этого Julia основывается на наследии математических языков программирования, но также заимствует много от популярных динамических языков, включая Lisp, Perl, Python, Lua, и Ruby.
Наиболее значительные отличия Julia от типичных динамических языков заключаются в следующем:
- Основной язык накладывает очень мало ограничений; Julia Base и стандартная библиотека написаны на самом языке Julia, включая примитивные операции, такие как целочисленная арифметика.
- Богатый язык типов для создания и описания объектов, который также может быть дополнительно использован для создания объявлений типов.
- Способность определять поведение функции для множества комбинаций типов аргументов через multiple dispatch
- Автоматическая генерация эффективного, специализированного кода для различных типов аргументов
- Хорошая производительность, приближающаяся к производительности статически компилируемых языков, таких как C
Хотя иногда говорят о динамических языках как о "безтиповых", это определенно не так. Каждый объект, будь то примитивный или пользовательский, имеет тип. Однако отсутствие объявлений типов в большинстве динамических языков означает, что нельзя указать компилятору типы значений и часто нельзя явно говорить о типах вообще. В статических языках, с другой стороны, хотя можно – и обычно нужно – аннотировать типы для компилятора, типы существуют только во время компиляции и не могут быть изменены или выражены во время выполнения. В Julia типы сами по себе являются объектами времени выполнения и также могут использоваться для передачи информации компилятору.
What Makes Julia, Julia?
Хотя случайному программисту не обязательно явно использовать типы или множественную диспетчеризацию, они являются основными объединяющими особенностями Julia: функции определяются для различных комбинаций типов аргументов и применяются путем диспетчеризации к наиболее специфическому совпадающему определению. Эта модель хорошо подходит для математического программирования, где неестественно, чтобы первый аргумент "владел" операцией, как в традиционной объектно-ориентированной диспетчеризации. Операторы — это просто функции с особой нотацией – чтобы расширить сложение для новых пользовательских типов данных, вы определяете новые методы для функции +
. Существующий код затем бесшовно применяется к новым типам данных.
Отчасти из-за вывода типов во время выполнения (дополненного необязательными аннотациями типов) и отчасти из-за сильного акцента на производительность с самого начала проекта, вычислительная эффективность Julia превышает таковую у других динамических языков и даже соперничает с производительностью статически компилируемых языков. Для крупных численных задач скорость всегда была, остается и, вероятно, всегда будет решающей: объем обрабатываемых данных легко соответствовал закону Мура на протяжении последних десятилетий.
Advantages of Julia
Julia стремится создать беспрецедентное сочетание простоты использования, мощности и эффективности в одном языке. В дополнение к вышеупомянутому, некоторые преимущества Julia по сравнению с сопоставимыми системами включают:
- Свободное и открытое программное обеспечение (MIT licensed)
- Пользовательские типы так же быстры и компактны, как встроенные.
- Нет необходимости векторизовать код для производительности; девекторизованный код быстрый
- Разработано для параллелизма и распределенных вычислений
- Легковесные "зеленые" потоки (coroutines)
- Ненавязчивая, но мощная система типов
- Элегантные и расширяемые преобразования и продвижения для числовых и других типов
- Эффективная поддержка для Unicode, включая, но не ограничиваясь, UTF-8
- Вызывайте функции C напрямую (без оберток или специальных API)
- Мощные возможности, подобные оболочке, для управления другими процессами
- Макросы, подобные Lisp, и другие средства метапрограммирования