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

Julia

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

df = DataFrame(

Turing.jl

df = DataFrame(

println("Minor")

Packages

  • наукових обчислень;
  • чисельного моделювання;
  • high-performance computing;
  • data science;
  • машинного навчання;
  • статистики;
  • оптимізації;
  • диференціальних рівнянь;
  • симуляцій;
  • фінансового моделювання;
  • біоінформатики;
  • економетрики;
  • фізичного моделювання;
  • обробки сигналів;
  • паралельних і розподілених обчислень. Рекомендації:

Практична роль: struct дає можливість описувати власні типи даних для моделей, симуляцій, параметрів і доменної логіки. * інтерактивних графіків;

  • 2D-візуалізації;
  • 3D-візуалізації;
  • наукової графіки;
  • анімацій;
  • великих наборів даних;
  • publication-quality visualizations.== Змінні ==

optimize!(model)

Це часто називають:

'''Makie.jl'''  потужна платформа візуалізації в Julia. Лінійна алгебра важлива для:

@objective(model, Min, (x - 3)^2)

</syntaxhighlight>

Практична роль: modules дозволяють структурувати більші Julia-проєкти й контролювати простір імен. * Документація Flux.jl.

Проста оптимізація через JuMP

Julia здатна бути не найкращим вибором для: Приклад:

</syntaxhighlight>

else
Julia має власну систему пакетів.
 active = [true, false, true]
</div>

</syntaxhighlight>

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

x * x
  • `Project.toml`;
  • `Manifest.toml`.
  • multithreading;
  • multiprocessing;
  • distributed computing;
  • GPU computing;
  • cluster computing;
  • parallel maps;
  • asynchronous tasks.
Головне правило: хороший Julia-код має бути не лише швидким, а й відтворюваним, протестованим і зрозумілим з погляду математики. Небезпека: чисельний код здатна давати неправильний, але правдоподібний результат. Критерій
println(first(df, 5))
'''Основна ідея:''' Julia дає можливість писати науковий і чисельний код у високорівневому стилі, але без постійної потреби переписувати критичні частини на C, C++ або Fortran.=== Робота з таблицею ===

Практична роль: у Julia типи важливі для продуктивності, multiple dispatch і зрозумілої структури чисельного коду. println("Adult")

println(numbers [1])

Практична роль: Plots.jl зручний для швидкої візуалізації результатів обчислень і моделей. `Project.toml` описує залежності проєкту.
Julia має вбудований пакет `Test`.
Практична роль: у Julia краще вимірювати продуктивність інструментами, а не покладатися на інтуїцію.
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">

Сильна ніша Julia: scientific machine learning — один із напрямів, де Julia має особливо природну перевагу. * Julia Manual. DataFrames.jl застосовується для для: Практична роль: тести важливі не лише для web або backend, а й для наукового коду, де помилка здатна виглядати як “правдоподібний” результат.</syntaxhighlight>

* Документація Turing.jl. numbers = [1, 2, 3, 4, 5]

Пакети встановлюються через package manager. * бібліотек;

  • моделей;
  • чисельних алгоритмів;
  • refactoring;
  • перевірки крайових випадків;
  • reproducible research.

plot(x, y, label = "sin(x)", title = "Sine function")

Modules допомагають організувати код. Julia має вбудований docstring-стиль. Практична роль: notebooks зручні для досліджень, навчання, пояснення моделей і інтерактивної аналітики. model = Chain(

First time to run

Приклад:

println(x) println(sol)

</syntaxhighlight>

Загальний SEO-опис

* line charts;
* scatter plots;
* histograms;
* heatmaps;
* quick visualization;
* exploratory analysis;
* наукових графіків. * висока продуктивність;
* JIT-компіляція;
* multiple dispatch;
* зручний математичний синтаксис;
* сильна робота з масивами;
* продуктивні цикли;
* хороша технічна підтримка лінійної алгебри;
* пакети для диференціальних рівнянь;
* пакети для оптимізації;
* scientific machine learning;
* паралельні обчислення;
* GPU support;
* package environments;
* open-source ERP-платформа;
* зручність для research і prototyping. Крапка перед оператором або функцією означає поелементне сценарії використання.== Julia у VS Code ==

'''JuMP.jl'''  пакет для математичної оптимізації в Julia.== Benchmarking ==

* чисельних методів;
* машинного навчання;
* фізики;
* оптимізації;
* статистики;
* симуляцій;
* інженерних розрахунків. end
Рівень мови Високорівнева, динамічна з JIT Системна, статично компільована
Продуктивність Висока для багатьох чисельних задач Дуже висока, максимальний контроль
Швидкість розробки Зазвичай вища Часто нижча через складність
Контроль пам’яті Garbage collection Ручний контроль, RAII
Ніша Scientific computing, modeling, research Systems, engines, libraries, low-level HPC

Умови

Для вимірювання продуктивності часто використовують BenchmarkTools.jl. Головна думка: Julia — це мова для продуктивного наукового програмування.== LinearAlgebra == square(10)

product = ["A", "B", "C"],
end

Приватність даних

Mutable struct:

  • Jupyter Notebook;
  • Pluto.jl;
  • VS Code notebooks. println(matrix)

`Manifest.toml` фіксує точні версії пакетів і їхніх залежностей. Fortran model = Model(HiGHS.Optimizer)

Практична роль: JuMP.jl робить Julia сильною мовою для оптимізації, operations research і математичного планування.

Лінійна алгебра

name::String

Популярні варіанти:

Потрібно обережно працювати з:

REPL застосовується для для:

* ODE;
* SDE;
* DAE;
* PDE;
* delay differential equations;
* фізичного моделювання;
* біологічних моделей;
* інженерних систем;
* simulation workflows;
* scientific machine learning.== Безпека Julia-проєктів ==

</div>

Краще:

println(sum_value)

* linear programming;
* mixed-integer programming;
* nonlinear optimization;
* operations research;
* logistics optimization;
* energy systems;
* finance optimization;
* scheduling;
* resource allocation. Поширені помилки:

Запис CSV:

 end
== Тематичні мітки ==
=== Обчислення суми квадратів ===

</div>

'''Pluto.jl'''  notebook-середовище для Julia з реактивною моделлю виконання. * Документація JuMP.jl.<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
"""
! * Документація Makie.jl. end
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
</div>

<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">

* `Int`;
* `Float64`;
* `Bool`;
* `String`;
* `Char`;
* `Vector`;
* `Matrix`;
* `Tuple`;
* `NamedTuple`;
* `Dict`;
* `Struct`. else
Julia має обмеження. '''Практична роль:''' DifferentialEquations.jl виступає як однією з ключових причин популярності Julia у scientific computing. * Матеріали щодо scientific computing, HPC, numerical methods і performance tips у Julia. '''Критично:''' notebook або research script здатна містити секрети, шляхи до приватних даних або небезпечний код так само, як production-застосунок. Типи можна вказувати явно, але часто Julia виводить їх сама. Це означає, що код компілюється під час виконання, а не інтерпретується постійно рядок за рядком. '''критично:''' для відтворюваних обчислень потрібно зберігати середовище проєкту, інакше результати можуть змінюватися через оновлення версій пакетів. add(a, b) = a + b

Julia має сильну підтримку лінійної алгебри.

julia> 2 + 3

sum_value += i

</syntaxhighlight>

  • compilation latency;
  • time to first plot;
  • time to first execution.

</syntaxhighlight>

Приклад:

Тести корисні для:

Короткий тернарний оператор: Суть Julia: багато сили мови побудовано навколо multiple dispatch — функції поводяться по-різному залежно від типів аргументів.</syntaxhighlight>

struct User

Вона застосовується для для:

x = [1, 2, 3] end

Julia REPL

using JuMP

@variable(model, x >= 0)

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

* аналізу даних;
* графіків;
* машинного навчання;
* оптимізації;
* диференціальних рівнянь;
* статистики;
* GPU;
* роботи з файлами;
* web API;
* тестування;
* документації. '''Turing.jl'''  пакет для probabilistic programming у Julia. println(area(5))

<syntaxhighlight lang="julia">

 return 1.0

'''MLJ.jl'''  machine learning framework для Julia. Julia
'''Головна перевага:''' Julia зменшує розрив між прототипом і продуктивним чисельним кодом.</div>
Julia має функції ERP для паралельного й розподіленого виконання.

Поширені напрями:

Масиви

Project.toml і Manifest.toml

"""

function stable(x) Можливі проблеми: @btime sum($x)

</syntaxhighlight>

C++

</syntaxhighlight>

Практична роль: CSV.jl часто застосовується для разом із DataFrames.jl для імпорту й експорту табличних даних.

@constraint(model, x + y <= 10)

optimize!(model)

println(value(x)) println(value(y)) </syntaxhighlight> export add

Типи

Коли Julia здатна бути невдалим вибором

using Plots

<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<syntaxhighlight lang="julia">
end

CSV.write("output.csv", df)

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

Простий приклад:

! * matrix computations;
* deep learning;
* simulations;
* numerical kernels;
* parallel algorithms;
* scientific computing;
* high-performance workloads. Підключення пакета:
model = Model(HiGHS.Optimizer)

println("Hello, world!")

area(width::Number, height::Number) = width * height

Пакети Julia використовуються для:

<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
Pluto.jl корисний для:

'''Практична роль:''' Makie.jl підходить для складнішої та інтерактивної наукової візуалізації.<syntaxhighlight lang="julia">
function unstable(x)
@variable(model, x >= 0)

for value in numbers

)

<syntaxhighlight lang="julia">

* syntax highlighting;
* REPL integration;
* debugging;
* workspace view;
* plot pane;
* package environment support;
* code navigation;
* notebook support.</div>
Pkg.add("DataFrames")
Щоб Julia-код був швидким, критично писати його з урахуванням типів і алокацій.== Scientific Machine Learning ==

Julia поєднує зручність мов на кшталт Python, R або MATLAB із продуктивністю, близькою до компільованих мов у багатьох чисельних задачах. Критерій
x = 0:0.1:10

tspan = (0.0, 1.0)

Приклад:
sum_value = 0

'''Головна перевага:''' Julia часто дає можливість залишити продуктивний код у самій Julia, не переписуючи його на C або Fortran.== JIT compilation ==

 name = ["Alice", "Bob", "Carol"],

)

'''Практична роль:''' у Julia не обов’язково уникати циклів заради швидкості.<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
</div>
{| class="wikitable"

Функції в Julia можна писати в короткому або повному стилі. Julia підтримує Unicode-імена, тому в науковому коді можна використовувати математичні символи. Критерій
using DifferentialEquations

end

 price = [10.0, 20.0, 15.0],
Основні конкурентні переваги Julia:

== GPU computing ==

== Хороші практики Julia ==
println(α + β)
amount::Float64 = 19.99

Julia іноді порівнюють із C++ у високопродуктивних задачах. '''Практична роль:''' Turing.jl робить Julia корисною для байєсівського моделювання й імовірнісного програмування.<syntaxhighlight lang="julia">

Приклад:
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

Threads.@threads for i in 1:10

Практична роль: MLJ.jl орієнтований на класичний machine learning і структуровані ML workflow в Julia. Flux застосовується для для:

</syntaxhighlight> end

active = true MLJ оптимізує:

Julia і R

Джерела

Типові помилки початківців

Makie.jl

using Plots

x = 1:10

Паралельні обчислення

Dense(5 => 1)
Приклад ідеї:

println(add(2, 3)) A = [1.0 2.0; 3.0 4.0]

value::Int

</syntaxhighlight>

total += value

end Суть прикладу: Julia дає можливість оперативно писати простий код, але водночас орієнтована на складні чисельні задачі. Вона поєднує високорівневий синтаксис, multiple dispatch, JIT-компіляцію, сильну роботу з масивами, лінійну алгебру, оптимізацію, диференціальні рівняння, data science і high-performance computing. * 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.

Struct

Перевага: package manager Julia вбудований у мову й добре підходить для reproducible scientific projects. Тому потрібні тести, перевірки й контроль припущень.== Приклади задач на Julia ==

Для чого застосовується для Julia

add(a, b) = a + b

ліцензійний пакет Open-source мова Комерційна платформа
Синтаксис Близький до математичного стилю Дуже зручний для матриць
Продуктивність Висока при правильному коді Сильна в чисельних задачах
Пакети Open-source ERP-платформа Julia Toolbox-екосистема MATLAB
Використання Research, HPC, open scientific computing Інженерія, освіта, промисловість, моделювання

Приклад: b = [5.0, 5.0]

 for value in x

name = "Alice"

</div>
</div>
'''DataFrames.jl'''  базовий пакет Julia для табличних даних. "adult" : "minor"
! Приклад:
 age::Int

Масиви  одна з ключових структур Julia. '''Практична роль:''' VS Code часто виступає як основним IDE-вибором для Julia-розробки.

Julia і MATLAB

  • перевірки оптимізацій;
  • пошуку повільних місць;
  • оцінки allocations;
  • порівняння алгоритмів;
  • high-performance code review. Приклад:

Приклад: Умови в Julia пишуться через `if`, `elseif`, `else`. return total

Явне зазначення типу: using CSV Типові сценарії використання Julia:

Julia має динамічну мову з сильною системою типів. Висновок: Python залишається ширшим універсальним вибором, а Julia особливо сильна там, де важливі продуктивні чисельні обчислення й scientific computing.
Для продуктивності потрібно розуміти типи, allocations і структуру обчислень. * Документація MLJ.jl. * Документація DifferentialEquations.jl. * Julia Packages documentation. Змінні в Julia створюються простим присвоєнням. println(df)

println(sum_of_squares(numbers))

CSV.jl застосовується для для читання й запису CSV-файлів. Помилка: очікувати, що Julia автоматизовано зробить будь-який код швидким. * побудова чисельних моделей;

  • розв’язування систем рівнянь;
  • обчислювальна фізика;
  • математична оптимізація;
  • machine learning;
  • deep learning;
  • data analysis;
  • статистичне моделювання;
  • симуляції;
  • agent-based modeling;
  • фінансові розрахунки;
  • обробка великих масивів;
  • GPU-обчислення;
  • research notebooks;
  • production scientific computing. |-
історія продукту Сучасна мова Класична мова наукових обчислень
Продуктивність Висока Дуже висока в чисельному HPC
Синтаксис Сучасніший і гнучкіший Традиційний для scientific code
Legacy Менша база Величезна legacy-база в HPC
Пакети Активна open-source ERP-платформа Багато старих і перевірених бібліотек

</syntaxhighlight> ! x = rand(1000)

if x > 0

Multiple dispatch

Функції

Правило: інформаційні дані в Julia-проєкті потрібно захищати так само уважно, як код і результати моделювання. return 1

Julia і Fortran

</syntaxhighlight>

Приклад потоків:

f = x -> x^2

  • табличного аналізу;
  • CSV-даних;
  • групування;
  • фільтрації;
  • трансформацій;
  • data science;
  • статистики;
  • підготовки даних для моделей. Висновок: R часто краща для класичної статистичної аналітики й звітності, а Julia — для продуктивного моделювання й чисельних методів. println(count)

x = A \ b count = 10

Matrix:

return 0.0

Приклад:

  • високу продуктивність;
  • спеціалізацію коду під конкретні типи;
  • ефективні чисельні обчислення;
  • можливість писати високорівневий код без великої втрати швидкості;
  • оптимізації на рівні компілятора. Критерій

через Перевага Pluto.jl: reactive execution користувачі можуть зменшити ризик “застарілих” результатів у notebook. R

A = [3.0 2.0; 1.0 2.0]

println(area(4, 6))
Функція здатна повертати `Int` або `Float64`.== Pluto.jl ==

На відміну від деяких високорівневих мов, цикли в Julia можуть бути продуктивними, якщо написані правильно. * працювати з моделями через єдиний інтерфейс;
* тренувати моделі;
* виконувати evaluation;
* робити tuning;
* порівнювати алгоритми;
* створювати ML pipelines. price = 19.99
println(x)

'''Підказка:''' у Julia-прикладах критично дивитися на типи, broadcasting, allocations і те, чи код написаний усередині функцій. Julia-проєкти теж потребують уваги до безпеки. * Документація CSV.jl.<syntaxhighlight lang="julia">
Приклад:

using DataFrames

<syntaxhighlight lang="julia">

* писати код у функціях;
* уникати type instability;
* використовувати package environments;
* зберігати `Project.toml` і `Manifest.toml`;
* писати тести;
* використовувати BenchmarkTools;
* контролювати allocations;
* профілювати повільний код;
* документувати математичні припущення;
* вказувати одиниці вимірювання;
* перевіряти крайові випадки;
* уникати глобальних змінних у продуктивному коді;
* не оптимізувати без вимірювання;
* розділяти research notebooks і library code;
* контролювати версії пакетів. * Документація Plots.jl.<syntaxhighlight lang="julia">

 return 1.0

'''Практична роль:''' якісна документація особливо важлива для наукових бібліотек, де користувач системи має розуміти припущення й одиниці вимірювання. Критерій
 println(i)
counter = Counter(0)
<syntaxhighlight lang="julia">
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

y = x .^ 2
Julia часто використовують у notebooks. count = count + 1
<syntaxhighlight lang="bash">

@objective(model, Max, 3x + 2y)

== Type stability ==
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

prob = ODEProblem(f, u0, tspan)
VS Code виступає як популярним середовищем для Julia.

)

return a + b

CSV.jl

mutable struct Counter

! df.total = df.price .* df.quantity

end

status = age >= 18 ? Сценарії:

Benchmarking потрібен для: using DataFrames

Підходи:
</div>

 end
</div>
end

</div>

'''критично:''' Julia не виступає як без зусиль “ще однією мовою для скриптів”. Julia
{| class="wikitable"

<syntaxhighlight lang="julia">

5

* frontend development;
* mobile development;
* простих web CRUD-систем;
* маленьких одноразових CLI-скриптів, де startup time критичний;
* команд без досвіду scientific computing;
* проєктів, де вся інфраструктура побудована на Python/R/Java;
* задач, де потрібна найбільша можлива кількість готових ML production-бібліотек;
* enterprise-систем, де важливі стандартні кадри й mature tooling.

Увага: Julia має ML-екосистему, але Python усе ще має значно ширшу індустріальну AI/ML-екосистему. b = [1.0, 2.0] using BenchmarkTools

Julia здатна використовувати GPU через відповідні пакети.</syntaxhighlight>

  • Офіційна документація Julia.
    <syntaxhighlight lang="julia">
    Повний стиль:
    
    function sum_values(x)
    
    using DataFrames
    
    <syntaxhighlight lang="julia">
    
    </div>
    '''Практична роль:''' REPL робить Julia зручною для дослідницької роботи, де потрібно оперативно перевіряти ідеї. '''Type stability''' означає, що компілятор здатна передбачити тип результату функції. * писати узагальнений код;
    * створювати математичні API;
    * розширювати поведінку типів;
    * уникати зайвої ієрархії класів;
    * будувати composable libraries;
    * ефективно для бізнесу спеціалізувати код.</div>
    
    using Test
    
    == Loops ==
    y = sin.(x)
    == Julia і Python ==
    

end

using .MathUtils ! x = 10 df = CSV.read("data.csv", DataFrame)

println(df)

Julia добре підходить для:

`struct` застосовують, коли потрібно для створення власних типів. numbers = [10, 20, 30]

Зазвичай застосовується для Julia extension, яка дає:

Приклад у REPL:

* compilation latency;
* менша ERP-платформа, ніж у Python;
* менша кількість розробників на ринку;
* не всі пакети однаково зрілі;
* production deployment здатна вимагати досвіду;
* memory usage здатна бути важливим фактором;
* type instability здатна погіршувати швидкість;
* startup time здатна заважати коротким CLI-скриптам;
* не найкращий вибір для frontend або mobile;
* деякі enterprise-команди можуть не мати Julia-експертизи. Julia

module MathUtils
Julia часто порівнюють із Python.<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
<syntaxhighlight lang="julia">

end

</syntaxhighlight>

  • neural networks;
  • gradient-based learning;
  • differentiable programming;
  • research ML;
  • custom models;
  • scientific machine learning;
  • deep learning experiments. sol = solve(prob)
  • CUDA support;
  • GPU arrays;
  • scientific kernels;
  • ML workloads. matrix = [1 2 3; 4 5 6]

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

using LinearAlgebra

Dense(10 => 5, relu),
using HiGHS

Flux.jl

Julia застосовується для для: Julia — це сучасна мова програмування для продуктивних наукових і чисельних обчислень. Перевага: Julia добре підходить для задач, де Python або R зручні для прототипу, але продуктивність стає критичною. α = 0.05

function add(a, b)
Приклад:

== Broadcasting ==
@variable(model, y >= 0)
Для пакетів часто використовують Documenter.jl. using Flux
end

end

'''Висновок:''' MATLAB має сильні toolbox-и й довгу історію в інженерії, а Julia приваблива open-source підходом і високопродуктивним загальним програмуванням. |-
| базовий фокус
| Чисельні обчислення, моделювання, HPC
| Статистика, аналітичні інструменти, формування звітів
|-
| Табличні інформаційні дані
| DataFrames.jl
| data.frame, tibble, tidyverse
|-
| Візуалізація
| Plots.jl, Makie.jl
| ggplot2, lattice, Shiny
|-
| Статистика
| Сильна, але менша ERP-платформа
| Дуже зріла статистична ERP-платформа
|-
| Продуктивність
| Сильна для чисельного коду
| Часто потребує векторизації або compiled code
|}

Запуск файлу:
'''Multiple dispatch'''  одна з центральних концепцій Julia. using DataFrames

end
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
 if x > 0
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
Поширені типи:
! return total

using JuMP

<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

* швидких обчислень;
* перевірки функцій;
* експериментів;
* роботи з пакетами;
* налагодження;
* навчання;
* аналізу даних;
* дослідницького програмування. * писати функції, а не весь код у global scope;
* уникати type instability;
* контролювати allocations;
* використовувати concrete types;
* не зловживати abstract fields;
* профілювати код;
* використовувати broadcasting;
* правильно працювати з масивами;
* не копіювати великі інформаційні дані без потреби;
* перевіряти `@time`, `@btime`, profiler. Приклад:
<syntaxhighlight lang="julia">

Коли варто використовувати Julia

Практична роль: Julia підходить для задач, де потрібно масштабувати обчислення на багато ядер, процесів або GPU. Її головна ніша — продуктивні обчислення, моделювання й наукові workflow. Водночас Julia має свої обмеження: compilation latency, меншу екосистему порівняно з Python, потребу в розумінні типів і не завжди ідеальну придатність для загальної web або enterprise-розробки. ! Julia

 else

for i in 1:5
println(x .^ 2)

end
'''Висновок:''' C++ дає глибший контроль, а Julia часто дає можливість швидше створити продуктивний науковий код.<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

 quantity = [2, 1, 5]

Broadcasting дає можливість застосувати операцію поелементно. Flux.jl — бібліотека для machine learning і deep learning у Julia.

критично: Unicode здатна зробити математичний код ближчим до формул, але в командному коді потрібно зберігати читабельність для всіх розробників.== Висновок == Vector:

for value in values

counter.value += 1

Julia особливо корисна для дослідників, інженерів, data scientists і розробників наукового ПЗ, яким потрібно оперативно створювати моделі й водночас отримувати високу продуктивність. Immutable struct:

  • Bayesian inference;
  • probabilistic models;
  • MCMC;
  • uncertainty modeling;
  • statistical inference;
  • hierarchical models;
  • наукових досліджень. Вона особливо корисна в дослідницьких і технічних середовищах, де потрібно будувати моделі, працювати з матрицями, виконувати оптимізацію, запускати симуляції, аналізувати інформаційні дані й масштабувати обчислення. Вона найкраще розкривається там, де потрібні чисельні методи, моделювання, оптимізація, симуляції й швидкий research-to-production workflow.== Modules ==
add(a, b)

numbers = [1, 2, 3, 4, 5]

total += value^2

using HiGHS

* залежності;
* сторонні пакети;
* виконання notebook-коду;
* роботу з файлами;
* API keys;
* доступ до баз даних;
* data privacy;
* shell commands;
* serialized data;
* результати симуляцій, які впливають на рішення для бізнесу;
* production deployment;
* доступи до HPC-кластерів або GPU-серверів. x = A \ b
<syntaxhighlight lang="julia">
Приклад:

using Pkg

застосовується для для:

* писати весь код у global scope;
* не враховувати індексацію з 1;
* ігнорувати type instability;
* не використовувати `Project.toml`;
* не фіксувати версії пакетів;
* очікувати миттєвого першого запуску;
* робити зайві allocations;
* копіювати великі масиви без потреби;
* плутати broadcasting і matrix operations;
* не писати тести для чисельних функцій;
* не перевіряти одиниці вимірювання;
* не профілювати повільний код;
* використовувати notebook як єдину форму production-коду.</div>
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">

Цикл по масиву:

Multiple dispatch оптимізує:

</div>
</div>
println(f(5))
u0 = 0.5

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

!</div>
Короткий стиль:
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">

<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

'''Практична роль:''' функції в Julia виступає як головним способом організації коду й основою multiple dispatch. '''Висновок:''' Fortran залишається важливим у legacy HPC, а Julia пропонує сучасніший дослідницький workflow із високою продуктивністю. '''Критично для швидкості:''' type instability здатна суттєво погіршити продуктивність Julia-коду. println(det(A))

JuMP застосовується для для:

* персональними даними;
* медичними даними;
* фінансовими datasets;
* експериментальними даними;
* геоданими;
* приватними CSV;
* логами;
* API tokens;
* notebook outputs;
* generated reports;
* cached data;
* shared research environments. |-
| базовий фокус
| Наукові й чисельні обчислення, HPC, моделювання
| Універсальна мова: web, automation, AI, data science
|-
| Продуктивність
| Висока для типізованого чисельного коду
| Часто потребує NumPy, C, Cython, Numba або бібліотек
|-
| ERP-платформа
| Сильна в scientific computing, але менша
| Дуже велика й зріла
|-
| ML/AI
| виступає як Flux, MLJ та інші інструменти
| Найширша індустріальна AI/ML-екосистема
|-
| Поріг входу
| Зручна, але потребує розуміння типів і компіляції
| Дуже популярна й проста для старту
|}

