Julia
A = [3.0 2.0; 1.0 2.0]
Головна перевага: Julia часто надає можливість залишити продуктивний код у самій Julia, не переписуючи його на C або Fortran.;</syntaxhighlight>
end
end age::Int = 25
age = [25, 30, 28],
</syntaxhighlight>
Julia має вбудований docstring-стиль.;</syntaxhighlight>
Type stability
</syntaxhighlight>
Практична роль: у Julia не обов’язково уникати циклів заради швидкості.; using Plots
println("Minor")
using BenchmarkTools
Практична роль: у Julia краще вимірювати продуктивність інструментами, а не покладатися на інтуїцію.;
if age >= 18
Сильна ніша Julia: scientific machine learning — один із напрямів, де Julia має особливо природну перевагу.; )
</syntaxhighlight> end numbers = [10, 20, 30]
Типові помилки початківців
tspan = (0.0, 1.0) Vector:
add(a, b)
end {{SEO
println(value(x)) REPL застосовується для:
Це часто називають:
Повний стиль:
Приклад у REPL:
Приклад:
sum_value += i
Краще:
Приклади задач на Julia
'''Практична порада:''' продуктивний Julia-код зазвичай пишуть усередині функцій, а не як великий набір глобальних команд.;</div>
Benchmarking потрібен для:
'''Критично для швидкості:''' type instability має змогу суттєво погіршити продуктивність Julia-коду.; Це означає, що код компілюється під час виконання, а не інтерпретується постійно рядок за рядком.;<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
'''Суть broadcasting:''' Julia надає можливість явно й результативно застосовувати операції до всіх елементів масиву.; Щоб Julia-код був швидким, істотно писати його з урахуванням типів і алокацій.;</div>
`struct` застосовують, коли потрібно для створення власних типів.; using JuMP
price = [10.0, 20.0, 15.0],
</div>
== Julia і MATLAB ==
<syntaxhighlight lang="julia">
!; Приклад:
value::Int
A = [1.0 2.0; 3.0 4.0]
Julia підтримує роботу Unicode-імена, з цієї причини в науковому коді можна використовувати математичні символи.;
@variable(model, x >= 0)
Julia-проєкти часто мають файли:
if x > 0
- frontend development;
- mobile development;
- простих web CRUD-систем;
- маленьких одноразових CLI-скриптів, де startup time критичний;
- команд без досвіду scientific computing;
- проєктів, де вся інфраструктура побудована на Python/R/Java;
- задач, де потрібна найбільша можлива кількість готових ML production-бібліотек;
- enterprise-систем, де важливі стандартні кадри й mature tooling.;
counter.value += 1
else
* `Project.toml`;
* `Manifest.toml`.; * Документація Flux.jl.; * Документація Turing.jl.;
</syntaxhighlight>
else
Julia має обмеження.; x = 1:10
- compilation latency;
- менша програмний пакет, ніж у Python;
- менша кількість розробників на ринку;
- не всі пакети однаково зрілі;
- production deployment має змогу вимагати досвіду;
- memory usage має змогу бути важливим фактором;
- type instability має змогу погіршувати швидкість;
- startup time має змогу заважати коротким CLI-скриптам;
- не найкращий вибір для frontend або mobile;
- деякі enterprise-команди можуть не мати Julia-експертизи.; Основна ідея: Julia надає можливість писати науковий і чисельний код у високорівневому стилі, але без постійної потреби переписувати критичні частини на C, C++ або Fortran.; matrix = [1 2 3; 4 5 6]
DataFrames.jl
using Flux
end
<syntaxhighlight lang="julia">
<syntaxhighlight lang="julia">
Julia має вбудований пакет `Test`.; function unstable(x)
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
end
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
using DifferentialEquations
using Plots
'''Критично:''' notebook або research script має змогу містити секрети, шляхи до приватних даних або небезпечний код так само, як production-застосунок.; Julia особливо корисна для дослідників, інженерів, data scientists і розробників наукового ПЗ, яким потрібно оперативно створювати моделі й водночас отримувати високу продуктивність.; з цієї причини потрібні тести, перевірки й контроль припущень.; using HiGHS
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
Julia добре підходить для:
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
add(a, b) = a + b
== Приватність даних ==
* фізичних моделей;
* біологічних систем;
* цифрових двійників;
* моделювання процесів;
* neural differential equations;
* hybrid modeling;
* параметричної ідентифікації;
* симуляцій із ML-компонентами.;</div>
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
</div>
Julia має динамічну мову з сильною системою типів.;== Julia і Python ==
* залежності;
* сторонні пакети;
* виконання notebook-коду;
* роботу з файлами;
* API keys;
* доступ до баз даних;
* data privacy;
* shell commands;
* serialized data;
* результати симуляцій, які впливають на рішення для бізнесу;
* production deployment;
* доступи до HPC-кластерів або GPU-серверів.;</div>
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
println(numbers [1])
x = [1, 2, 3]
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
plot(x, y, label = "sin(x)", title = "Sine function")
'''Практична роль:''' Turing.jl робить Julia корисною для байєсівського моделювання й імовірнісного програмування.; Поширені типи:
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
|-
| ключовий фокус
| Наукові й чисельні обчислення, HPC, моделювання
| Універсальна мова: web, automation, AI, data science
|-
| Продуктивність
| Висока для типізованого чисельного коду
| Часто потребує NumPy, C, Cython, Numba або бібліотек
|-
| програмний пакет
| Сильна в scientific computing, але менша
| Дуже велика й зріла
|-
| ML/AI
| є собою Flux, MLJ та інші інструменти
| Найширша індустріальна AI/ML-екосистема
|-
| Поріг входу
| Зручна, але потребує розуміння типів і компіляції
| Дуже популярна й проста для старту
|}
</div>
<syntaxhighlight lang="julia">
<syntaxhighlight lang="julia">
'''CSV.jl''' застосовується для читання й запису CSV-файлів.; CSV.write("output.csv", df)
</div>
numbers = [1, 2, 3, 4, 5]
Приклад: end
Pkg.add("DataFrames")
println(df)
Mutable struct:
| ; C++
sol = solve(prob) Цей підхід корисний для: Крапка перед оператором або функцією означає поелементне сфера застосування.; using DataFrames function sum_of_squares(values) Практична роль: Makie.jl підходить для складнішої та інтерактивної наукової візуалізації.; Pluto.jl особливо цікавий для reactive notebooks, де зміни в одній комірці автономно оновлюють залежні результати.;Практична роль: modules дозволяють структурувати більші Julia-проєкти й контролювати простір імен.;== MLJ.jl == Практична роль: тести важливі не лише для web або backend, а й для наукового коду, де помилка має змогу виглядати як “правдоподібний” результат.; mutable struct Counter return 1 Scientific Machine LearningМасиви — одна з ключових структур Julia.; Суть прикладу: Julia надає можливість оперативно писати простий код, але водночас орієнтована на складні чисельні задачі.; end </syntaxhighlight> !; Python
Повертає суму `a` і `b`.; active = true
area(width::Number, height::Number) = width * height
<syntaxhighlight lang="julia">
</div>
df = DataFrame(
'''Увага:''' у Julia індексація масивів починається з 1, як у MATLAB і R, а не з 0, як у C, Python або JavaScript.; Вона поєднує високорівневий синтаксис, multiple dispatch, JIT-компіляцію, сильну роботу з масивами, лінійну алгебру, оптимізацію, диференціальні рівняння, data science і high-performance computing.; Пакети встановлюються через package manager.;</div>
println(x)
name = ["Alice", "Bob", "Carol"],
'''Практична роль:''' Plots.jl зручний для швидкої візуалізації результатів обчислень і моделей.; else
Приклад:
println(f(5))
'''Перевага Pluto.jl:''' reactive execution сприяє зменшити ризик “застарілих” результатів у notebook.; Julia часто розглядають як альтернативу MATLAB для частини наукових і чисельних задач.; '''Turing.jl''' — пакет для probabilistic programming у Julia.; println(α + β)
<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
u0 = 0.5
На відміну від деяких високорівневих мов, цикли в Julia можуть бути продуктивними, якщо написані правильно.; using JuMP
Julia часто використовують у notebooks.;</div>
Julia активно застосовується в напрямі Scientific Machine Learning — поєднанні чисельного моделювання, диференціальних рівнянь, оптимізації й machine learning.; end println(area(4, 6))
Функція має змогу повертати `Int` або `Float64`.; Критерій
age::Int
price = 19.99
Приклад ідеї:
<syntaxhighlight lang="julia">
* multithreading;
* multiprocessing;
* distributed computing;
* GPU computing;
* cluster computing;
* parallel maps;
* asynchronous tasks.;== JIT compilation ==
JuMP.jlexport add Використання: </div>
== Packages ==
Можливі проблеми:
function sum_values(x)
== Julia і C++ ==
</syntaxhighlight> println(det(A)) Для пакетів часто використовують Documenter.jl.; * бібліотек;
f = x -> x^2 julia hello.jl using LinearAlgebra Julia часто застосовується для аналізу дослідницьких, фінансових, медичних або технічних даних.;using .MathUtils
'''Перевага:''' package manager Julia вбудований у мову й добре підходить для reproducible scientific projects.; * Документація Plots.jl.; Добре типізовані цикли можуть бути дуже ефективними.;<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">
Для вимірювання продуктивності часто використовують BenchmarkTools.jl.; * Документація MLJ.jl.; '''DifferentialEquations.jl''' — одна з найвідоміших бібліотек Julia для розв’язування диференціальних рівнянь.; * line charts;
* scatter plots;
* histograms;
* heatmaps;
* quick visualization;
* exploratory analysis;
* наукових графіків.; !;</div>
println(count)
MLJ сприяє: |
; "adult" : "minor"
Type stability означає, що компілятор має змогу передбачити тип результату функції.; if x > 0 return total Plots.jl підтримує роботу різні backends і підходить для:
</syntaxhighlight> println(first(df, 5)) ВисновокФункції</syntaxhighlight> VS Code є собою популярним середовищем для Julia.; Julia | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ліцензійний пакет | Open-source мова | Комерційна платформа | ||||||||||||||
| Синтаксис | Близький до математичного стилю | Дуже зручний для матриць | ||||||||||||||
| Продуктивність | Висока при правильному коді | Сильна в чисельних задачах | ||||||||||||||
| Пакети | Open-source програмний пакет Julia | Toolbox-екосистема MATLAB | ||||||||||||||
| Використання | Research, HPC, open scientific computing | Інженерія, освіта, промисловість, моделювання |
Запуск файлу:
<syntaxhighlight lang="julia">
product = ["A", "B", "C"],
'''Висновок:''' Fortran залишається важливим у legacy HPC, а Julia пропонує сучасніший дослідницький workflow із високою продуктивністю.; Julia
</div>
Через JIT-компіляцію перший запуск функції має змогу бути повільнішим, ніж наступні.;<syntaxhighlight lang="julia">
== Loops ==
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
julia> 2 + 3
end
α = 0.05
!; '''Увага:''' Julia має ML-екосистему, але Python усе ще має значно ширшу індустріальну AI/ML-екосистему.;== Turing.jl ==
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
5
Потрібно обережно працювати з:
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
<syntaxhighlight lang="julia">
Julia використовує JIT-компіляцію через LLVM.;== Загальний характеристика ==
Приклад:
f(u, p, t) = 1.01u
застосовується для:
== Julia у VS Code ==
'''Практична роль:''' notebooks зручні для досліджень, навчання, пояснення моделей і інтерактивної аналітики.; R
'''Суть Julia:''' багато сили мови побудовано навколо multiple dispatch — функції поводяться по-різному залежно від типів аргументів.; Критерій
JuMP застосовується для:
<syntaxhighlight lang="julia">
end
<syntaxhighlight lang="julia">
Приклад:
for value in x
Dense(10 => 5, relu),
переважні аспекти Julia
Простий приклад:
Приклад:
Увага: Julia має змогу бути дуже швидкою після компіляції, але перший запуск функцій або графіків іноді займає більше часу.; Fortran
Практична роль: у Julia типи важливі для продуктивності, multiple dispatch і зрозумілої структури чисельного коду.; Поширені напрями:
Популярні варіанти:
CSV.jl
істотно: для відтворюваних обчислень потрібно зберігати середовище проєкту, інакше результати можуть змінюватися через актуалізація пакетів.; return a + b </syntaxhighlight>
Julia має сильну підтримку лінійної алгебри.; using DataFrames
total = zero(eltype(values))
</div>
'''Практична роль:''' CSV.jl часто застосовується разом із DataFrames.jl для імпорту й експорту табличних даних.; β = 0.9
!; * Документація DataFrames.jl.; Вона найкраще розкривається там, де потрібні чисельні методи, моделювання, оптимізація, симуляції й швидкий research-to-production workflow.; module MathUtils
* neural networks;
* gradient-based learning;
* differentiable programming;
* research ML;
* custom models;
* scientific machine learning;
* deep learning experiments.;</div>
LinearAlgebra
add(a, b) = a + b
Проста оптимізація через JuMP
age = 20
Змінні в Julia створюються простим присвоєнням.; Критерій Pluto.jl — notebook-середовище для Julia з реактивною моделлю виконання.; df = CSV.read("data.csv", DataFrame)
DataFrames.jl застосовується для:
Pluto.jl корисний для: Julia має змогу бути не найкращим вибором для:
Висновок: R часто краща для класичної статистичної аналітики й звітності, а Julia — для продуктивного моделювання й чисельних методів.; Її головна ніша — продуктивні обчислення, моделювання й наукові workflow.; Помилка: очікувати, що Julia автономно зробить будь-який код швидким.; square(10)
Вона застосовується для:
== Типи ==
function stable(x)
sum_value = 0
'''Практична роль:''' VS Code часто є собою основним IDE-вибором для Julia-розробки.; using Pkg
* навчальних матеріалів;
* інтерактивних моделей;
* демонстрацій;
* research notebooks;
* відтворюваних експериментів;
* інтерактивних параметрів;
* пояснення математичних моделей.;<syntaxhighlight lang="julia">
!; * Julia Manual.; Рекомендації:
!; Критерій
for value in values
println("Adult")
Julia має функціональні можливості для паралельного й розподіленого виконання.;<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
{| class="wikitable"
</div>
* [[Програмування]]
* [[Мова програмування]]
* [[Python]]
* [[R]]
* [[MATLAB]]
* [[C++]]
* [[Fortran]]
* [[Data Science]]
* [[Machine Learning]]
* [[High-performance computing]]
* [[Scientific computing]]
* [[Чисельні методи]]
* [[Лінійна алгебра]]
* [[Оптимізація]]
* [[Диференціальні рівняння]]
* [[DataFrames]]
* [[GPU computing]]
* [[Jupyter Notebook]]
* [[Налагодження коду]]
* [[Логування]]
* [[Безпека застосунків]]
'''істотно:''' Julia сильна у своїй ніші, але не є собою універсальною заміною Python, Java, JavaScript або C++ для всіх типів розробки.;
Julia має власну систему пакетів.; !; Пакети Julia використовуються для:
REPL — інтерактивне середовище Julia, у якому можна вводити команди й одразу бачити результат.;</syntaxhighlight>
"""
- побудова чисельних моделей;
- розв’язування систем рівнянь;
- обчислювальна фізика;
- математична оптимізація;
- machine learning;
- deep learning;
- data analysis;
- статистичне моделювання;
- симуляції;
- agent-based modeling;
- фінансові розрахунки;
- обробка великих масивів;
- GPU-обчислення;
- research notebooks;
- production scientific computing.; Поширені помилки:
b = [5.0, 5.0] @constraint(model, x + y <= 10)
optimize!(model)
println(value(x)) println(value(y)) </syntaxhighlight>
Julia REPL
model = Model(HiGHS.Optimizer)
це високорівнева, високопродуктивна мова програмування, розроблена; додатково реалізовано чисельного моделювання, data science, machine learning, оптимізації, статистики, симуляцій і high-performance computing виступає ключовою рисою наукових обчислень забезпечується через '''Julia'''.; count = 10
end
Рекомендовано:
add(a, b) = a + b
</syntaxhighlight>
model = Model(HiGHS.Optimizer)
Julia має змогу використовувати GPU через відповідні пакети.;area(x::Number) = x * x
Приклад:
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
'''Висновок:''' MATLAB має сильні toolbox-и й довгу історію в інженерії, а Julia приваблива open-source підходом і високопродуктивним загальним програмуванням.; '''JuMP.jl''' — пакет для математичної оптимізації в Julia.;
Приклад: @variable(model, y >= 0)
Головна сила: Julia має зручний і продуктивний синтаксис для матриць, векторів і лінійної алгебри.;- інтерактивних графіків;
- 2D-візуалізації;
- 3D-візуалізації;
- наукової графіки;
- анімацій;
- великих наборів даних;
- publication-quality visualizations.; * scientific computing;
- numerical modeling;
- differential equations;
- optimization;
- simulations;
- high-performance data analysis;
- research code;
- mathematical modeling;
- HPC;
- scientific machine learning;
- GPU computing;
- financial modeling;
- engineering calculations;
- algorithm prototyping;
- open scientific software.; Вона надає можливість вибирати реалізацію функції залежно від типів усіх аргументів, а не лише першого об’єкта.; |-
| Рівень мови | Високорівнева, динамічна з JIT | Системна, статично компільована |- | Продуктивність | Висока для багатьох чисельних задач | Дуже висока, максимальний контроль |- | Швидкість розробки | Зазвичай вища | Часто нижча через складність |- | Контроль пам’яті | Garbage collection | Ручний контроль, RAII |- | Ніша | Scientific computing, modeling, research | Systems, engines, libraries, low-level HPC |}
println(area(5))
println(x .^ 2)
count = count + 1
Для чого застосовується Julia
Короткий стиль:
Broadcasting
using LinearAlgebra |- | історичний розвиток | Сучасна мова | Класична мова наукових обчислень |- | Продуктивність | Висока | Дуже висока в чисельному HPC |- | Синтаксис | Сучасніший і гнучкіший | Традиційний для scientific code |- | Legacy | Менша база | Величезна legacy-база в HPC |- | Пакети | Активна open-source програмний пакет | Багато старих і перевірених бібліотек |}
total = zero(eltype(x))
Головне правило: хороший Julia-код має бути не лише швидким, а й відтворюваним, протестованим і зрозумілим з погляду математики.; Критерій Функції є собою first-class values:
Перша програма на Julia
- `Int`;
- `Float64`;
- `Bool`;
- `String`;
- `Char`;
- `Vector`;
- `Matrix`;
- `Tuple`;
- `NamedTuple`;
- `Dict`;
- `Struct`.; amount::Float64 = 19.99
@test 2 + 3 == 5 @testset "Math tests" begin
@test sqrt(4) == 2
Джерела
b = [1.0, 2.0] Plots.jl — популярний пакет для побудови графіків.; Підключення пакета:
println(sin.(x))
</syntaxhighlight>
Приклад:
- Bayesian inference;
- probabilistic models;
- MCMC;
- uncertainty modeling;
- statistical inference;
- hierarchical models;
- наукових досліджень.;
!; Julia розроблена для задач, де важливі одночасно швидкість розробки й швидкість виконання.; Julia
Робота з таблицею
істотно: Unicode має змогу зробити математичний код ближчим до формул, але в командному коді потрібно зберігати читабельність для всіх розробників.; Головна перевага: Julia зменшує розрив між прототипом і продуктивним чисельним кодом.; """
x * x
Julia — це сучасна мова програмування для продуктивних наукових і чисельних обчислень.; Практична порада: Julia варто обирати, коли головна задача — продуктивні обчислення, моделювання або науковий код, а не загальна web-розробка.; {| class="wikitable"
Приклад: Типові сценарії використання Julia:
total += value
Неідеальний приклад:
Висновок: Python залишається ширшим універсальним вибором, а Julia особливо сильна там, де важливі продуктивні чисельні обчислення й scientific computing.; Вона особливо корисна в дослідницьких і технічних середовищах, де потрібно будувати моделі, працювати з матрицями, виконувати оптимізацію, запускати симуляції, аналізувати інформаційні дані й масштабувати обчислення.; * працювати з моделями через єдиний інтерфейс;
- тренувати моделі;
- виконувати evaluation;
- робити tuning;
- порівнювати алгоритми;
- створювати ML pipelines.;
Тести корисні для:
Julia і Fortran
Makie.jl — потужна платформа візуалізації в Julia.; Приклад:
Julia додатково часто використовують інтерактивно через REPL або notebooks.; Практична роль: struct надає можливість описувати власні типи даних для моделей, симуляцій, параметрів і доменної логіки.; Julia часто порівнюють із Python.;</syntaxhighlight>
Потрібно контролювати:
name = "Alice"
== Коли Julia має змогу бути невдалим вибором ==
<syntaxhighlight lang="julia">
</div>
Основні переважні аспекти Julia:
Приклад:
'''Правило:''' інформаційні дані в Julia-проєкті потрібно захищати так само уважно, як код і результати моделювання.; * Документація JuMP.jl.; * чисельних методів;
* машинного навчання;
* фізики;
* оптимізації;
* статистики;
* симуляцій;
* інженерних розрахунків.; * ODE;
* SDE;
* DAE;
* PDE;
* delay differential equations;
* фізичного моделювання;
* біологічних моделей;
* інженерних систем;
* simulation workflows;
* scientific machine learning.;== Документація ==
Julia-проєкти теж потребують уваги до безпеки.;</div>
Приклад:
quantity = [2, 1, 5]
model = Chain(
істотно: GPU-обчислення потребують уважного контролю типів, пам’яті, transfer між CPU і GPU та структури алгоритму.; Підходи:
</syntaxhighlight>
Приклад:
Performance tips
df = DataFrame(
First time to run
Modules
@variable(model, x >= 0)
Змінні
Це дає Julia:
<syntaxhighlight lang="julia">
</div>
Threads.@threads for i in 1:10
</syntaxhighlight>
df.total = df.price .* df.quantity
Обчислення суми квадратів
using DataFrames
</div>
<syntaxhighlight lang="julia">
return total
)
== GPU computing ==
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
</div>
Сценарії:
Makie застосовується для:
x = 0:0.1:10
!; using Test
return 1.0
Приклад:
'''Multiple dispatch''' — одна з центральних концепцій Julia.;
- писати код у функціях;
- уникати type instability;
- використовувати package environments;
- зберігати `Project.toml` і `Manifest.toml`;
- писати тести;
- використовувати BenchmarkTools;
- контролювати allocations;
- профілювати повільний код;
- документувати математичні припущення;
- вказувати одиниці вимірювання;
- перевіряти крайові випадки;
- уникати глобальних змінних у продуктивному коді;
- не оптимізувати без вимірювання;
- розділяти research notebooks і library code;
- контролювати версії пакетів.;
</div>
x = 10
println(matrix)
end
optimize!(model)
using HiGHS
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
- Офіційна документація Julia.; * Документація Makie.jl.; Водночас Julia має свої обмеження: compilation latency, меншу екосистему порівняно з Python, потребу в розумінні типів і не завжди ідеальну придатність для загальної web або enterprise-розробки.;
</div>
Benchmarking
Makie.jl
</syntaxhighlight>
Графік функції
Головна думка: Julia — це мова для продуктивного наукового програмування.; counter = Counter(0)
Під час першого виклику Julia має змогу скомпілювати спеціалізовану версію функції для типу аргументу.; Типи можна вказувати явно, але часто Julia виводить їх сама.;</syntaxhighlight>
println(user.name)
Приклад:
{| class="wikitable"
Dense(5 => 1)
'''Суть умов:''' Julia має звичні керуючі конструкції, але вони добре поєднуються з чисельним і функціональним стилем.;== Multiple dispatch ==
* CUDA support;
* GPU arrays;
* scientific kernels;
* ML workloads.;<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
</div>
Зазвичай застосовується Julia extension, яка дає:
== Тематичні мітки ==
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
== Notebooks ==
* табличного аналізу;
* CSV-даних;
* групування;
* фільтрації;
* трансформацій;
* data science;
* статистики;
* підготовки даних для моделей.; !;<syntaxhighlight lang="julia">
* писати весь код у global scope;
* не враховувати індексацію з 1;
* ігнорувати type instability;
* не використовувати `Project.toml`;
* не фіксувати версії пакетів;
* очікувати миттєвого першого запуску;
* робити зайві allocations;
* копіювати великі масиви без потреби;
* плутати broadcasting і matrix operations;
* не писати тести для чисельних функцій;
* не перевіряти одиниці вимірювання;
* не профілювати повільний код;
* використовувати notebook як єдину форму production-коду.; function add(a, b)
@btime sum($x)
end
!;</div>
== Struct ==
end
=== Лінійна алгебра ===
</div>
* перевірки оптимізацій;
* пошуку повільних місць;
* оцінки allocations;
* порівняння алгоритмів;
* high-performance code review.;</div>
'''Практична роль:''' JuMP.jl робить Julia сильною мовою для оптимізації, operations research і математичного планування.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
</div>
* писати узагальнений код;
* створювати математичні API;
* розширювати поведінку типів;
* уникати зайвої ієрархії класів;
* будувати composable libraries;
* результативно спеціалізувати код.; Julia
</div>
Умови в Julia пишуться через `if`, `elseif`, `else`.; * Документація DifferentialEquations.jl.; * Матеріали щодо scientific computing, HPC, numerical methods і performance tips у Julia.; * високу продуктивність;
* спеціалізацію коду під конкретні типи;
* ефективні чисельні обчислення;
* можливість писати високорівневий код без великої втрати швидкості;
* оптимізації на рівні компілятора.;== Масиви ==
Multiple dispatch сприяє:
Julia іноді порівнюють із C++ у високопродуктивних задачах.; * matrix computations;
* deep learning;
* simulations;
* numerical kernels;
* parallel algorithms;
* scientific computing;
* high-performance workloads.; Julia і R перетинаються в статистиці й data science.;<syntaxhighlight lang="julia">
using CSV
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
== Див.; додатково ==
println(value)
println(sol)
* compilation latency;
* time to first plot;
* time to first execution.; end
<syntaxhighlight lang="julia">
plot(x, y, title = "Quadratic function", label = "x^2")
)
x = A \ b
numbers = [1, 2, 3, 4, 5]
y = x .^ 2
'''Практична роль:''' DifferentialEquations.jl є собою однією з ключових причин популярності Julia у scientific computing.; Modules допомагають організувати код.;== Plots.jl ==
* linear programming;
* mixed-integer programming;
* nonlinear optimization;
* operations research;
* logistics optimization;
* energy systems;
* finance optimization;
* scheduling;
* resource allocation.;<syntaxhighlight lang="julia">
for value in numbers
@objective(model, Min, (x - 3)^2)
</syntaxhighlight>
- персональними даними;
- медичними даними;
- фінансовими datasets;
- експериментальними даними;
- геоданими;
- приватними CSV;
- логами;
- API tokens;
- notebook outputs;
- generated reports;
- cached data;
- shared research environments.;== Коли варто використовувати Julia ==
Явне зазначення типу:
Julia поєднує зручність мов на кшталт Python, R або MATLAB із продуктивністю, близькою до компільованих мов у багатьох чисельних задачах.; Практична роль: Julia підходить для задач, де потрібно масштабувати обчислення на багато ядер, процесів або GPU.;== Обмеження Julia ==
user = User("Alice", 25)
Практична роль: якісна документація особливо важлива для наукових бібліотек, де користувач системи має розуміти припущення й одиниці вимірювання.;<syntaxhighlight lang="julia">
Цикл по масиву:
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
'''MLJ.jl''' — machine learning framework для Julia.; * Julia Packages documentation.; end
== Testing ==
y = sin.(x)
Короткий тернарний оператор:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
</div>
'''Практична роль:''' MLJ.jl орієнтований на класичний machine learning і структуровані ML workflow в Julia.; Julia
function square(x)
println(i)
status = age >= 18 ?;== Безпека Julia-проєктів ==
<syntaxhighlight lang="julia">
using DataFrames
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== Project.toml і Manifest.toml ==
println(add(2, 3))
* Jupyter Notebook;
* Pluto.jl;
* VS Code notebooks.; MATLAB
Julia і R
Matrix:
active = [true, false, true]
- syntax highlighting;
- REPL integration;
- debugging;
- workspace view;
- plot pane;
- package environment support;
- code navigation;
- notebook support.;</syntaxhighlight>
DifferentialEquations.jl
end Immutable struct:
println(sum_value)
Pluto.jl
Висновок: C++ дає глибший контроль, а Julia часто надає можливість швидше створити продуктивний науковий код.; Запис CSV: prob = ODEProblem(f, u0, tspan)
struct User
Flux.jl — бібліотека для machine learning і deep learning у Julia.; * Документація CSV.jl.;<syntaxhighlight lang="julia">
println("Hello, world!") println(sum_of_squares(numbers)) @objective(model, Max, 3x + 2y)
Хороші практики Julia
`Project.toml` описує залежності проєкту.; !;== Паралельні обчислення == Приклад:
Flux.jl
return 0.0
Приклад:
- аналізу даних;
- графіків;
- машинного навчання;
- оптимізації;
- диференціальних рівнянь;
- статистики;
- GPU;
- роботи з файлами;
- web API;
- тестування;
- документації.;
Небезпека: чисельний код має змогу давати неправильний, але правдоподібний результат.; Лінійна алгебра важлива для: Broadcasting надає можливість застосувати операцію поелементно.; Приклад потоків:
Умови
- писати функції, а не весь код у global scope;
- уникати type instability;
- контролювати allocations;
- використовувати concrete types;
- не зловживати abstract fields;
- профілювати код;
- використовувати broadcasting;
- правильно працювати з масивами;
- не копіювати великі інформаційні дані без потреби;
- перевіряти `@time`, `@btime`, profiler.; * Julia
- Мова програмування Julia
- Julia programming language
- Програмування
- Scientific computing
- High-performance computing
- Data Science
- Machine Learning
- Multiple dispatch
- JIT compilation
- Numerical computing
- Optimization
- DifferentialEquations.jl
- JuMP.jl
- Документація