Este proyecto de código abierto, originado en Google, cumplió tres años hace unos días. Es quizás buen momento para preguntarse ¿dónde estamos?, ¿por qué se creó?, ¿hacia dónde vamos? Go nació el 10 de noviembre del 2009 y apareció un primer artículo en el blog Go Programming Language, en donde se refleja qué tan lejos se ha llegado desde su anuncio inicial como un lenguaje experimental.
Go combina la velocidad de desarrollo de un lenguaje dinámico como Python, con el desempeño y la seguridad de un lenguaje compilado como C o C++. Fue un proyecto interno en Google, iniciado por Rob Pike, Robert Griesemer y Ken Thompson, co-creador con Dennis Ritchie de Unix y del lenguaje de programación C.
El lenguaje toma la sintaxis básica de C – bloques que se encierran entre llaves, con estructuras de control como for, switch e if. De acuerdo a su sección de preguntas frecuentes, tiene cosas de Pascal/Modula/Oberon en términos de la forma en como se declaran los paquetes y los tipos. Aquí se explica la razón de crear un nuevo lenguaje: “Go nació por la frustración con los lenguajes y entornos existentes para la programación de sistemas. La programación se ha hecho demasiado difícil y el elegir qué lenguaje usar es parte de esto. Uno tiene que elegir entre compilación eficiente, ejecución eficiente, o facilidad de programación; las tres cosas parecen no estar disponibles en los lenguajes más usados. Los programadores que podrían buscar facilidad sobre seguridad y eficiencia se moverían a lenguajes tipificados como Python y Javascript en lugar de C++ o en alguna medida, Java. Go es un intento de combinar la facilidad de programar en un lenguaje tipificado, dinámico, interpretado, con la eficiencia y seguridad de un lenguaje estáticamente tipificado y compilado. Se intenta además que sea moderno, con soporte a redes y a procesamiento de múltiples núcleos. Finalmente, se intenta que sea rápido: debería tomarle un par de segundos a lo más construir un ejecutable en una sola computadora”.
De acuerdo a Rob Pike, la necesidad de más velocidad fue la motivación inicial para Go: “El punto de inicio fue el ver los largos tiempos de compilación -para algunos proyectos grandes en Google- los cuales eran irracionablemente largos, incluso en nuestros clusters distribuidos. El manejo de dependencias (o falta de ello) en C y C++ resultaba en demasiado código por compilar. Podría decirse que Go se concibió mientras se esperaba que terminara de compilar un programa“.
Una característicaq distintiva de Go es el soporte a concurrencia. En una plática de Google I/O del 2012, sobre patrones de concurrencia en Go, Rob Pike empezó explicando el trasfondo de esta característica:
El trabajo inspirador en concurrencia, de acuerdo a Pike es “Communicating Sequential Processes”, de Tony Hoare (1978). En marzo del 2012 se llegó a tener una versión 1 estable de Go. Fue además la primera versión liberada con soporte a distribuciones binarias y la primera estuvo disponible para Windows, Linux, FreeBSD y Mac OS X.
Ahora se tiene un tour interactivo de Go, para que los usuarios nuevos (o potenciales), puedan experimentar de qué se trata, así podrán ver las virtudes para iniciarse en el lenguaje y seguir experimentando. Go se usa para descargas en Google o para escalar las bases de datos de MySQL en youtube.
Otras compañías que están usando Go para sus proyectos son: BBC Worldwide, Canonical, CloudFlare, Heroku, Iron.io, Novartis, SoundCloud, SmugMug, StatHat, Tinkercad. Cuatro de esas compañías comparten sus experiencias al usar Go en entornos de producción, como se muestra en este video de Google I/O 2012:
¿Qué se espera ahora de Go? Por una parte, la versión 1.1 será liberada en el 2013 con “alguna funcionalidad nueva”, pero inevitablemente con mejor desempeño. Si se quiere saber más, vea el siguiente video donde Russ Cox da un paseo, con código, sobre tres aspectos de Go que lo hacen rápido, divertido y productivo.
Referencias: