Julia Language
バージョン間の互換性
サーチ…
構文
- Compatを使用して
- Compat.String
- Compat.UTF8String
- @compat f。(x、y)
備考
新しい構文を複数のバージョンでうまく活用することは、時には非常に困難です。 Juliaはまだ積極的に開発されているため、古いバージョンのサポートを廃止し、新しいバージョンのものだけを対象とすることは便利です。
バージョン番号
Juliaには、 VersionNumber型を通して公開されたセマンティックバージョニングの組み込みの実装があります。
リテラルとしてVersionNumberを作成するには、 @v_str 文字列マクロを使用できます。
julia> vers = v"1.2.0"
v"1.2.0"
あるいは、 VersionNumberコンストラクタを呼び出すこともできます。コンストラクタは最大5つの引数を受け付けますが、最初の引数を除くすべての引数はオプションです。
julia> vers2 = VersionNumber(1, 1)
v"1.1.0"
バージョン番号は比較演算子を使用して比較することができ、ソートすることができます。
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"
バージョン番号はJuliaのいくつかの場所で使用されます。たとえば、 VERSION定数はVersionNumberです。
julia> VERSION
v"0.5.0"
これは、Juliaのバージョンに応じて、条件付きコードの評価によく使用されます。たとえば、v0.4とv0.5で異なるコードを実行するには、
if VERSION < v"0.5"
println("v0.5 prerelease, v0.4 or older")
else
println("v0.5 or newer")
end
インストールされた各パッケージには、現在のバージョン番号も関連付けられています 。
julia> Pkg.installed("StatsBase")
v"0.9.0"
Compat.jlの使用
Compat.jlパッケージを使用すると、古いJuliaの新しいJulia機能と構文を使用できます。その機能はREADMEに記載されていますが、以下に有用なアプリケーションの概要を示します。
統一された文字列型
Julia v0.4には、さまざまな種類の文字列がありました 。このシステムは非常に複雑で紛らわしいものでしたので、Julia v0.5ではString型だけが残っています。 Compat使用可能String名の下に、バージョン0.4上のタイプとコンストラクタをCompat.String 。たとえば、このv0.5コード
buf = IOBuffer()
println(buf, "Hello World!")
String(buf) # "Hello World!\n"
v0.5とv0.4の両方で動作するこのコードに直接変換することができます:
using Compat
buf = IOBuffer()
println(buf, "Hello World!")
Compat.String(buf) # "Hello World!\n"
注意すべき点がいくつかあります。
- v0.4が上、
Compat.StringにtypealiasedさByteStringあり、Union{ASCIIString, UTF8String}。したがって、Stringフィールドを持つ型は型安定ではありません。このような状況では、Compat.UTF8Stringそれが意味するよう、助言されるStringV0.5に、そしてUTF8String具体的な種類があり、どちらも、v0.4が上。 -
String自体はv0.4で意味を持つため、Compat.Stringまたはimport Compat: StringCompat.Stringimport Compat: Stringを使用することに注意する必要があります。これは、AbstractString非推奨エイリアスです。Compat.String代わりに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
コンパクトな放送シンタックス
Julia v0.5はbroadcast用の構文的な砂糖を紹介しています。構文
f.(x, y)
broadcast(f, x, y)引き下げられる。この構文を使用する例としては、複数の数値の正弦を同時に取るsin.([1, 2, 3])があります。
v0.5では、構文を直接使用できます。
julia> sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112
しかし、v0.4でも同じことをしようとすると、エラーが出ます:
julia> sin.([1.0, 2.0, 3.0])
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}
幸運なことに、 Compatはこの新しい構文をv0.4でも使えるようにします。もう一度、 using Compatをusing Compatて追加using Compatます。今回は、式を@compatマクロで@compatます:
julia> using Compat
julia> @compat sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112