Julia Language
Korsversionskompatibilitet
Sök…
Syntax
- med hjälp av Compat
- Compat.String
- Compat.UTF8String
- @compat f. (x, y)
Anmärkningar
Det är ibland mycket svårt att få ny syntax för att spela bra med flera versioner. Eftersom Julia fortfarande håller på att utvecklas är det ofta användbart att släppa stöd för äldre versioner och istället rikta in sig bara på de nyare.
Versionsnummer
Julia har en inbyggd implementering av semantisk versionering exponerad genom typen VersionNumber
.
För att konstruera en VersionNumber
som en bokstav kan @v_str
strängmakroen användas:
julia> vers = v"1.2.0"
v"1.2.0"
Alternativt kan man ringa VersionNumber
konstruktorn; Observera att konstruktören accepterar upp till fem argument, men alla utom de första är valfria.
julia> vers2 = VersionNumber(1, 1)
v"1.1.0"
Versionsnummer kan jämföras med jämförande operatörer och kan således sorteras:
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"
Versionsnummer används på flera platser över hela Julia. Till exempel är VERSION
konstanten en VersionNumber
:
julia> VERSION
v"0.5.0"
Detta används ofta för utvärdering av villkorlig kod, beroende på Julia-versionen. Till exempel, för att köra annan kod på v0.4 och v0.5, kan man göra
if VERSION < v"0.5"
println("v0.5 prerelease, v0.4 or older")
else
println("v0.5 or newer")
end
Varje installerat paket är också associerat med ett aktuellt versionnummer:
julia> Pkg.installed("StatsBase")
v"0.9.0"
Använda Compat.jl
Compat.jl-paketet möjliggör användning av några nya Julia-funktioner och syntax med äldre versioner av Julia. Dess funktioner är dokumenterade på sin README, men en sammanfattning av användbara applikationer ges nedan.
Unified String type
I Julia v0.4 fanns det många olika typer av strängar . Detta system ansågs vara alltför komplicerat och förvirrande, så i Julia v0.5 återstår det bara String
typen. Compat
tillåter användning av String
typ och konstruktör på version 0.4, under namnet Compat.String
. Till exempel den här v0.5-koden
buf = IOBuffer()
println(buf, "Hello World!")
String(buf) # "Hello World!\n"
kan översättas direkt till den här koden, som fungerar på både v0.5 och v0.4:
using Compat
buf = IOBuffer()
println(buf, "Hello World!")
Compat.String(buf) # "Hello World!\n"
Observera att det finns några varningar.
- På v0.4 är
Compat.String
typiserad tillByteString
, som ärUnion{ASCIIString, UTF8String}
. Således kommer typer medString
inte att vara typstabila. I dessa situationerCompat.UTF8String
, eftersom det kommer att betydaString
on v0.5, ochUTF8String
på v0.4, som båda är betongtyper. - Man måste vara noga med att använda
Compat.String
ellerimport Compat: String
, eftersomString
själv har en betydelse på v0.4: det är ett utskrivet alias förAbstractString
. Ett tecken på attString
oavsiktligt användes i stället förCompat.String
är om någon gång följande varningar visas:
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
Kompakt sändningssyntax
Julia v0.5 introducerar syntaktiskt socker för broadcast
. Syntaxen
f.(x, y)
sänks för att broadcast(f, x, y)
. Exempel på användning av denna syntax inkluderar sin.([1, 2, 3])
att ta sinus för flera nummer på en gång.
På v0.5 kan syntaxen användas direkt:
julia> sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112
Men om vi försöker detsamma på v0.4 får vi ett fel:
julia> sin.([1.0, 2.0, 3.0])
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}
Lyckligtvis gör Compat
denna nya syntax användbar från v0.4 också. Återigen lägger vi till using Compat
. Den här gången omger vi uttrycket med @compat
:
julia> using Compat
julia> @compat sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112