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
それが意味するよう、助言されるString
V0.5に、そしてUTF8String
具体的な種類があり、どちらも、v0.4が上。 -
String
自体はv0.4で意味を持つため、Compat.String
またはimport Compat: String
Compat.String
import 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