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.Stringist typealiasedByteString, wasUnion{ASCIIString, UTF8String}. Daher sind Typen mitStringFeldern nicht typstabil. In diesen Situationen wirdCompat.UTF8Stringempfohlen, da diesStringin Version 0.5 undUTF8Stringin VersionUTF8Stringbedeutet. Beide Typen sind konkrete Typen. - Man muss vorsichtig sein,
Compat.Stringzu verwenden oderimport Compat: String, daStringselbst in Version 0.4 eine Bedeutung hat: Es ist ein veralteter Alias fürAbstractString. Ein Zeichen, dassStringversehentlich anstelle vonCompat.Stringist, 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