Документация Julia 1.10
Добро пожаловать в документацию Julia 1.10.
Пожалуйста, ознакомьтесь с примечаниями к релизу, чтобы узнать, что изменилось с момента последнего релиза.
Документация также доступна в формате PDF: julia-1.10.7.pdf.
Важные ссылки
Ниже приведен неполный список ссылок, которые будут полезны при изучении и использовании языка программирования Julia.
- Главная страница Julia
- Загрузить Julia
- Форум обсуждений
- YouTube канал Julia
- Найти пакеты Julia
- Учебные ресурсы
- Читать и писать блоги о Julia
Введение
Научные вычисления традиционно требуют максимальной производительности, но специалисты в предметной области в основном переходят к медленным динамическим языкам для повседневной работы. Мы считаем, что существует много веских причин предпочесть динамические языки для этих приложений, и мы не ожидаем, что их использование уменьшится. К счастью, современные методы проектирования языков и компиляции позволяют в основном устранить потери производительности и обеспечить единую среду, достаточно продуктивную для прототипирования и достаточно эффективную для развертывания ресурсоёмких приложений. Язык программирования Julia выполняет эту роль: это гибкий динамический язык, подходящий для научных и числовых вычислений, с производительностью, сопоставимой с традиционными статически типизированными языками.
Поскольку компилятор Julia отличается от интерпретаторов, используемых для языков, таких как Python или R, вы можете обнаружить, что производительность Julia на первый взгляд неинтуитивна. Если вы обнаружите, что что-то работает медленно, настоятельно рекомендуем ознакомиться с разделом Рекомендации по производительности прежде чем пробовать что-либо еще. После того, как вы поймёте, как работает Julia, легко написать код, работающий практически с такой же скоростью, как и код на C.
Julia по сравнению с другими языками
Julia поддерживает необязательную типизацию, множественное диспетчерирование и хорошую производительность, достигаемую с помощью вывода типов и компиляции в реальном времени (JIT) (и необязательной компиляции заранее), реализованной с использованием LLVM. Язык является многопарадигменным, объединяя особенности императивного, функционального и объектно-ориентированного программирования. Julia обеспечивает простоту и выразительность для высокоуровневых числовых вычислений, так же как языки R, MATLAB и Python, но также поддерживает общее программирование. Для этого Julia опирается на наследие математических языков программирования, но также заимствует многое у популярных динамических языков, включая Lisp, Perl, Python, Lua и Ruby.
Наиболее значительные отличия Julia от типичных динамических языков:
- Основной язык налагает очень мало ограничений; Julia Base и стандартная библиотека написаны на самом Julia, включая примитивные операции, такие как арифметика целых чисел
- Богатый язык типов для построения и описания объектов, который также может быть необязательно использован для объявления типов
- Возможность определения поведения функций для многих комбинаций типов аргументов с помощью множественного диспетчерирования
- Автоматическое создание эффективного специализированного кода для разных типов аргументов
- Хорошая производительность, приближающаяся к производительности статически компилируемых языков, таких как C
Хотя иногда динамические языки называют "бестиповыми", это не так. Каждый объект, будь то примитивный или пользовательский, имеет тип. Однако отсутствие объявления типов в большинстве динамических языков означает, что нельзя указать компилятору типы значений и часто нельзя явно говорить о типах вообще. В статических языках, с другой стороны, хотя можно - и обычно нужно - аннотировать типы для компилятора, типы существуют только во время компиляции и не могут быть изменены или выражены во время выполнения. В Julia типы являются сами по себе объектами во время выполнения и также могут быть использованы для передачи информации компилятору.
Что делает Julia, Julia?
Хотя обычный программист не обязан явно использовать типы или множественное диспетчерирование, они являются основными объединяющими особенностями Julia: функции определяются для различных комбинаций типов аргументов и применяются путём диспетчеризации к наиболее специфическому совпадающему определению. Эта модель хорошо подходит для математического программирования, где неуместно, чтобы первый аргумент "владел" операцией, как в традиционном объектно-ориентированном диспетчерировании. Операторы - это просто функции со специальной нотацией - чтобы расширить сложение до новых пользовательских типов данных, нужно определить новые методы для функции +. Существующий код затем беспрепятственно применяется к новым типам данных.
Отчасти благодаря выводу типов во время выполнения (улучшенному необязательными аннотациями типов), отчасти благодаря сильной ориентации на производительность с самого начала проекта, вычислительная эффективность Julia превосходит эффективность других динамических языков и даже соперничает со статически компилируемыми языками. Для больших численных задач скорость всегда была, продолжает быть и, вероятно, всегда будет важной: объём обрабатываемых данных легко удерживался в ногу с законом Мура в последние десятилетия.
Преимущества Julia
Julia стремится создать беспрецедентное сочетание простоты использования, мощности и эффективности в одном языке. Помимо вышеперечисленного, некоторые преимущества Julia по сравнению со сравнимыми системами включают:
- Свободный и открытый исходный код (лицензия MIT)
- Пользовательские типы данных так же быстры и компактны, как и встроенные
- Нет необходимости векторизировать код для повышения производительности; девекторизованный код работает быстро
- Разработан для параллелизма и распределённых вычислений
- Легковесные "зелёные" потоки (корутины)
- Ненавязчивая, но мощная система типов
- Изящные и расширяемые преобразования и повышения для числовых и других типов
- Эффективная поддержка Unicode, включая, но не ограничиваясь UTF-8
- Прямой вызов функций C (не требуются обертки или специальные API)
- Мощные возможности командной оболочки для управления другими процессами
- Макросы в стиле Lisp и другие средства метапрограммирования
© 2009–2024 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.10/