1 puntos por GN⁺ 2024-06-13 | 1 comentarios | Compartir por WhatsApp

Lanzamiento de Elixir v1.17: tipos teóricos de conjuntos, duración de calendario y compatibilidad con Erlang/OTP 27

Advertencias graduales de tipos teóricos de conjuntos

  • Elixir v1.17 introduce tipos teóricos de conjuntos que infieren tipos a partir de patrones y los usan para verificar tipos en el programa.
  • Este sistema de tipos permite encontrar errores y bugs en una base de código sin necesidad de modificar el software existente.
  • Por ahora, los desarrolladores solo pueden interactuar con este sistema de tipos mediante advertencias.
  • Advertencias principales:
    • pattern matching sobre claves que no existen
    • acceso a claves que no existen
    • llamada de funciones en algo que no es un módulo
    • al invocar una función anónima, llamar algo que no es una función
    • comparación entre structs
    • comparación entre tipos que no se superponen
    • pattern matching binario incorrecto
    • intento de rescatar un struct de excepción no definido
    • acceso a campos no definidos en una excepción rescatada

Compatibilidad con Erlang/OTP

  • Elixir v1.17 es compatible con Erlang/OTP 27 y deja de dar soporte a Erlang/OTP 24.
  • Los desarrolladores de Elixir recomiendan migrar a Erlang/OTP 26 o superior.
  • Funciones principales de Erlang/OTP 27:
    • se agregó el módulo json
    • se agregaron etiquetas de proceso (proc_lib:set_label/1)

Nuevo tipo de dato Duration y funciones para desplazar fechas

  • Elixir v1.17 introduce el tipo de dato Duration y una API para desplazar fechas, horas y fechas con hora por un período dado.
  • Ejemplo:
    iex> Date.shift(~D[2016-01-31], month: 2)
    ~D[2016-03-31]
    
  • Duration es esencial para modelar intervalos, eventos recurrentes y calendarios.
  • En el caso de DateTimes, Elixir maneja correctamente los cambios de zona horaria.

Otros cambios importantes

  • Se agregaron las nuevas funciones Keyword.intersect/2,3.
  • Se agregó el nuevo profiler de Mix mix profile.tprof.
  • Se agregó la guarda Kernel.is_non_struct_map/1.
  • El Logger de Elixir formatea reportes de gen_statem e incluye etiquetas de proceso de Erlang/OTP 27.

Opinión de GN⁺

  • Tipos teóricos de conjuntos: este sistema de tipos puede ser de gran ayuda para mejorar la estabilidad y confiabilidad del código. En especial, resulta útil en proyectos grandes.
  • Compatibilidad con Erlang/OTP 27: al dar soporte a la versión más reciente de Erlang/OTP, ofrece muchas ventajas en rendimiento y funcionalidades.
  • Tipo de dato Duration: la capacidad de desplazar fechas teniendo en cuenta zonas horarias y calendarios es muy útil en aplicaciones como las de gestión de agendas.
  • Límites del sistema de tipos: por ahora no es posible analizar tipos más allá de los límites entre funciones, así que este aspecto deberá mejorar en futuras actualizaciones.
  • Productos competidores: al compararlo con otros lenguajes que ofrecen sistemas de tipos estáticos, como TypeScript, el enfoque de Elixir brinda seguridad de tipos sin perder la flexibilidad de un lenguaje dinámico.

1 comentarios

 
GN⁺ 2024-06-13
Comentarios en Hacker News
  • Los equipos de Elixir y Erlang han logrado resultados sobresalientes en los últimos años. También han sido muy importantes las contribuciones de autores de librerías y libros. Da gusto seguir los commits de Elixir y OTP. Gracias a todas las personas involucradas.

  • En un proyecto paralelo que usó Elixir como backend, la experiencia fue productiva y agradable. Valoro mucho la productividad de LiveView, pero no es adecuado cuando la conexión de red es inestable. Elixir sigue siendo muy disfrutable de usar incluso separado de LiveView.

  • Estoy desarrollando una startup full stack con Elixir, y hasta ahora es lo mejor que he usado. Les estoy contando a mis amigos las ventajas de Elixir. Ojalá RabbitMQ y el cliente funcionen en OTP 27.

  • Gracias por el gran trabajo de los desarrolladores de Elixir y Erlang. Espero que desaparezca la excusa de que "no tiene tipos" para una adopción más amplia de Elixir. Ojalá sigan dando tan buenos resultados.

  • Llevo 10 años leyendo sobre Elixir y me encanta el lenguaje. Pero desistí de buscar trabajo relacionado con Elixir por los salarios más bajos frente a lenguajes más mainstream. El sueldo y un producto atractivo importan más que el stack tecnológico. Aun así, sigue siendo divertido observar Elixir desde lejos.

  • Una gran función de esta versión es la incorporación de get_in/1. Por ejemplo, en get_in(struct.foo.bar), si foo devuelve nil, no se produce un error al intentar acceder a bar.

  • Esta versión era la última pieza que estaba esperando. Me entusiasman los próximos pasos. Creo que el lenguaje ya está 100% completo en cuanto a funcionalidades.

  • Tengo muchas expectativas sobre el sistema de tipos. Recuerdo que José lo describió como un "sistema de tipos gradual". Eso se irá incorporando por etapas. Me pregunto si en la siguiente etapa aparecerán nuevas funciones relacionadas con el nuevo sistema de tipos. En particular, espero nuevas optimizaciones del compilador.

  • Estoy muy emocionado por esta versión. Ojalá se inviertan recursos en el plugin de Elixir para IntelliJ. No disfruto usar VSCode.

  • Me pregunto si alguien sabe qué significa "tipos de teoría de conjuntos". Me interesan mucho los lenguajes de programación, pero es la primera vez que escucho ese término.