{{SEO
|title=Julia  мова програмування для наукових обчислень, data science, machine learning, HPC і чисельного моделювання
|description=Julia  Wiki-стаття про високопродуктивну мову програмування для наукових обчислень, аналізу даних, машинного навчання, оптимізації, чисельного моделювання та high-performance computing. Розглянуто синтаксис Julia, REPL, packages, JIT compilation, multiple dispatch, типи, масиви, DataFrames.jl, Plots.jl, Flux.jl, JuMP.jl, DifferentialEquations.jl, паралельні обчислення, переваги, обмеження і хороші практики.
|keywords=Julia, мова програмування Julia, Julia programming language, scientific computing, чисельні обчислення, high-performance computing, HPC, data science, machine learning, multiple dispatch, JIT compilation, Julia REPL, Julia packages, DataFrames.jl, Plots.jl, Flux.jl, JuMP.jl, DifferentialEquations.jl, Makie.jl, JuliaHub, програмування
|alternativeTo=повільні скрипти для чисельних обчислень; ручне переписування Python-коду на C або Fortran; MATLAB для частини наукових задач; R для частини чисельних workflow; складні C++ рішення для дослідницьких моделей; окремі мови для прототипу і production-обчислень; неефективні наукові notebook-процеси без продуктивного коду
}}
Plots.jl підтримує різні backends і підходить для:
Makie застосовується для для:

Приклад:

<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

Julia розроблена для задач, де важливі одночасно швидкість розробки й швидкість виконання.<syntaxhighlight lang="julia">
'''Практична роль:''' DataFrames.jl виступає як центральним інструментом Julia для роботи з таблицями, подібно до pandas у Python або data.frame/tibble в R. Добре типізовані цикли можуть бути дуже ефективними.

DifferentialEquations.jl — одна з найвідоміших бібліотек Julia для розв’язування диференціальних рівнянь. це високорівнева, високопродуктивна мова програмування, розроблена; так само реалізовано чисельного моделювання, data science, machine learning, оптимізації, статистики, симуляцій і high-performance computing виступає ключовою рисою наукових обчислень забезпечується через Julia. add(a, b) = a + b Julia використовує JIT-компіляцію через LLVM. * фізичних моделей;

  • біологічних систем;
  • цифрових двійників;
  • моделювання процесів;
  • neural differential equations;
  • hybrid modeling;
  • параметричної ідентифікації;
  • симуляцій із ML-компонентами. println(value)

DifferentialEquations.jl

Функції виступає як first-class values:

Fortran історично важливий для scientific computing, а Julia виступає як сучаснішою альтернативою для частини задач.== Plots.jl ==

println(sin.(x)) age::Int = 25

