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; 17 місяців тому (2018-08-08))
Система типізації:Динамічна, Номінальна, Параметрична
Під впливом від:
Платформа: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 Компілятор[ред. | ред. код]

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

Посилання[ред. | ред. код]