El lenguaje Go de Google podría agregar genéricos a finales de este año

Go de Google finalmente podría estar agregando genéricos, buscado durante mucho tiempo por muchos usuarios de Go como un mecanismo para simplificar el lenguaje.

UN Go propuesta de cambio de idioma presentadas el 12 de enero en las llamadas de GitHub para agregar soporte para parámetros de tipo para tipos y funciones, permitiendo así una forma de programación genérica. Esfuerzos para agregar genéricos a Go han estado sucediendo durante años, y la compatibilidad con genéricos es una de las características más solicitadas desde que Go se lanzó por primera vez en 2009. Ahora, los desarrolladores de Go pueden ver una implementación para fines de este año, tal vez incluida como parte de Go 1.18 lanzamientos beta. La implementación estaría completa pero quizás no completamente optimizada.

Los genéricos pueden proporcionar bloques de construcción poderosos para compartir código y crear programas más fácilmente. Con la programación genérica, las funciones de escritura y las estructuras de datos se pueden realizar de una manera en la que algunos tipos se especifican posteriormente. Por ejemplo, un desarrollador podría escribir una función que opere en un segmento de un tipo de datos arbitrario, donde el tipo de datos real se especifica cuando se llama a la función. Un desarrollador también podría definir una estructura de datos que almacene valores de cualquier tipo, en la que el tipo real que se almacenará se especifica cuando se crea una instancia de la estructura de datos.

Los cambios de alto nivel en la propuesta de programación genérica para Go incluyen:

  • Las funciones pueden tener una lista de parámetros de tipo adicional que usa corchetes pero, por lo demás, se ve como una lista de parámetros ordinaria: func F[T any](p T) ...
  • Estos parámetros de tipo pueden ser utilizados por los parámetros regulares y en el cuerpo de la función.
  • Los tipos también pueden tener una lista de parámetros de tipo: type MySlice[T any] []T
  • Cada parámetro de tipo tiene una restricción de tipo, al igual que cada parámetro ordinario tiene un tipo: func F[T Constraint](p T) ...
  • Las restricciones de tipo son tipos de interfaz.
  • El nuevo nombre predeclarado any es una restricción de tipo que permite cualquier tipo.
  • Los tipos de interfaz utilizados como restricciones de tipo pueden tener una lista de tipos predeclarados; solo los argumentos de tipo que coinciden con uno de esos tipos satisfacen la restricción.
  • Las funciones genéricas solo pueden usar operaciones permitidas por sus restricciones de tipo.
  • El uso de una función o tipo genérico requiere pasar argumentos de tipo.
  • La inferencia de tipo permite omitir los argumentos de tipo de una llamada de función en casos comunes.

Adaptar los genéricos a un lenguaje como Go es una tarea difícil, como indican los intentos fallidos que se remontan a 2010. En los últimos años, los desarrolladores de Go han trabajado en una serie de borradores de diseño que culminaron en un diseño basado en parámetros de tipo. El borrador ha tenido aportes de la comunidad de programación de Go, y ha habido algunos experimentos con él a través del patio de juegos genéricos.

Los cambios en el lenguaje previstos para la compatibilidad con genéricos son compatibles con versiones anteriores, por lo que los programas Go existentes seguirían funcionando. La versión actual de Go es la versión 1.15, con Vaya a 1.16 ahora en una etapa beta. Se espera un lanzamiento de producción de Go 1.16 para el próximo mes.

Copyright © 2021 IDG Communications, Inc.

  • Add Your Comment