El esperado diseño de iteradores en Go 1.23: ¿Un paso adelante o un retroceso?

La comunidad de desarrolladores de Go está en un frenesí con la propuesta de diseño de iteradores para la versión 1.23. La cuestión principal gira en torno a si esta característica traerá una mejora significativa o si añadirá una capa de complejidad innecesaria al lenguaje. Al observar los comentarios de varios desarrolladores, es claro que existen opiniones muy divididas. Algunos creen que la introducción de iteradores será una bendición, mientras que otros opinan que podría complicar la simplicidad que ha sido una de las características fundamentales de Go.

Un comentarista, vundercind, expresa su descontento con los iteradores, calificándolos de “torpes” e “inespecíficos”. Otro usuario, golergka, sostiene que eliminar toda la “magia” del código podría llevar a un extremismo similar al de Haskell, dejando atrás a la mayoría de los desarrolladores. El sentimiento que se repite es que los iteradores, aunque útiles en teoría, introducen una complejidad que va en contra de la simplicidad pragmática por la que Go ha sido conocido.

A pesar de las críticas, hay quienes defienden la utilidad práctica de los iteradores. Por ejemplo, MarkMarine subraya que las iteraciones en estructuras de datos personalizadas como mapas ordenados y árboles podrían beneficiarse enormemente. La propuesta de iteradores también apunta a mejorar y estandarizar funciones como `scanner.Scan`, `strings.Split`, y `sql.Query`, que actualmente tienen implementaciones iterativas no estándar. La oportunidad de reducir la cantidad de código de envoltura y facilitar la lectura del código es una ventaja obvia según algunos defensores.

image

Uno de los puntos más controvertidos es la ‘magia oculta’. El usuario unscaled critica abiertamente diversas “magias” ya presentes en Go, como los símbolos en minúsculas que son privados al paquete y la ejecución implícita de funciones `init`. Sin embargo, arguye que la “magia” de los iteradores es transparente, ya que es posible discernir lo que hace una función iteradora simplemente al mirar su código fuente. Esta transparencia es algo que algunos desarrolladores encuentran reconfortante.

La adición de generics en la versión anterior de Go también generó un debate similar. Un usuario denominado eru, subraya que la resistencia inicial del equipo central de Go hacia los generics fue vista como una hipocresía, ya que la falta de dicha funcionalidad limitaba su uso sólo para colecciones diseñadas por el equipo principal. Sin embargo, la adopción tardía de generics demostró que con el tiempo, incluso los diseñadores de lenguajes pueden cambiar su perspectiva cuando se enfrentan a demandas reales de la comunidad. Parece ser que el mismo camino podría seguirse con los iteradores.

No obstante, la simplicidad sigue siendo la piedra angular de Go. Algunos desarrolladores como foldr, señalan que nuevas características como los iteradores y generics, aunque útiles, no deben comprometer la simplicidad general del lenguaje. Es un equilibrio delicado entre añadir funcionalidad avanzada y mantener el idioma accesible y entendible para los nuevos programadores. La evolución de Go, por tanto, depende en gran parte de cómo la comunidad mire al futuro y del balance entre innovación y claridad de código.


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *