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.String
jest typizowane naByteString
, czyliUnion{ASCIIString, UTF8String}
. Zatem typy z polamiString
nie będą stabilne. W takich sytuacjach zaleca sięCompat.UTF8String
, ponieważ będzie to oznaczaćString
w wersji v0.5 iUTF8String
w wersjiUTF8String
, które są typami konkretnymi. - Trzeba uważać, aby używać
Compat.String
lubimport Compat: String
Compat.String
import Compat: String
, ponieważ samString
ma znaczenie w wersji 0.4: jest to przestarzały alias dlaAbstractString
. Znakiem, żeString
został przypadkowo użyty zamiastCompat.String
jest, 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