Spec-Zone.ru › Julia 1.11

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

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

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

Документация также доступна в формате PDF: julia-1.11.2.pdf.

Важные ссылки

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

  • Главная страница Julia
  • Скачать Julia
  • Форум обсуждений
  • Канал Julia на YouTube
  • Найти пакеты 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.11/

Spec-Zone.ru

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