Перейти до вмісту

Julia

Матеріал з K2 ERP Wiki

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


Функції в Julia можна писати в короткому або повному стилі.;

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)

</syntaxhighlight> name::String println(x) total += value^2

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))

  • швидких обчислень;
  • перевірки функцій;
  • експериментів;
  • роботи з пакетами;
  • налагодження;
  • навчання;
  • аналізу даних;
  • дослідницького програмування.; x = rand(1000)
Функція має змогу повертати `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.jl

export add Використання:

</div>

== Packages ==

Можливі проблеми:

function sum_values(x)
== Julia і C++ ==

</syntaxhighlight>

println(det(A)) Для пакетів часто використовують Documenter.jl.; * бібліотек;

  • моделей;
  • чисельних алгоритмів;
  • refactoring;
  • перевірки крайових випадків;
  • reproducible research.; Fortran історично важливий для scientific computing, а Julia є собою сучаснішою альтернативою для частини задач.;

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 і підходить для:

  • висока продуктивність;
  • JIT-компіляція;
  • multiple dispatch;
  • зручний математичний синтаксис;
  • сильна робота з масивами;
  • продуктивні цикли;
  • хороша супровід лінійної алгебри;
  • пакети для диференціальних рівнянь;
  • пакети для оптимізації;
  • scientific machine learning;
  • паралельні обчислення;
  • GPU support;
  • package environments;
  • open-source програмний пакет;
  • зручність для research і prototyping.;
     return 1.0
    '''Підказка:''' у Julia-прикладах істотно дивитися на типи, broadcasting, allocations і те, чи код написаний усередині функцій.; Для продуктивності потрібно розуміти типи, allocations і структуру обчислень.;</div>
    Приклад ідеї:
    
    Julia застосовується для:
    
  • наукових обчислень;
  • чисельного моделювання;
  • high-performance computing;
  • data science;
  • машинного навчання;
  • статистики;
  • оптимізації;
  • диференціальних рівнянь;
  • симуляцій;
  • фінансового моделювання;
  • біоінформатики;
  • економетрики;
  • фізичного моделювання;
  • обробки сигналів;
  • паралельних і розподілених обчислень.; println(df)
for i in 1:5 Flux застосовується для: x = A \ b
ключовий фокус Чисельні обчислення, моделювання, HPC Статистика, аналітичні інструменти, формування звітів
Табличні інформаційні дані DataFrames.jl data.frame, tibble, tidyverse
Візуалізація Plots.jl, Makie.jl ggplot2, lattice, Shiny
Статистика Сильна, але менша програмний пакет Дуже зріла статистична програмний пакет
Продуктивність Сильна для чисельного коду Часто потребує векторизації або compiled code

</syntaxhighlight> println(first(df, 5))

Висновок

Практична роль: функції в Julia є собою головним способом організації коду й основою multiple dispatch.; `Manifest.toml` фіксує точні версії пакетів і їхніх залежностей.;

Функції

</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),
Практична роль: DataFrames.jl є собою центральним інструментом Julia для роботи з таблицями, подібно до pandas у Python або data.frame/tibble в R.;
Перевага: Julia добре підходить для задач, де Python або R зручні для прототипу, але продуктивність стає критичною.;

переважні аспекти 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;
  • контролювати версії пакетів.;
DataFrames.jl — ключовий пакет Julia для табличних даних.;
</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

істотно: Julia не є собою без ускладнень “ще однією мовою для скриптів”.; Практична роль: REPL робить Julia зручною для дослідницької роботи, де потрібно оперативно перевіряти ідеї.;
return 0.0

Приклад:

  • аналізу даних;
  • графіків;
  • машинного навчання;
  • оптимізації;
  • диференціальних рівнянь;
  • статистики;
  • GPU;
  • роботи з файлами;
  • web API;
  • тестування;
  • документації.;

Небезпека: чисельний код має змогу давати неправильний, але правдоподібний результат.; Лінійна алгебра важлива для: Broadcasting надає можливість застосувати операцію поелементно.; Приклад потоків:

Умови