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 ) |
Система типізації | Динамічна, Номінальна, Параметрична |
Під впливом від | |
Платформа | 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:
Взаємодія[ред. | ред. код]
Офіційний дистрибутив 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.]
|
- Програмне забезпечення для Mac OS X
- Програмне забезпечення для Windows
- Програмне забезпечення для Linux
- Предметно-орієнтовані мови програмування
- Системи комп'ютерної алгебри
- Числова лінійна алгебра
- Мови програмування
- Функціональні мови програмування
- Вільні компілятори та інтерпретатори
- Текстово-орієнтовані мови програмування
- Багатопарадигмові мови програмування
- Програмне забезпечення, що використовує ліцензію MIT
- Статті з прикладами коду мовою Matlab
- Процедурні мови програмування