El equipo de Elixir ha publicado la versión 1.20 del lenguaje de programación, que incorpora un sistema de tipado gradual sin necesidad de añadir anotaciones de tipo. Se trata del primer hito de desarrollo del proyecto de tipos, iniciado en 2022, que convierte a Elixir en un lenguaje gradualmente tipado capaz de inferir tipos y verificar código automáticamente.
El sistema se apoya en el tipo dynamic(), que funciona como un rango refinable a medida que se utiliza a lo largo del programa, a diferencia del any() de otros lenguajes de tipado gradual. Elixir solo emite una violación de tipos cuando los tipos suministrados y los aceptados por una función son disjuntos (propiedad de compatibilidad), y permite reducir el tipo según el uso (narrowing), lo que mantiene una tasa muy baja de falsos positivos.
Según los autores, la implementación supera 12 de las 13 categorías del benchmark «If T: Benchmark for Type Narrowing», lo que demuestra la capacidad de recuperar información de tipos precisa a partir de código Elixir ordinario. Entre los avances concretos, el sistema infiere uniones, intersecciones y negaciones a partir de guards, hace seguimiento del tamaño de tuplas, listas y mapas, y detecta código muerto y bugs verificados sin intervención del desarrollador.
El sistema de tipos ha sido posible gracias a una colaboración entre el CNRS francés y Remote, con el desarrollo patrocinado actualmente por Fresha y Tidewave. Una vez que se introduzcan anotaciones explícitas por parte del usuario, Elixir se comportará como un lenguaje estáticamente tipado mientras no se use dynamic().
