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

високорівнева динамічна мова програмування

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; 6 років тому (2018-08-08))
Система типізаціїДинамічна, Номінальна, Параметрична
Під впливом від
ПлатформаIA-32, x86-64
Операційна системаLinux, macOS, Windows та підтримка спільноти FreeBSD
ЛіцензіяMIT (ядро)
Звичайні розширення файлів.jl
ВебсайтJuliaLang.org

До особливих аспектів дизайну 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 Компілятор

ред.

Компілятор 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:  

Взаємодія

ред.

Офіційний дистрибутив 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!

Посилання

ред.
  1. LICENSE.md file in the JuliaLang/julia repositoryGitHub Inc..
  2. Bezanson J. JuliaLang/julia - commit eb256df: "beginning work on parser"GitHub Inc..