Tuesday, November 10, 2009

Nuevo lenguaje de programación: Go

Google -parece ser- trabaja en todos los frentes. En uno de ellos, Ken Thompson, el creador de Unix junto con Dennis Ritchie, piensa que puede cambiar el paradigma de la programación a través de un proyecto de un lenguaje de programación experimental al que han llamado "Go" (http://golang.org/).

Y ayer martes develaron el secreto de Go, liberando lo que tienen ya armado hasta ahora e invitando a otros a unirse a este proyecto de código abierto.

La industria de la computadora está siempre en una constante tensión entre hacer un inicio de cero o rehacer la tecnología actual. Los límites de los diseños de hardware aunada a la tecnología de programación han hecho que el equipo de Go tome una decisión al respecto: "Hemos encontrado algunos de estos problemas tan frustrantes que decidimos que la única manera de manejarlos es a través de la lingüística", indicó Rob Pike, el ingeniero de software más importante del proyecto Go. "Somos gente de software de sistemas. Queremos un lenguaje haga que nuestras vida sea mejor".

Hasta ahora, el proyecto de Google consiste en un lenguaje de programación, compiladores, un paquete de ejecución (runtime) que le permita a Go tener interconstruidos una serie de características. De hecho, y no es de sorprenderse, Go es muy similar a C y C++, pero Pike indicó que emplea las características modernas y que tiene tal versatilidad que incluso podría usarse dentro de un navegador de la web.

Hay un gran paso entre crear un nuevo lenguaje de programación y armar alrededor una fuerza importante en la industria. Sun MicroSystems, por ejemplo, tuvo éxito con Java, pero mucho menos éxito tuvo el sucesor de Fortran, llamado Fortress. No obstante, Go parece tener algunas ventajas que ningún otro lenguaje de programación tiene.

Primero, el proyecto está en Google, el cual tiene un poderoso incentivo para hacer algo útil que pueda llamar la atención a cientos de miles de servidores e incontables programadores que hay alrededor del mundo. Un experimento en Google podría tener más relevancia que muchos productos ya en el mercado de otras compañías. Y Go se ha graduado ya en un 20% del tiempo del proyecto con soporte formal. "No intentamos que sea experimental para siempre", dijo Pike, "queremos construir algo real con esto".

Segundo, el equipo de Go tiene un "pedigree" sin duda:

  • Ken Thompson, ganador del premio Turing en 1983 y la Medalla Nacional de la Tecnología en 1989, quien con Dennis Ritchie crearon Unix. Thompson también diseño el lenguaje de programación B, que llevó a Ritchie a crear el C, usado en todo el mundo.
  • Rob Pike, ingeniero de software que trabajó por muchos años en el equipo Unix de los Laboratorios Bell y más adelante en el sistema operativo que se llamó Plan 9. Ha trabajado con Thompson por años y con él crearon el esquema de caracteres ampliamente usado UTF-8.
  • Robert Griesemer, quien ayudó a escribir el comilador Java HotSpot y V8, el motor de JavaScript del navegador Chrome.
  • Russ Cox, un desarrollador del sistema operativo creado en Laboratorios Bell, Plan 9
  • Ian Taylor, quien ha trabajado mucho por mejorar el compilador de código abierto GCC.

El nombre de Go viene del popular juego de mesa chino, así como una referencia a Google también, además de dar la idea de ir hacia algún lado, indicó Pike.

Google espera mucho de Go. Está diseñado para sacar ventaja de mútiples núcleos que pueden desarrollar tareas en paralelo. Tiene un enfoque particular para facilitar los problemas de la programación orientada a objetos. Es un lenguaje moderno con características como "recolección de basura", el cual ayuda a los programadores a lidiar con los problemas mundanos, pero importantes, del manejo de memoria. Y está diseñado para ser muy rápido, tanto como los programas que se escriben en C o C++. Permite pues la creación rápida de programas, en primer lugar.

"Parece ser que es más difícil construir software que usarlo, incluso ahora que las computadoras son mucho más rápidas que en el pasado", dijo Pike y añadió "el proceso de desarrollar software no se siente mejor que en la generación pasada. Deliberadamente hemos tratado de hacer un lenguaje que se enfoque a un desarrollo rápido, que compile realmente de manera eficiente, y que exprese sus dependencias eficiente y precisamente de forma que el proceso de compilación pueda ser controlado. Yo hallo esto mucho más productivo".

En lo que se refiere a la velocidad con la que los programas corren "nuestra meta fue la de llegar a los niveles de C o C++", dijo Pike, "pero actualmente sus programas corren razonablemente un 20 o 30 por ciento más lento", indicó.

La página web de Go está escrita con Go, pero Google tiene ambiciones mayores. El software está diseñado para construir software para servidores, uno de ellos es Google Gmail, por ejemplo. Google piensa que podría ser bueno, en otros casos, incluir software que esté corriendo dentro del navegador, una tarea que JavaScript maneja actualmente.

"Go es al menos un orden de magnitud mejor que JavaScript", mencionó Pike. Nótese que Google ha construido su propio navegador, Chrome, en parte para hacer más rápido JavaScript y mejorar el desempeño de la Web y Google ya está incorporando esta tecnología.

Otra característica interesante de Go en la web es que las tareas pueden ser compartidas por servidores y dispositivos de los clientes tales como PCs o teléfonos móviles que usen esos servicios. Esto hace que el servicio se pueda adaptar más fácilmente a la cantidad de poder de procesamiento de aquellos clientes, dijo Pike.

Go está diseñado para el mayor reto actualmente: los procesadores con múltiples núcleos. Los programas trabajan normalmente secuencialmente, moviéndose de una tarea a otra, un paso a la vez, pero en los procesadores multinúcleos podrían trabajar muchas tareas en paralelo. No obstante esto, Go no es la bala mágica para este problema, pero Pike es optimista en que puede ayudar: "creemos que tenemos soporte suficiente para mejorar en este punto".

Específicamente, Go usa tecnología que data de los años sesenta, llamada CSP, o procesos que se comunican secuencialmente (communicating sequential processes, por sus siglas en inglés), que manejan la interacción entre un conjunto de programas cooperativos. Esta tecnología, indicó Pike, se usaba ya en lenguajes de programación como Occom y Erlang, pero en general no se había aplicado a la programación de sistemas.

Pike dice que no cree que vaya a resolverse el problema de la programación con múltiples núcleos a través de Go, "pero pensamos que estamos construyendo un medio ambiente en el que cierta clase de problemas pueden sacar ventaja de la arquitectura multinúcleos". El diseño puede además aplicarse, de alguna manera, a que las tareas se extiendan en muchos servidores conectados en una red.

El equipo de Go busca ayuda. Un área de mejora es la biblioteca de tiempo de ejecución (runtime). Este tipo de librerías hacen que la programación sea mucho más rápida dando para ello una serie de herramientas y funciones de manera tal que los programadores no tengan que crear esos ingredientes cada vez. La biblioteca de Go incluye muchos elementos cruciales al diseño de Go, como por ejemplo, "el manejo de concurrencia, recolección de basura y otras tareas de bajo nivel que normalmente no se exponen a los programadores", dijo Pike.

El equipo de Go quiere ayuda para su compilador. Thompson ha escrito cierto soporte para la compilación en procesadores de 32 y 64 bits de la familia x86, así como para los procesadores ARM. Taylor ha escrito un "front end" para el compilador GCC.

A todo esto, los procesadores ARM son los dominantes en el mercado de los teléfonos móviles en donde Google ha metido las manos con su sistema operativo Android y el software de Go es capaz de correr en los teléfonos celulares. Pike comentó: "buscamos aplicaciones interesantes en cosas como el teléfono Android. No estamos seguros hacia dónde nos llevará esto, pero es intrigante ir por ese camino".

Google ha liberado muchos productos de código abierto en los últimos años y en parte ha dado a la colectividad toda una filosofía de desarrollo. Go es un buen ejemplo de todo esto. "Hicimos esto para ayudar a Google en primera instancia, pero decidimos que necesitamos que fuese código abierto. Necesitamos la ayuda de la comunidad", dijo Rob Pike.

He aquí la conferencia de Pike sobre Go:

2 comments:

Cyberprimo ® said...

muy buena nota, haber que tal es acogido el nuevo lenguaje, aunque al ser respaldado por una empresa Grande como Google debe tener su impacto.

Ee pregunto si los de Microsoft se animaran a sacar uno, digo ya Google tiene Lenguaje de programacion, Sistema Operativo, Navegador, Buscador... se me olvidaba tambien una mascota bien nice, como que estan unificando toda la red no XD.

Ernesto said...

Cyberprimo, MS ya tiene el mentado "C#" o "punto net".


Aquí se están hablado de varias cosas y se tienen que separar bien.

Por un lado tenemos lenguajes de programación, que deben ofrecer ventajas a los programadores para expresar lo que ellos quieren hacer. Las características serian entonces: fácil de codificar, consistente, agradable, rápido de codificar y de detectar errores, etc.

Por otro tenemos los compiladores que deben crear código eficiente de forma rápida.


Por el aspecto del leguaje de programación, "GO" me pareció igual de horrible que "C". Independiente de las mejoras que ofrece sobre "C", "GO" conserva ese mismo "no se que" que tiene "C".

A "C" le reconozco una gran flexibilidad y poder. Sin embargo no me hace feliz como programador.

Para comparación Ruby me parece "El lenguaje", pese a ser interpretado.

Y aun en Ruby me he topado con cosas que no puedo hacer como yo quisiera. Por ejemplo ejecutar código generado desde dentro de la aplicación.

Este caso me costó horas y horas de penas cuando intentaba hacer unos módulos para probar software de control hecho originalmente en "BEACON".


BEACON es un software que genera código "C" a partir de diagramas de flujo.