TL;DR
En bref : Julia vous offre la facilité de Python avec la vitesse de C - sans compromis.
Points forts :
- Aussi rapide que C, aussi facile que Python
- Conçu pour le calcul scientifique et l’IA
- Multiple dispatch comme paradigme central
- Excellente interopérabilité avec Python, C, R
Philosophy
Julia a été conçu pour résoudre le “problème des deux langages” :
- Rapide par défaut - Compilé JIT, pas besoin de réécrire en C pour les performances
- Multiple dispatch - Les fonctions se spécialisent sur tous les types d’arguments, pas seulement le premier
- Adapté aux maths - Opérateurs Unicode, syntaxe matricielle, broadcasting
- Composable - Les packages fonctionnent ensemble de manière fluide
Julia est ce que NumPy serait s’il était un langage.
Quick Start
Install
# Avec juliaup (recommandé)
curl -fsSL https://install.julialang.org | sh
# macOS
brew install julia
# Ou télécharger depuis julialang.org
Verify (latest: 1.12)
julia --version # julia version 1.12.0
First Program
Créez hello.jl :
println("Hello, World!")
julia hello.jl
Julia REPL
julia
julia> 1 + 1
2
julia> sqrt(2)
1.4142135623730951
Language Essentials
Variables & Types
# Variables (pas de déclaration de type nécessaire)
name = "Alice"
age = 25
price = 19.99
active = true
# Annotations de type (optionnel)
x::Int = 10
# Arrays
numbers = [1, 2, 3]
matrix = [1 2 3; 4 5 6] # Matrice 2x3
# Dictionaries
user = Dict("name" => "Alice", "age" => 25)
Control Flow
# if-else
if age >= 18
println("Adult")
elseif age >= 13
println("Teen")
else
println("Child")
end
# Ternaire
status = age >= 18 ? "adult" : "minor"
# Boucle for
for i in 1:5
println(i)
end
# Boucle while
while count > 0
count -= 1
end
Functions
# Fonction standard
function greet(name)
return "Hello, $name!"
end
# Forme courte
greet(name) = "Hello, $name!"
# Fonction anonyme
add = (a, b) -> a + b
# Multiple dispatch (la fonctionnalité clé !)
function process(x::Int)
println("Integer: $x")
end
function process(x::String)
println("String: $x")
end
process(42) # Integer: 42
process("hello") # String: hello
Broadcasting
# Appliquer une fonction élément par élément avec .
x = [1, 2, 3]
x .+ 1 # [2, 3, 4]
x .^ 2 # [1, 4, 9]
sin.(x) # [sin(1), sin(2), sin(3)]
# Fonctionne avec n'importe quelle fonction
f(a, b) = a + b
f.(x, 10) # [11, 12, 13]
Structs
# Struct immuable (par défaut)
struct Point
x::Float64
y::Float64
end
p = Point(1.0, 2.0)
# p.x = 3.0 # Erreur ! Immuable
# Struct mutable
mutable struct MutablePoint
x::Float64
y::Float64
end
mp = MutablePoint(1.0, 2.0)
mp.x = 3.0 # OK
Gotchas
1-based indexing
arr = [10, 20, 30]
arr[1] # 10 (pas 0 !)
arr[end] # 30
First run is slow (JIT compilation)
# Le premier appel compile la fonction
@time sum([1,2,3]) # 0.05s (inclut la compilation)
# Le deuxième appel est rapide
@time sum([1,2,3]) # 0.000001s
Arrays are column-major
A = [1 2 3; 4 5 6] # Matrice 2x3
# Itérer colonne par colonne pour les performances
for j in 1:3, i in 1:2
println(A[i, j])
end
Global variables are slow in loops
# Lent
x = 0
for i in 1:1000000
global x += i # Accède au global
end
# Rapide - utiliser des fonctions
function sum_loop()
x = 0
for i in 1:1000000
x += i
end
x
end
When to Choose
Idéal pour :
- Calcul scientifique
- Machine learning (Flux.jl)
- Simulations numériques
- Data science avec besoins de performance
Moins adapté pour :
- Développement web (utilisez JavaScript, Python)
- Applications mobiles
- Petits scripts (temps de démarrage)
Comparaison :
| Aspect | Julia | Python | MATLAB |
|---|---|---|---|
| Vitesse | Rapide | Lent | Moyen |
| Syntaxe | Propre | Propre | Verbose |
| Coût | Gratuit | Gratuit | Cher |
| Libs ML | En croissance | Mature | Limité |
Next Steps
Ecosystem
Package Management
# Dans REPL, appuyez sur ] pour le mode Pkg
] add DataFrames
] add Plots
] status
# Ou programmatiquement
using Pkg
Pkg.add("DataFrames")
Popular Packages
- Données : DataFrames.jl, CSV.jl
- Visualisation : Plots.jl, Makie.jl
- ML : Flux.jl, MLJ.jl
- Scientifique : DifferentialEquations.jl, JuMP.jl