The Julia Language

Adrien Cosme
Ecosystèmes des langages de programmation
3 min readFeb 27, 2017

Langage de programmation, publié en 2012.

Juste un langage de plus ?

Julia mêle simplicité du codage haut niveau et performances des langages bas niveau. Certes il ne s’agit pas d’un langage ciblé comme R pour les statistiques ou encore SQL pour les bases de données, mais il est efficace pour une programmation plus classique. Il s’agit d’un langage jeune, donc en développement. Ses caractéristiques et performances vont donc évoluer.

Présentation de code :

La programmation est dynamique :

La déclaration des variables ressemble à Python : on ne précise pas le type, et on peut changer le type d’une variable.

a = 12                       # Int
a = "12" # réaffectation
b = 12.0 # Float
c = "Bonjour, ça zeste ?" # String
d = [12, 34, 45] # Array{Int64}
e = [12.0, 34, "Youhou !"] # Array{Any}

Les variables unicode sont autorisées :

α = 56
ΔΨ = 78 * α
toi = "K¬öba†‹f›"
println("Bonjour, $toi !")

Déclaration de fonction :

Les déclarations de fonctions peuvent se faire avec ou sans type, en forme courte, ou même en lambdas.

L’instruction end donne la fin de la fonction. La valeur retournée est la dernière instruction.

function add(a, b)
return a + b
end

function add(a::String, b::String)
"$a & $b" #la dernière instruction est la valeur de retour
end
f(x) = 42 * x^3

g = x -> 42 / x^6

Quelques caractéristiques :

Type-stability : un seul type peut être sorti par une méthode, peu importe ce que l’on donne comme paramètres. Julia est dynamique dans l’affectation des variable donc le type n’est pas fixe, mais n’a pas de souplesse quant à la sortie d’une méthode donnée.

exemple : la fonction puissance doit rendre un int64 (voir image ci-dessous)

Multiple dispatch : Julia utilise la programmation orientée objet, mais de manière différente que Java ou Python. Le multiple dispatch sépare l’appel de la fonction de la fonction elle meme. Julia regarde dans une table quelle fonction doit être appelée, selon les paramètres.

exemple :

Ici, la fonction avancer est definie pour plusieurs types de vehicules. Julia verifie le type de son paramètre lors de l’appel à cette fonction, et execute la fonction correspondante.

abstract Vehicule
abstract VehiculeARoues <: Vehicule
type Bateau <: Vehicule end
type Velo <: VehiculeARoues end
# Définition des fonctions : une version générique
function avancer(v::Vehicule)
println("En avant !")
end
function avancer(v::VehiculeARoues)
# pour les véhicules à roues, la fonction avancer appelle
# directement la fonction rouler
rouler(v)
end
function rouler(v::VehiculeARoues)
println("Ça roule !")
end
bateau = Bateau()
velo = Velo()
# La détermination de la bonne méthode est faite automatiquement:
avancer(bateau) # -> En avant !
avancer(velo) # -> Ça roule !

FFI (Foreign Function Interface) : Julia possède un interface pour utiliser C, Python, Java, R, commandes shell… Pour C par exemple, il suffit de compiler un fichier C sous la forme d’une bibliothèque partagée .so ou .dll, et on pourra utiliser les fonctions C dans un fichier Julia de cette façon :

ccall(:fonctionC, type1, type2, variable1, variable2)

L’interface C++ est en développement.

--

--