if age >= 18 </syntaxhighlight>

DataFrames.jl

β = 0.9

<syntaxhighlight lang="julia">

Julia часто розглядають як альтернативу MATLAB для частини наукових і чисельних задач. '''Pluto.jl''' особливо цікавий для reactive notebooks, де зміни в одній комірці автоматизовано оновлюють залежні результати. Python

== Notebooks ==
Повертає суму `a` і `b`. Неідеальний приклад:
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
using LinearAlgebra

</div>

== Обмеження Julia ==
'''Plots.jl'''  популярний пакет для побудови графіків. Окремо варто відзначити пам’яті, transfer між CPU і GPU і структури алгоритму.<syntaxhighlight lang="julia">

Приклад:

Потрібно контролювати:

  • навчальних матеріалів;
  • інтерактивних моделей;
  • демонстрацій;
  • research notebooks;
  • відтворюваних експериментів;
  • інтерактивних параметрів;
  • пояснення математичних моделей. Julia

критично: GPU-обчислення потребують уважного контролю типів. Під час першого виклику Julia здатна скомпілювати спеціалізовану версію функції для типу аргументу. Це дає Julia:

Performance tips

критично: Julia сильна у своїй ніші, але не виступає як універсальною заміною Python, Java, JavaScript або C++ для всіх типів розробки. Суть broadcasting: Julia дає можливість явно й ефективно для бізнесу застосовувати операції до всіх елементів масиву. * Документація DataFrames.jl. total = zero(eltype(x))

