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.String
está tipeado paraByteString
, que esUnion{ASCIIString, UTF8String}
. Por lo tanto, los tipos con campos deString
no serán de tipo estable. En estas situaciones, se recomiendaCompat.UTF8String
, ya que significaráString
en v0.5, yUTF8String
en v0.4, que son tipos concretos. - Uno debe tener cuidado de usar
Compat.String
oimport Compat: String
, porqueString
sí tiene un significado en v0.4: es un alias obsoleto paraAbstractString
. Una señal de queString
se usó accidentalmente en lugar deCompat.String
es 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