Julia Language
Compatibilité des versions croisées
Recherche…
Syntaxe
- en utilisant Compat
- Compat.String
- Compat.UTF8String
- @compat f. (x, y)
Remarques
Il est parfois très difficile d'obtenir une nouvelle syntaxe pour bien jouer avec plusieurs versions. Comme Julia est toujours en développement actif, il est souvent utile de supprimer le support des anciennes versions et de ne cibler que les plus récentes.
Numéros de version
Julia a une implémentation VersionNumber
du VersionNumber
version sémantique à travers le type VersionNumber
.
Pour construire un VersionNumber
de VersionNumber
tant que littéral, @v_str
pouvez utiliser la macro de chaîne @v_str
:
julia> vers = v"1.2.0"
v"1.2.0"
Alternativement, on peut appeler le constructeur VersionNumber
; Notez que le constructeur accepte jusqu'à cinq arguments, mais tous sauf le premier sont facultatifs.
julia> vers2 = VersionNumber(1, 1)
v"1.1.0"
Les numéros de version peuvent être comparés à l'aide d' opérateurs de comparaison et peuvent donc être triés:
julia> vers2 < vers
true
julia> v"1" < v"0"
false
julia> sort([v"1.0.0", v"1.0.0-dev.100", v"1.0.1"])
3-element Array{VersionNumber,1}:
v"1.0.0-dev.100"
v"1.0.0"
v"1.0.1"
Les numéros de version sont utilisés à plusieurs endroits sur Julia. Par exemple, la constante VERSION
est un VersionNumber
:
julia> VERSION
v"0.5.0"
Ceci est couramment utilisé pour l'évaluation de code conditionnel, en fonction de la version de Julia. Par exemple, pour exécuter un code différent sur v0.4 et v0.5, on peut faire
if VERSION < v"0.5"
println("v0.5 prerelease, v0.4 or older")
else
println("v0.5 or newer")
end
Chaque package installé est également associé à un numéro de version actuel:
julia> Pkg.installed("StatsBase")
v"0.9.0"
Utiliser Compat.jl
Le package Compat.jl active l'utilisation de nouvelles fonctionnalités et syntaxes Julia avec les anciennes versions de Julia. Ses fonctionnalités sont documentées dans son README, mais un résumé des applications utiles est donné ci-dessous.
Type de chaîne unifiée
Dans Julia v0.4, il y avait beaucoup de types de chaînes différents . Ce système était considéré comme trop complexe et déroutant, donc dans Julia v0.5, il ne reste que le type String
. Compat
permet d'utiliser le type String
et le constructeur sur la version 0.4, sous le nom Compat.String
. Par exemple, ce code v0.5
buf = IOBuffer()
println(buf, "Hello World!")
String(buf) # "Hello World!\n"
peut être directement traduit dans ce code, qui fonctionne à la fois sur v0.5 et v0.4:
using Compat
buf = IOBuffer()
println(buf, "Hello World!")
Compat.String(buf) # "Hello World!\n"
Notez qu'il y a des mises en garde.
- Sur la v0.4,
Compat.String
est typé avecByteString
, qui estUnion{ASCIIString, UTF8String}
. Ainsi, les types avec des champsString
ne seront pas stables. Dans ces situations,Compat.UTF8String
est conseillé car il signifieraString
sur v0.5 etUTF8String
sur v0.4, les deux étant des types concrets. - Il faut faire attention à utiliser
Compat.String
ouimport Compat: String
, carString
lui-même a un sens sur v0.4: c'est un alias obsolète pourAbstractString
. Un signe indiquant queString
été utilisé accidentellement au lieu deCompat.String
est que, à tout moment, les avertissements suivants apparaissent:
WARNING: Base.String is deprecated, use AbstractString instead.
likely near no file:0
WARNING: Base.String is deprecated, use AbstractString instead.
likely near no file:0
Syntaxe de diffusion compacte
Julia v0.5 introduit le sucre syntaxique pour la broadcast
. La syntaxe
f.(x, y)
est abaissé pour broadcast(f, x, y)
. Les exemples d'utilisation de cette syntaxe incluent sin.([1, 2, 3])
pour prendre le sinus de plusieurs nombres à la fois.
Sur la v0.5, la syntaxe peut être utilisée directement:
julia> sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112
Cependant, si nous essayons la même chose avec la version 0.4, nous obtenons une erreur:
julia> sin.([1.0, 2.0, 3.0])
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}
Heureusement, Compat
rend également cette nouvelle syntaxe utilisable depuis la version 0.4. Encore une fois, nous ajoutons à l' using Compat
. Cette fois, nous @compat
l'expression avec la macro @compat
:
julia> using Compat
julia> @compat sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112