plot(x, y, title = "Quadratic function", label = "x^2")

</syntaxhighlight>

age = [25, 30, 28],

Практична порада: Julia варто обирати, коли головна задача — продуктивні обчислення, моделювання або науковий код, а не загальна web-розробка. Julia активно застосовується для в напрямі Scientific Machine Learning — поєднанні чисельного моделювання, диференціальних рівнянь, оптимізації й machine learning. MATLAB

println(value(x))

JuMP.jl

Головна сила: Julia має зручний і продуктивний синтаксис для матриць, векторів і лінійної алгебри. julia hello.jl

Рекомендовано:

</div>
Приклад:

'''Увага:''' у Julia індексація масивів починається з 1, як у MATLAB і R, а не з 0, як у C, Python або JavaScript. total = zero(eltype(values))

== MLJ.jl ==

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

Приклад:
function sum_of_squares(values)
function square(x)

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
Julia часто застосовується для для аналізу дослідницьких, фінансових, медичних або технічних даних. area(x::Number) = x * x

Перша програма на Julia

f(u, p, t) = 1.01u

Через JIT-компіляцію перший запуск функції здатна бути повільнішим, ніж наступні.== Документація ==

Testing

Практична порада: продуктивний Julia-код зазвичай пишуть усередині функцій, а не як великий набір глобальних команд.</syntaxhighlight> age = 20

Див. так само

Julia так само часто використовують інтерактивно через REPL або notebooks.

!

Julia-проєкти часто мають файли:
</div>

Julia і R перетинаються в статистиці й data science.

!== Julia і C++ ==

println(user.name)

REPL — інтерактивне середовище Julia, у якому можна вводити команди й одразу бачити результат. Цей підхід корисний для:

<syntaxhighlight lang="julia">

@test 2 + 3 == 5 @testset "Math tests" begin

@test sqrt(4) == 2

Графік функції

Приклад ідеї:

user = User("Alice", 25)