Julia (мова програмування)

Julia
Парадигма Мультипарадигма: Мультиметод ("ООП"), Процедурна, Функційна, Метапрограмування
Дата появи 23 серпня 2009[1][2]
Творці Jeff Bezanson, Alan Edelman, Stefan Karpinski, Viral B. Shah
Розробник Jeff Bezanson, Stefan Karpinski, Viral B. Shah, та інші
Останній реліз 1.0.0 and 0.7.0 (8 серпня, 2018; 5 років тому (2018-08-08))
Система типізації Динамічна, Номінальна, Параметрична
Під впливом від
  • C
  • Lisp
  • Lua
  • Mathematica
  • MATLAB
  • Perl
  • Python
  • R
  • Ruby
  • Scheme
Платформа IA-32, x86-64
Операційна система Linux, macOS, Windows та підтримка спільноти FreeBSD
Ліцензія MIT (ядро)
Звичайні розширення файлів .jl
Вебсайт JuliaLang.org

Julia — високорівнева динамічна мова програмування, яку було первинно розроблено для задоволення потреб високопродуктивного чисельного аналізу та обчислювальної науки, без потреби швидкої окремої компіляції, також підходить для вебу як для клієнтської так і серверної частини, програмного забезпечення низького рівня або як мова специфікації.

До особливих аспектів дизайну Julia належать система типізації з параметричним поліморфізмом та типи в повністю динамічній мові програмування та множинній диспетчеризації як основній парадигмі програмування. Це дає змогу виконувати одночасне, паралельне та розподілене обчислення, а також прямі виклики бібліотек C і Fortran без додаткового коду.

Синтаксис Julia близький до MATLAB з запозиченням деяких елементів з Ruby і Lisp. Метод маніпуляції рядками нагадує Perl. Julia має вбудованого збирача сміття, використовує незмінну оцінку та містить ефективні бібліотеки для розрахунків з рухомою комою, лінійної алгебри, генерації випадкових чисел та регулярних виразів. Набагато більше наукових (та інших) бібліотек доступні для використання.

Код проекту поширюється під ліцензією MIT.

Історія

Роботу над Julia було розпочато 2009 року Джефом Безансоном, Стефаном Карпінським, Віралом Б. Шахом та Аланом Едельманом, який поставив завдання створити вільну мову, яка була б високорівневою і водночас швидкою. 14 лютого 2012 року команда запустила вебсайт із повідомленням в блозі, що пояснює місію мови. Офіційної причини для назви «Julia» немає.

Особливості

Ключові особливості мови:

  • Висока продуктивність: однією з ключових цілей проекту є досягнення продуктивності близької до програм мовою Сі. Компілятор Julia заснований на напрацюваннях проекту LLVM і генерує ефективний нативний машинний код для багатьох цільових платформ;
  • Підтримка різних парадигм програмування, включно з елементами об'єктно-орієнтованого і функційного програмування. Стандартна бібліотека надає в тому числі функції для асинхронного вводу/виводу, управління процесами, ведення логів, профілювання і управління пакетами;
  • Динамічна типізація: мова не потребує явного визначення типів для змінних за аналогією зі скриптовими мовами програмування. Підтримується інтерактивний режим роботи;
  • Опціональна можливість явного вказування типів;
  • Синтаксис, який чудово підходить для чисельних і наукових розрахунків, систем машинного навчання і візуалізації даних. Підтримка багатьох числових типів даних і засоби для розпаралелювання обчислень.
  • Можливість прямого виклику функцій з бібліотек мови Сі без додаткових прошарків.

Приклад коду

Приклад функції:

function mandel(z)
    c = z
    maxiter = 80
    for n = 1:maxiter
        if abs(z) > 2
            return n-1
        end
        z = z^2 + c
    end
    return maxiter
end

function randmatstat(t)
    n = 5
    v = zeros(t)
    w = zeros(t)
    for i = 1:t
        a = randn(n,n)
        b = randn(n,n)
        c = randn(n,n)
        d = randn(n,n)
        P = [a b c d]
        Q = [a b; c d]
        v[i] = trace((P.'*P)^4)
        w[i] = trace((Q.'*Q)^4)
    end
    std(v)/mean(v), std(w)/mean(w)
end

Приклад паралельного обчислення 100.000.000 результатів випадкового підкидання монети:

nheads = @parallel (+) for i=1:100000000
  randbit()
end

JIT Компілятор

Цей розділ містить текст, що не відповідає енциклопедичному стилю. Будь ласка, допоможіть удосконалити цей розділ, погодивши стиль викладу зі стилістичними правилами Вікіпедії. Можливо, сторінка обговорення містить зауваження щодо потрібних змін. (березень 2019)

Компілятор JIT (just-in-time), розроблений на основі LLVM Julia, у поєднанні з його дизайном, дозволяє мові відповідати продуктивності C-мови в декількох сценаріях. Щоб отримати уявлення про відносну продуктивність Julia в порівнянні з іншими мовами, які може бути використано для чисельного та наукового обчислення, ми пишемо невеликий набір мікро-тестів різними мовами: C, Fortran, Julia, Python, Matlab / Octave, R, JavaScript, Java, Lua, Go і Mathematica. Результати наступних мікро-тестів було отримано з використанням одноядерного (послідовного виконання) процесора Intel Core i7-3960X з частотою 3,30 ГГц із 64 Гб 1600 МГц оперативної пам'яті DDR3, за допомогою дистрибутиву openSUSE LEAP 42.3: benchmark julia

Взаємодія

Офіційний дистрибутив Julia містить інтерактивний командний рядок, який називають цикл читання-обчислення-друку (REPL), який можливо застосовувати для швидкого експерименту та тестування коду. Наступний фрагмент є прикладом демонстраційного сеансу, де стрічки об'єднуються автоматично завдяки println:

julia> p(x) = 2x^2 + 1; f(x, y) = 1 + 2p(x)y
julia> println("Hello world!", " I'm on cloud ", f(0, 4), " as Julia supports recognizable syntax!")
Hello world! I'm on cloud 9 as Julia supports recognizable syntax!

Посилання

  • Офіційний сайт
  • Початковий код [Архівовано 5 лютого 2021 у Wayback Machine.]
  • п
  • о
  • р
Диференційовні обчислення
Загальне
Поняття
Мови програмування
Застосування
Апаратне забезпечення
Програмні бібліотеки
Втілення
Аудіовізуальні
Словесні
Вирішувальні
Люди
Організації

Портал Портали: Програмування  • Техніка

Категорія Категорії: Штучні нейронні мережі  • Машинне навчання
  1. LICENSE.md file in the JuliaLang/julia repository — GitHub Inc..
    d:Track:Q28771536
  2. Bezanson J. JuliaLang/julia - commit eb256df: "beginning work on parser" — GitHub Inc..
    d:Track:Q20630572d:Track:Q28771536