Lanzamiento de Crystal 1.5.0, un lenguaje de programación compilado con una sintaxis similar a Ruby

Crystal es un lenguaje de programación orientado a objetos y de propósito general diseñado y desarrollado por Ary Borenszweig, Juan Wajnerman, Brian Cardiff y más de 300 colaboradores. Inspirada en Ruby, la sintaxis de Crystal es un lenguaje compilado con verificación de tipos estáticos, pero generalmente no necesita especificar los tipos de variables o parámetros de métodos, y puede lograr un rendimiento cercano a C/C++. Su tipo se resuelve mediante un algoritmo de inferencia de tipo global avanzado.

Se lanzó Crystal 1.5.0, esta versión contiene 102 cambios  realizados por 23 colaboradores desde la versión 1.4.1 . Los principales contenidos son los siguientes:

Los parámetros de los métodos que implementan el resumen DEFdeben coincidir con los nombres

Para una mejor documentación y solidez, los parámetros se pueden asociar explícitamente con sus nombres ( ref ):

class Foo
  def foo(name : Int32) : Nil
    p name
  end
end

Foo.new.foo name: 42

Por lo tanto, es necesario considerar el nombre del parámetro como parte de su interfaz. Sin embargo, antes de 1.5.0, el compilador no verificaba la coincidencia de nombres de parámetros entre la implementación de un método abstracto y su definición. Es decir, el siguiente ejemplo se compila sin errores ni advertencias:

abstract class FooAbstract
  abstract def foo(number : Int32) : Nil
end

class Foo < FooAbstract
  def foo(name : Int32) : Nil
    p name
  end
end

A partir de 1.5.0 (  #11915  ), el ejemplo anterior generará una advertencia:

 6 | def foo(name : Int32) : Nil
             ^---
Warning: positional parameter 'name' corresponds to parameter 'number' of the overridden method FooAbstract#foo(number : Int32), which has a different name and may affect named argument passing

Restricciones de métodos para variables de instancia

 

Cuando a una variable de instancia se le asigna el valor de un parámetro de método sin tipo, el parámetro se restringe para compartir el mismo tipo que la variable de instancia.

Por ejemplo el siguiente código:

class Foo
  @x : Int64

  def initialize(x)
    @x = x
  end
end

Hasta 1.4.1, xno initializetenía restricciones, pero esto causa varios problemas:

  • Si el usuario pasa un parámetro incorrecto, por ejemplo, Foo.new 'a', en lugar de marcar el error en el parámetro 'a', acusará a x de no tener el tipo correcto.
  • Por ejemplo, si en su lugar pasamos un Int32, no se realiza ninguna conversión automática: Foo.new 1 falla.
  • La documentación generada no proporciona una pista para el tipo de parámetro x.

A partir de 1.5.0, en una asignación como @x = x, el parámetro x obtiene el tipo de @x, resolviendo efectivamente los tres problemas anteriores.  Los detalles se pueden leer desde  #12103 .

Anotaciones permitidas en los parámetros del método

Ahora es posible agregar comentarios a los parámetros de métodos o macros. Como ilustración, digamos que un linter advertirá cuando no se usen argumentos.

def foo(x); end  # Warning: argument `x` is not used

Entonces podemos indicarle al linter que no nos avise bajo ciertas circunstancias. Supongamos que el linter proporciona las siguientes anotaciones:

annotation MaybeUnused; end

Aplicar esto al parámetro elimina la advertencia (en este linter ficticio en particular):

def foo(@[MaybeUnused] x); end  # OK

 Más información en  #12039 .

indexador constante para tuplas

Cuando se utilizan tuplas indexadas constantemente o tuplas con nombre, el verificador de tipo inferirá correctamente el tipo exacto del valor al que se accede ( #12012 ).

KEY = "s"
foo = {s: "String", n: 0}

# Before 1.5.0 this failed; it would assume the type of foo[key] to be (String | Int32)
puts foo[KEY].size

fortalecer la seguridadFILE.TEMPFILE

Según   #12076 , la creación de archivos temporales no permite caracteres nulos en la cadena de nombres de archivos.

Cumplimiento de NO_COLOR

El compilador y el intérprete admiten  la variable de entorno NO_COLOR  para deshabilitar la salida en color en el terminal. Se puede habilitar configurando cualquier valor no nulo en .  Los detalles se pueden encontrar en #11984 .NO_COLOR

Un paso gigante hacia el soporte nativo de WINDOWS

El tiempo de ejecución de simultaneidad en Windows es compatible con un bucle de eventos funcional ( #12149  ). Esto cruza una verificación importante en el camino hacia el soporte nativo de Windows . Además, ahora hay uno compatible con Windows Makefile#11773  ).

 

Se puede encontrar contenido adicional en el anuncio de actualización:https://crystal-lang.org/2022/07/06/1.5.0-released.html .

Supongo que te gusta

Origin www.oschina.net/news/202432/crystal-1-5-0-released
Recomendado
Clasificación