Відкрити головне меню

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

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

Julia
Julia prog language.svg
Парадигма:Мультіпарадигма: Мультиметод ("ООП"), Процедурна, Функційна, Метапрограмування
Творці: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; 15 місяців тому (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!

ПосиланняРедагувати