Julia Language
Versionsübergreifende Kompatibilität
Suche…
Syntax
- mit Compat
- Compat.String
- Compat.UTF8String
- @compat f. (x, y)
Bemerkungen
Es ist manchmal sehr schwierig, eine neue Syntax für mehrere Versionen zu erhalten. Da sich Julia noch in der aktiven Entwicklung befindet, ist es oft nützlich, die Unterstützung für ältere Versionen einfach einzustellen und stattdessen nur die neueren zu verwenden.
Versionsnummern
Julia verfügt über eine integrierte Implementierung der semantischen Versionierung, die durch den VersionNumber
Typ VersionNumber
.
Um eine VersionNumber
als Literal zu @v_str
, kann das @v_str
String-Makro verwendet werden:
julia> vers = v"1.2.0"
v"1.2.0"
Alternativ kann man den VersionNumber
Konstruktor aufrufen. Beachten Sie, dass der Konstruktor bis zu fünf Argumente akzeptiert, alle außer dem ersten sind jedoch optional.
julia> vers2 = VersionNumber(1, 1)
v"1.1.0"
Versionsnummern können mit Vergleichsoperatoren verglichen und somit sortiert werden:
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"
Versionsnummern werden an verschiedenen Stellen in Julia verwendet. Beispielsweise ist die VERSION
Konstante eine VersionNumber
:
julia> VERSION
v"0.5.0"
Dies wird normalerweise für die bedingte Codeauswertung verwendet, abhängig von der Julia-Version. Um zum Beispiel anderen Code auf v0.4 und v0.5 auszuführen, kann man dies tun
if VERSION < v"0.5"
println("v0.5 prerelease, v0.4 or older")
else
println("v0.5 or newer")
end
Jedes installierte Paket ist auch mit einer aktuellen Versionsnummer verknüpft:
julia> Pkg.installed("StatsBase")
v"0.9.0"
Compat.jl verwenden
Das Compat.jl-Paket ermöglicht die Verwendung einiger neuer Julia-Funktionen und -Syntax mit älteren Versionen von Julia. Seine Funktionen sind in der README-Dokumentation dokumentiert. Nachfolgend finden Sie eine Zusammenfassung nützlicher Anwendungen.
Einheitlicher String-Typ
In Julia v0.4 gab es viele verschiedene Arten von Saiten . Dieses System wurde als zu komplex und verwirrend angesehen, sodass in Julia v0.5 nur noch der String
Typ erhalten bleibt. Compat
erlaubt die Verwendung des String
Typs und Compat.String
in Version 0.4 unter dem Namen Compat.String
. Zum Beispiel dieser Code der Version 0.5
buf = IOBuffer()
println(buf, "Hello World!")
String(buf) # "Hello World!\n"
kann direkt in diesen Code übersetzt werden, der für v0.5 und v0.4 funktioniert:
using Compat
buf = IOBuffer()
println(buf, "Hello World!")
Compat.String(buf) # "Hello World!\n"
Beachten Sie, dass es einige Einschränkungen gibt.
- Auf v0.4,
Compat.String
ist typealiasedByteString
, wasUnion{ASCIIString, UTF8String}
. Daher sind Typen mitString
Feldern nicht typstabil. In diesen Situationen wirdCompat.UTF8String
empfohlen, da diesString
in Version 0.5 undUTF8String
in VersionUTF8String
bedeutet. Beide Typen sind konkrete Typen. - Man muss vorsichtig sein,
Compat.String
zu verwenden oderimport Compat: String
, daString
selbst in Version 0.4 eine Bedeutung hat: Es ist ein veralteter Alias fürAbstractString
. Ein Zeichen, dassString
versehentlich anstelle vonCompat.String
ist, wenn zu irgendeinem Zeitpunkt die folgenden WarnungenCompat.String
:
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
Kompakte Broadcasting-Syntax
Julia v0.5 führt syntaktischen Zucker für die broadcast
. Die Syntax
f.(x, y)
wird auf broadcast(f, x, y)
abgesenkt. Beispiele für die Verwendung dieser Syntax sind sin.([1, 2, 3])
, um den Sinus mehrerer Zahlen gleichzeitig zu erfassen.
In Version 0.5 kann die Syntax direkt verwendet werden:
julia> sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112
Wenn wir dasselbe auf Version 0.4 versuchen, wird jedoch ein Fehler angezeigt:
julia> sin.([1.0, 2.0, 3.0])
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}
Glücklicherweise macht Compat
diese neue Syntax ab Version 0.4 auch nutzbar. Wieder fügen wir using Compat
. Diesmal umgeben wir den Ausdruck mit dem @compat
Makro:
julia> using Compat
julia> @compat sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112