Traducido del inglés al español - www.onlinedoctranslator.
com
SOFTWARE Editor:Roberto Blumen
Comercio sinfónico
INGENIERÍA rober t@rober tblumen.com
La programación Go
Idioma
jeff meyerson
ESTE ES EL PRIMEROde lo que se convertirá Martin Oderskey, inventor del lenguaje
en una columna regular que destaca de programación Scala.
episodios recientes del podcast de Software Después de escuchar casi todo el contenido
Engineering (SE) Radio (www.se-radio.net). archivado durante un período de meses, hace cuatro
Para los lectores de esta revista que no son años me ofrecí como presentador de un programa;
oyentes, proporcionaré una breve historia. Asumí el papel de editor de programas este abril. Mi
El programa fue fundado en 2006 por el objetivo en este nuevo cargo es mantener nuestras
programador e investigador en informática fortalezas históricas en sistemas, ciencias de la
Markus Völter. Su intención era llenar un computación, lenguajes y procesos mientras nos
nicho vacío en el ecosistema de los expandimos a nuevas áreas, como el desarrollo
podcasts: un programa profundamente profesional, la contratación y los aspectos culturales y
técnico para programadores sobre temas organizacionales del software. Algunos presentadores
de ingeniería de software. El objetivo de la se han quedado durante la transición y nuevos
feria era, y es, proporcionar información presentadores se han ofrecido como voluntarios. Esta
relevante y profunda de expertos para expansión nos permitirá aumentar la frecuencia de
profesionales; ha estado en publicación publicación manteniendo la alta calidad que
continua desde entonces y ha acumulado establecieron los fundadores del programa. Para
un archivo de más de 200 podcasts. Hace cuando lea esto, varios de nuestros nuevos
dos años, Markus renunció y pasó la anfitriones habrán publicado sus
propiedad y la gestión aSoftware IEEE. La
audiencia del programa ahora ha crecido primer podcast.
constantemente hasta el punto en que cada Esta primera entrega enSoftware IEEE
episodio se descarga más de 50,000 veces, presenta extractos del podcast 202,
a veces uno o incluso dos años después de publicado originalmente el 14 de marzo de
la fecha de publicación. 2014. El presentador Jeff Meyerson habló
Los podcasts consisten en entrevistas de una con el ingeniero de Google Andrew Gerrand
hora con un presentador y, por lo general, uno, sobre el lenguaje de programación Go;
pero a veces dos, invitados. Si bien el programa Incluí su discusión sobre la historia del
ha cubierto una gran variedad de temas bajo el lenguaje, comenzando con la frustración
paraguas general de la ingeniería de software, sus entre los programadores de Google por
fortalezas históricas han sido los lenguajes de usar herramientas que no se ampliaron.
programación, los patrones de diseño, los Puede descargar el programa completo de
sistemas y los procesos de desarrollo. SE Radio ha los archivos en se-radio.net.—Roberto
presentado a varios líderes de opinión en la Blumen
ingeniería de software moderna, incluido el CTO
de Amazon, Verner Vogels, el fundador de XP,
Kent Beck, el gurú de los patrones de diseño,
Martin Fowler, y Continúa en la pág. 101...
104 SOFTWARE IEEE|PUBLICADO POR LA IEEE COMPUTER SOCIETY 0740-7459/14/$31.00©2014
INGENIERÍA DE SOFTWARE
… Viene de la pág. 104 no se habla con tanta frecuencia de la escala fecha las declaraciones de importación del
del esfuerzo de ingeniería. Tenemos muchos, paquete en el archivo para agregar o
muchos miles de programadores trabajando eliminar las importaciones relevantes
¿Podría comenzar con una breve en enormes bases de código. Es solo una según los otros paquetes que esté usando
historia de Go? gran base de código compartido. Ningún en el código. Determina qué otras
Go se inició en Google, hace casi seis años, lenguaje fue diseñado para trabajar en ese bibliotecas desea que use y luego agrega
tal vez incluso un poco antes, como un tipo de escala. Tuvimos muchas soluciones esas declaraciones de importación al
proyecto paralelo de Rob Pike, Robert horribles que tuvimos que em- le. Elimina gran parte de la fricción.
Griesemer y Ken Thompson. Lo piratearon
durante un tiempo, hasta que
gradualmente se convirtió en algo de
tiempo completo. Luego agregamos
algunas personas más al equipo durante
Hay una broma de que Go fue concebido
los siguientes dos años y lo lanzamos mientras esperaba que se compilara un
como un proyecto de código abierto en
programa C++, lo cual es medio cierto.
noviembre de 2009.
Hace aproximadamente dos años, lanzamos
Go 1.0. Ese fue nuestro tipo de lanzamiento de
mesa grande. Desde entonces, hemos hecho un
par de otros lanzamientos importantes. Hemos estratagema para funcionar simplemente en este de trabajar con el código de otras personas y
visto mucho crecimiento, una gran cantidad de tipo de escala organizacional. simplemente programar en general.
participación de la comunidad de código abierto. Go fue una oportunidad para pensar en
muchos de los problemas que hemos ¿Puedes describir cómo funcionan las
Tenemos casi 400 colaboradores en el encontrado al trabajar a esta escala y diseñar interfaces en Go?
proyecto y también un equipo de desarrollo un lenguaje que realmente funcione. Un Go tiene un modelo de objeto interesante.
que no es de Google muy activo. Mucha buen ejemplo de esto es Gofmt, que significa Es un lenguaje orientado a objetos, pero
gente todavía trabaja a tiempo completo en Go Format. Es una herramienta que toma si, por ejemplo, tiene experiencia en Java o
Go en Google, y mucha gente externa cualquier archivo Go Source y lo imprime C++, es posible que encuentre el enfoque
también contribuye al proyecto. libremente en el estilo de formato cónico, lo un poco diferente porque, por ejemplo,
que significa que su código Go tiene el Go no tiene clases. No tiene una noción de
¿Cuáles eran algunos de los objetivos de mismo aspecto que el código Go de cualquier herencia de la misma manera. El eje del
los fundadores del idioma cuando se otra persona. No es necesario que hable modelo de objetos de Go son las
inició el proyecto inicialmente? Hay una sobre la ubicación de las llaves o la sangría o interfaces.
broma de que Go fue concebido cualquiera de esas otras cosas quisquillosas La forma en que funcionan las interfaces
mientras esperaba que se compilara un en las revisiones de código. Todo está en Go es que usted especifica un tipo de
programa C++, lo cual es medio cierto. arreglado para ti. interfaz, que contiene algunas
Básicamente, Go surgió de una especificaciones de métodos. Una clásica es
insatisfacción con los entornos de Me imagino que estas cosas ayudan al la interfaz del lector de E/S de la Biblioteca
desarrollo y los lenguajes que comenzar a crear editores y herramientas de estándar, que define un método de lectura.
usábamos en Google. Ninguno de ellos depuración para trabajar con Go. El lenguaje Cualquier cosa que proporcione un flujo de
había sido realmente bien diseñado; C+ está diseñado para que sea fácil de analizar y, bytes normalmente implementará este
+ y Java tenían más de una década en por extensión, fácil de manipular método de lectura, pero cuando lo
ese momento. Ninguno de estos mecánicamente. Tenemos un conjunto creciente implementan, no necesitan especificar que lo
entornos fue diseñado para funcionar a de herramientas para pausar, procesar y calcular implementaron. Simplemente el hecho de
la escala en la que estábamos el código fuente de Go. Una herramienta que implementar ese método de esa especi
trabajando en Google. acaban de lanzar los miembros del equipo de Go cación significa que implementa el lector de
Todo el mundo conoce y piensa en se llama Go Imports. Simplemente alimenta un E/S.
Google en términos de escala de usuarios programa Go a través de él, y automáticamente Tampoco hay una declaración de
y escala de servidores, pero una cosa es se actualiza. implementación, que tiene el agradable efecto de
SEPTIEMBRE/OCTUBRE 20 14|I EEE SOF TWARE 101
INGENIERÍA DE SOFTWARE
desacoplar piezas de código. No tienes estar insatisfecho con el tipo de aros costoso, por lo que solo desea tener tantos
este sistema rígido de declarar una por los que muchos de estos como necesite para ese paralelismo. El
interfaz en un lugar y luego, donde sea entornos me estaban haciendo saltar. código Go en realidad se ejecuta en estos
que la implementes, declararla. En Usaba bastante Python y JavaScript, Goroutines, que son bastante pequeños.Por
cambio, puede ser un poco más flexible al por lo que todo lo que estaba lo general, puede crear y destruir Goroutines
respecto: puede declarar interfaces en una haciendo era bastante poco con la frecuencia que desee sin pensarlo
especie de moda post hoc, como cuando convencional en esa etapa. no fue un realmente, lo que le permite escribir código
concurrente en un estilo directo y de arriba
hacia abajo, con el comportamiento de un
marco de trabajo controlado por eventos. Su
El código que escribo en Go es mucho más código puede bloquear, pero el tiempo de
ejecución aleja inmediatamente cualquier
simple y confiable que el código que estaba código de bloqueo para que no se ejecute, y
escribiendo en otros idiomas. luego ejecuta algún código quepuedencorrer.
Obtiene esa simultaneidad agradable y de
alto rendimiento que obtiene de, por
ejemplo, Node. js, pero puede ejecutar varios
subprocesos. No necesita entrar en
descubres que hay similitudes estirar para pasar a Go y adoptar un devoluciones de llamada sobre devoluciones
entre ciertos tipos y quieres usarlos enfoque diferente. de llamada. Esto conduce a un modelo de
de la misma manera. Lo principal con lo que creo que la programación comprensible pero con
Es una visión del mundo difícil de asimilar gente tiene problemas al entrar en Go características de tiempo de ejecución
con sólo pensar en ella. Necesitas ensuciarte es dejar de lado los tipos de técnicas eficientes.
las manos y usarlo un poco. El resultado final anteriores que habían usado para Para comunicarse entre Goroutines,
es que los objetos Go tienden a tener menos estructurar las cosas. En Go, te queda tenemos otro conjunto de canales de
responsabilidades y tienden a ser mucho más más para escribir el código que código primitivos, que son básicamente
pequeños que los objetos en otros idiomas. funciona y no preocuparte tanto por la como una tubería tipeada para enviar
No construimos sistemas construyendo estructura del mismo, al menos valores de Go. Si un Goroutine hace un
jerarquías de tipos, sino construyendo inicialmente. La estructura emerge con envío en un canal y otro Goroutine hace
pequeñas piezas que satisfacen pequeñas el tiempo y puedes codificar las cosas una recepción desde ese canal, entonces
interfaces; luego los componemos juntos. Es un poco más, de nir algunas interfaces. de una manera bastante segura, pueden
un cambio sutil pero en última instancia Se convierte en una forma más formal pasar datos de un lado a otro, lo que
profundo en el enfoque de la forma en que de escribir en lugar de comenzar con significa que también pueden
muchas personas han estado escribiendo este diseño formal. sincronizarse porque el envío y la
software durante mucho tiempo. recepción deben ocurrir simultáneamente.
¿Cómo gestiona Go la simultaneidad? La Los canales se derivan de
Para mí personalmente, ha sido concurrencia es una de las grandes “Comunicación de procesos
enormemente benéfico. Descubrí que el características de Go como lenguaje. El secuenciales” (CAR Hoare,Com. MCA,
código que escribo en Go es mucho más modelo de concurrencia se basa en dos vol. 21, núm. 8, 1978, pp. 666–677),
simple y confiable que el código que elementos fundamentales. Uno de ellos un artículo seminal sobre
estaba escribiendo en otros idiomas. es Goroutines, que son subprocesos programación concurrente de la
ligeros. Por lo general, tendrá decenas, década de 1970. Si no los ha usado
¿Hubo frustraciones iniciales cientos o incluso miles de Goroutines antes, es una experiencia reveladora
cuando intentaba diseñar su multiplexadas en menos subprocesos escribir un código concurrente con
código en torno a un sistema de del sistema operativo: la idea es que canales porque realmente le permite
interfaz tan diferente? tenga tantos subprocesos del sistema modelar procesos concurrentes, que
Ciertamente ayudó que tuviera a los operativo como CPU en su máquina. suelen ser procesos del mundo real
diseñadores de idiomas sentados a pero de una manera muy sencilla y
mi lado, pero cuando llegué a Go, Como saben, los hilos son bastante fácil de entender.
102 I EEE SOF TWARE|WWW.COMPUTER .ORG / SOF TWARE|@ I EEESOF TWARE
INGENIERÍA DE SOFTWARE
¿Cómo se compara el sistema de presionando a la GC. Es un modelo JEFF MEYERSONes ingeniero de software en
recolección de basura en Go con el muy diferente que, digamos, en Java, OwnerIQ. Contacta con él a través de www.
jeffmeyerson.com.
de otros idiomas? donde ajusta el GC para obtener
Go es un recolector de basura
como muchos scripts como Verwww.computadora.org/
software-multimedia
Java. El g tor [GC] de Go es
para contenido multimedia
bastante sim como era de relacionado con este artículo.
esperar. Es como un
recolector de basura, así que
se ejecuta mientras se
recopila, pero es uno que
tiende bastante bien.
Como un programa Go
fácil de ver cuando se
crea gar; el idioma
herramientas que necesita
¡Llévate la biblioteca de CS
para r en su caso un
ubicaciones. Por lo tanto,
donde quiera que vayas!
aunque el recolector de bage Las revistas y transacciones de la IEEE Computer Society ahora están
no sea el de otro, tampoco disponibles para los suscriptores en formato ePub portátil.
necesita presionarlo en Go Simplemente descargue los artículos de la biblioteca digital de la IEEE
para evitar crear una gran Computer Society y podrá leerlos en cualquier dispositivo compatible con ePub. Para
obtener más información, incluida una lista de dispositivos compatibles, visite
cantidad de
primer lugar www.computer.org/epub
Tenemos algunos buenos
para la asignación de memoria.
viendo de dónde viene
el gar ing. Una vez que
viene, las herramientas
que recuerda dónde
puede
Software IEEE(ISSN 0740-7459) es una publicación bimensual de la IEEE Computer la copia; y 3) no implica la aprobación de IEEE de ningún producto o
Society. Sede del IEEE: Three Park Ave., piso 17, Nueva York, NY 10016-5997. Oficina de servicio de terceros. Los autores y sus empresas pueden publicar la
Publicaciones de la IEEE Computer Society: 10662 Los Vaqueros Cir., Los Alamitos, CA versión aceptada del material con derechos de autor de IEEE en sus
90720; +1 714 821 8380; fax +1 714 821 4010. Sede de IEEE Computer Society: 2001 L propios servidores web sin permiso, siempre que el aviso de derechos de
St., Ste. 700, Washington, DC 20036. Tarifas de suscripción: los miembros de IEEE autor de IEEE y una cita completa del trabajo original aparezcan en la
Computer Society obtienen la tarifa más baja de US$59 por año, que incluye números primera pantalla de la copia publicada. Un manuscrito aceptado es una
impresos más acceso en línea a todos los números publicados desde 1984. Visite versión que ha sido revisada por el autor para incorporar sugerencias de
www.computer.org/subscribe para ordenar y para obtener más información sobre revisión, pero no la versión publicada con edición, revisión y formato
otros precios de suscripción. Números anteriores: $20 para miembros, $216,17 para agregados por IEEE. Para obtener más información, visite: http://www.
no miembros (más envío y manejo). ieee.org/publications_standards/publications/rights/
Administrador de correos:Envíe copias no entregadas y cambios de dirección aSoftware IEEE, paperversionpolicy.html. Permiso para reimprimir/republicar este
Departamento de procesamiento de membresía, Centro de servicio IEEE, 445 Hoes Lane, Piscataway, NJ material con fines comerciales, publicitarios,pubspermissions@ieee.org.
08854-4141. El franqueo de las publicaciones periódicas se paga en Nueva York, NY, y en las oficinas de Derechos de autor © 2014 IEEE. Reservados todos los derechos.
correo adicionales. GST canadiense n.º 125634188. Número de acuerdo de correo de publicaciones de
Canada Post 40013885. Devuelva las direcciones canadienses que no se puedan entregar a PO Box 122, Resúmenes y uso de la biblioteca:Se permite la realización de resúmenes citando a la fuente.
Niagara Falls, ON L2E 6S8, Canadá. Impreso en los EE.UU. Las bibliotecas pueden fotocopiar para uso privado de los usuarios, siempre que la tarifa por
Derechos de reutilización y permisos de reimpresión:El uso educativo o personal de este copia indicada en el código en la parte inferior de la primera página se pague a través del
material está permitido sin cargo, siempre que dicho uso: 1) no se realice con fines lucrativos; Centro de autorización de derechos de autor, 222 Rosewood Drive, Danvers, MA 01923.
2) incluye este aviso y una cita completa del trabajo original en la primera página de
SEPTIEMBRE/OCTUBRE 20 14|I EEE SOF TWARE 103