Julia Language
Kompatybilność między wersjami
Szukaj…
Składnia
- using Compat
- Compat.String
- Compat.UTF8String
- @compat f. (x, y)
Uwagi
Czasami bardzo trudno jest uzyskać nową składnię, aby dobrze grać z wieloma wersjami. Ponieważ Julia wciąż jest aktywnie rozwijana, często przydatne jest po prostu porzucenie obsługi starszych wersji i kierowanie ich tylko na nowsze.
Numery wersji
Julia ma wbudowaną implementację wersjonowania semantycznego udostępnianą przez typ VersionNumber .
Aby skonstruować VersionNumber jako literał, można użyć makra @v_str :
julia> vers = v"1.2.0"
v"1.2.0"
Alternatywnie można wywołać konstruktora VersionNumber ; zauważ, że konstruktor akceptuje do pięciu argumentów, ale wszystkie oprócz pierwszego są opcjonalne.
julia> vers2 = VersionNumber(1, 1)
v"1.1.0"
Numery wersji można porównywać za pomocą operatorów porównania , a tym samym można sortować:
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"
Numery wersji są używane w kilku miejscach w całej Julii. Na przykład stała VERSION to VersionNumber :
julia> VERSION
v"0.5.0"
Jest to powszechnie używane do oceny kodu warunkowego, w zależności od wersji Julii. Na przykład, aby uruchomić inny kod w wersjach v0.4 i v0.5, można to zrobić
if VERSION < v"0.5"
println("v0.5 prerelease, v0.4 or older")
else
println("v0.5 or newer")
end
Każdy zainstalowany pakiet jest również powiązany z bieżącym numerem wersji:
julia> Pkg.installed("StatsBase")
v"0.9.0"
Korzystanie z Compat.jl
Pakiet Compat.jl umożliwia korzystanie z niektórych nowych funkcji i składni Julii ze starszymi wersjami Julii. Jego funkcje są udokumentowane na README, ale podsumowanie przydatnych aplikacji znajduje się poniżej.
Ujednolicony typ ciągu
W Julii v0.4 istniało wiele różnych typów ciągów . Ten system został uznany za zbyt skomplikowany i zagmatwany, więc w Julii v0.5 pozostaje tylko typ String . Compat pozwala na użycie typu String i konstruktora w wersji 0.4, pod nazwą Compat.String . Na przykład ten kod v0.5
buf = IOBuffer()
println(buf, "Hello World!")
String(buf) # "Hello World!\n"
można bezpośrednio przetłumaczyć na ten kod, który działa zarówno w wersji 0.5, jak i wersji 0.4:
using Compat
buf = IOBuffer()
println(buf, "Hello World!")
Compat.String(buf) # "Hello World!\n"
Pamiętaj, że istnieją pewne zastrzeżenia.
- W wersji 0.4
Compat.Stringjest typizowane naByteString, czyliUnion{ASCIIString, UTF8String}. Zatem typy z polamiStringnie będą stabilne. W takich sytuacjach zaleca sięCompat.UTF8String, ponieważ będzie to oznaczaćStringw wersji v0.5 iUTF8Stringw wersjiUTF8String, które są typami konkretnymi. - Trzeba uważać, aby używać
Compat.Stringlubimport Compat: StringCompat.Stringimport Compat: String, ponieważ samStringma znaczenie w wersji 0.4: jest to przestarzały alias dlaAbstractString. Znakiem, żeStringzostał przypadkowo użyty zamiastCompat.Stringjest, jeśli w dowolnym momencie pojawią się następujące ostrzeżenia:
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
Kompaktowa składnia nadawcza
Julia v0.5 wprowadza cukier syntaktyczny do broadcast . Składnia
f.(x, y)
jest obniżony do broadcast(f, x, y) . Przykłady użycia tej składni obejmują sin.([1, 2, 3]) aby przyjąć sinus wielu liczb jednocześnie.
W wersji 0.5 składnia może być używana bezpośrednio:
julia> sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112
Jeśli jednak spróbujemy tego samego na wersji 0.4, otrzymamy błąd:
julia> sin.([1.0, 2.0, 3.0])
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}
Na szczęście Compat sprawia, że ta nowa składnia nadaje się również do użytku z wersji 0.4. Jeszcze raz dodajemy using Compat . Tym razem @compat wyrażenie @compat :
julia> using Compat
julia> @compat sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112