Julia Language
Compatibilidad de versiones cruzadas
Buscar..
Sintaxis
- utilizando Compat
- Compat.String
- Compat.UTF8String
- @compat f. (x, y)
Observaciones
A veces es muy difícil obtener una nueva sintaxis para jugar bien con varias versiones. Como Julia aún se encuentra en desarrollo activo, a menudo es útil simplemente abandonar el soporte para versiones anteriores y en su lugar, apuntar solo a las más nuevas.
Números de versión
Julia tiene una implementación integrada de versiones semánticas expuestas a través del tipo VersionNumber .
Para construir un VersionNumber como un literal, se puede usar la macro de cadena @v_str :
julia> vers = v"1.2.0"
v"1.2.0"
Alternativamente, uno puede llamar al constructor VersionNumber ; tenga en cuenta que el constructor acepta hasta cinco argumentos, pero todos excepto el primero son opcionales.
julia> vers2 = VersionNumber(1, 1)
v"1.1.0"
Los números de versión se pueden comparar utilizando operadores de comparación y, por lo tanto, se pueden ordenar:
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"
Los números de versión se utilizan en varios lugares a través de Julia. Por ejemplo, la constante VERSION es una VersionNumber :
julia> VERSION
v"0.5.0"
Esto se usa comúnmente para la evaluación de códigos condicionales, dependiendo de la versión de Julia. Por ejemplo, para ejecutar un código diferente en v0.4 y v0.5, se puede hacer
if VERSION < v"0.5"
println("v0.5 prerelease, v0.4 or older")
else
println("v0.5 or newer")
end
Cada paquete instalado también está asociado con un número de versión actual:
julia> Pkg.installed("StatsBase")
v"0.9.0"
Usando Compat.jl
El paquete Compat.jl permite el uso de algunas funciones y sintaxis nuevas de Julia con versiones anteriores de Julia. Sus características están documentadas en su README, pero a continuación se presenta un resumen de las aplicaciones útiles.
Tipo de cadena unificada
En Julia v0.4, había muchos tipos diferentes de cuerdas . Este sistema se consideró demasiado complejo y confuso, por lo que en Julia v0.5, solo queda el tipo String . Compat permite usar el tipo de String y el constructor en la versión 0.4, bajo el nombre Compat.String . Por ejemplo, este código v0.5
buf = IOBuffer()
println(buf, "Hello World!")
String(buf) # "Hello World!\n"
se puede traducir directamente a este código, que funciona tanto en v0.5 como en v0.4:
using Compat
buf = IOBuffer()
println(buf, "Hello World!")
Compat.String(buf) # "Hello World!\n"
Tenga en cuenta que hay algunas advertencias.
- En v0.4,
Compat.Stringestá tipeado paraByteString, que esUnion{ASCIIString, UTF8String}. Por lo tanto, los tipos con campos deStringno serán de tipo estable. En estas situaciones, se recomiendaCompat.UTF8String, ya que significaráStringen v0.5, yUTF8Stringen v0.4, que son tipos concretos. - Uno debe tener cuidado de usar
Compat.Stringoimport Compat: String, porqueStringsí tiene un significado en v0.4: es un alias obsoleto paraAbstractString. Una señal de queStringse usó accidentalmente en lugar deCompat.Stringes si, en algún momento, aparecen las siguientes advertencias:
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
Sintaxis de transmisión compacta
Julia v0.5 introduce el azúcar sintáctico para su broadcast . La sintaxis
f.(x, y)
se baja a la broadcast(f, x, y) . Ejemplos de uso de esta sintaxis incluyen el sin.([1, 2, 3]) para tomar el seno de múltiples números a la vez.
En v0.5, la sintaxis se puede utilizar directamente:
julia> sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112
Sin embargo, si intentamos lo mismo en v0.4, obtenemos un error:
julia> sin.([1.0, 2.0, 3.0])
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}
Afortunadamente, Compat hace que esta nueva sintaxis sea utilizable también desde v0.4. Una vez más, añadimos using Compat . Esta vez, rodeamos la expresión con la macro @compat :
julia> using Compat
julia> @compat sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112