GO ( LENGUAJE DE PROGRAMACIÓN)
Go es un lenguaje de programación concurrente y compilado inspirado
en la sintaxis de C. Ha sido desarrollado por Google y sus diseñadores
iniciales son Robert
Griesemer, Rob Pike y Ken Thompson.
Actualmente está disponible en formato binario para los sistemas operativos Windows, GNU/Linux, FreeBSD y Mac OS X, pudiendo también ser instalado en estos y en otros sistemas con el código fuente.
Go es un lenguaje de programación compilado, concurrente, imperativo, estructurado, orientado a objetos —de una manera bastante especial— y con recolector de basura que de momento está soportado en diferentes tipos de sistemas UNIX, incluidos Linux, FreeBSD y Mac OS X.
También está disponible en Plan 9 puesto que parte del compilador está basado en un trabajo previo sobre el sistema operativo Inferno. Las arquitecturas soportadas son i386, amd64 y ARM.
Actualmente está disponible en formato binario para los sistemas operativos Windows, GNU/Linux, FreeBSD y Mac OS X, pudiendo también ser instalado en estos y en otros sistemas con el código fuente.
Go es un lenguaje de programación compilado, concurrente, imperativo, estructurado, orientado a objetos —de una manera bastante especial— y con recolector de basura que de momento está soportado en diferentes tipos de sistemas UNIX, incluidos Linux, FreeBSD y Mac OS X.
También está disponible en Plan 9 puesto que parte del compilador está basado en un trabajo previo sobre el sistema operativo Inferno. Las arquitecturas soportadas son i386, amd64 y ARM.

NOMBRE
El día de la publicación del
lenguaje Go, Francis Mcornick, desarrollador del lenguaje de programación Go!
(anteriormente llamado Go), solicitó que se le cambiase el nombre al lenguaje
de Google para evitar confusiones con su lenguaje. McCabe creó Go! en el
año 2003; sin embargo, aún no ha
registrado el nombre. Go es un nuevo lenguaje de programación para sistemas
lanzado por Google en noviembre de 2009. Aunque empezó a ser desarrollado en
septiembre de 2007 por Robert Griesemer, Rob Pike y Ken Thompson.
CARACTERÍSTICAS
* Go usa una sintaxis parecida a C por lo que los programadores
que hayan usado dicho lenguaje se sienten muy cómodos con él.
* Go usa tipado estático (statically typed) y es tan eficiente como C.
* Go tiene muchas de las características y facilidad de lenguajes dinámicos como Python
* Aún siendo un lenguaje diseñado para la programación de sistemas, provee de un recolector de basura, reflexión y otras capacidades de alto nivel que lo convierten en un lenguaje muy potente.
* Go usa tipado estático (statically typed) y es tan eficiente como C.
* Go tiene muchas de las características y facilidad de lenguajes dinámicos como Python
* Aún siendo un lenguaje diseñado para la programación de sistemas, provee de un recolector de basura, reflexión y otras capacidades de alto nivel que lo convierten en un lenguaje muy potente.
Go admite el paradigma de programación orientada a objetos, pero
a diferencia de los lenguajes de programación más populares no dispone de
herencia de tipos y tampoco de palabras clave que denoten claramente que
soporta este paradigma. Otro detalle que puede resultar confuso es que la
definición de un tipo ("clase") se realiza por medio de declaraciones
separadas (interfaces, structs, embedded values).
Go permite el uso de delegación (a través de embedded values) y polimorfismo (por medio de interfaces).
Go, al igual que C y
C++, es un lenguaje compilado con algunas características peculiares.
Es un lenguaje
concurrente que soporta canales de comunicación basados en el lenguaje CSP de Sir
Charles Antony Richard Hoare, creador del algoritmo de ordenación QuickSort y ganador del Turing en
1980.
La concurrencia en Go es diferente a los criterios de programación basados en bloqueos como pthreads.
La concurrencia en Go es diferente a los criterios de programación basados en bloqueos como pthreads.
Los lenguajes más
utilizados como C++, Java o C# son más pesados y
voluminosos. La sencillez es la característica principal de Go, su sintaxis es
clara y concisa.
Mientras que C es tristemente célebre por la complejidad de la sintaxis de sus declaraciones, Go utiliza inferencia implícita de tipos pudiéndose de esta manera evitar la declaración explícita de variables.
La declaración de variables es simple y conveniente, y difiere de la de C.
Mientras que C es tristemente célebre por la complejidad de la sintaxis de sus declaraciones, Go utiliza inferencia implícita de tipos pudiéndose de esta manera evitar la declaración explícita de variables.
La declaración de variables es simple y conveniente, y difiere de la de C.
Go admite la
tipificación dinámica de datos también conocida como duck Typing presente en
multitud de lenguajes dinámicos como por ejemplo JavaScript, Ruby o Python. Unstruct puede implementar una
interfaz de forma automática, lo cual es una característica potente y novedosa.
No son ni threads, ni co-rutinas ni procesos. La comunicación
entre goroutines se realiza a través de una característica del lenguaje llamada
canales —basada en CSP—, que es más segura y fácil de usar que los sistemas
predominantes basados en bloqueos de pthreads o características modernas de
Java
EXCEPCIONES
Go no tiene excepciones. Los creadores del
lenguaje dan varios motivos para que esto sea así. Uno de ellos es que añadir
una capa de excepciones añade una complejidad innecesaria al lenguaje y al
entorno de ejecución.
Por definición deberían de ser excepcionales pero al
final se acaban usando como controladores del flujo de la aplicación y dejan de
tener nada de excepcional. Según los creadores, las excepciones tienen que ser
realmente excepcionales y el uso que se le da mayoritariamente no justifica su
existencia.
INNOVACIONES
Durante muchos años, los
desarrolladores han tenido que elegir entre lenguajes de programación de tipado
estático compilados, por regla general, bastante complejos pero que proveen
grandes características relacionadas con la optimización y el rendimiento y
lenguajes de tipado dinámico interpretados con características de mucho más
alto nivel que hacían su aprendizaje, uso y sintaxis más sencilla y por tanto
divertido programar en ellos, eso si, sacrificando rendimiento y control.
Go mezcla lo mejor de
ambos mundos y nos aporta una sintaxis sencilla, clara y divertida junto a la potencia
que nos ofrece un lenguaje fuertemente tipado y compilado incorporando además
características de alto nivel que facilitan el uso del lenguaje por los
desarrolladores.
DIFERENCIAS PRINCIPALES CON C
Aunque su sintaxis es
similar, Go difiere mucho de C, veamos algunos ejemplos.
Declaraciones al revés
En Go las declaraciones
se realizan al revés desde la perspectiva de C (o C++ o Java). La idea
principal en C es que se declara una variable como una expresión que denota su
tipo.
Según los creadores, aunque la idea detrás de la declaración de tipos en C es buena, los tipos y las expresiones gramaticales no se mezclan demasiado bien y el resultado puede ser confuso.
Go sin embargo, separa la expresión y la sintaxis de tipo lo cual simplifica las cosas (el prefijo * para los punteros es la excepción que confirma la regla).
Una declaración típica en C sería:
Según los creadores, aunque la idea detrás de la declaración de tipos en C es buena, los tipos y las expresiones gramaticales no se mezclan demasiado bien y el resultado puede ser confuso.
Go sin embargo, separa la expresión y la sintaxis de tipo lo cual simplifica las cosas (el prefijo * para los punteros es la excepción que confirma la regla).
Una declaración típica en C sería:
int* i, j;
Declara que i es un
puntero, pero no j. En Go:
var i, j *int
Se declaran las dos
variables como punteros. Es más claro y natural.
Punto y coma
En Go el uso del
carácter punto y coma “;“ al final de una instrucción es opcional...
Aritmética de punteros
Go no tiene aritmética
de punteros, según los creadores, la razón es la seguridad. Sin aritmética de
punteros es posible crear un lenguaje en el que no se puede obtener una
dirección ilegal que sea usada de forma incorrecta.
La falta de aritmética de punteros simplifica la implementación del recolector de basura. Además, optimizando el compilador y con el hardware actual, un bucle que utiliza los índices de un array puede ser tan eficaz como un bucle que utiliza aritmética de punteros.
La falta de aritmética de punteros simplifica la implementación del recolector de basura. Además, optimizando el compilador y con el hardware actual, un bucle que utiliza los índices de un array puede ser tan eficaz como un bucle que utiliza aritmética de punteros.
++ y --
En Go, el uso de ++ y --
para incrementar y decrementar el valor de una variable es una sentencia y no
una expresión. Además, solo puede utilizarse en su versión sufija pues según
los autores, la versión prefija pierde todo su sentido en la ausencia de
aritmética de punteros.
PROGRAMACIÒN ORIENTADA A OBJETOS
Para algunos autores, la
herencia o las clases no son conceptos esenciales para la paradigma de POO, sino más bien un medio de implementación.
Existen desde hace tiempo lenguajes orientados a objetos que no admiten clases, sino que se basan en prototipos, como Javascript o Self.
Según declaraciones de Alan Kay, creador de Smalltalk, lo esencial del paradigma es el paso de mensajes.
Existen desde hace tiempo lenguajes orientados a objetos que no admiten clases, sino que se basan en prototipos, como Javascript o Self.
Según declaraciones de Alan Kay, creador de Smalltalk, lo esencial del paradigma es el paso de mensajes.
Go tiene tipos y
métodos y permite un estilo de programación orientado a
objetos, pero no admite construir jerarquías, es decir, no admite la herencia, que para otros autores sí es un mecanismo esencial de la POO.
En Go, el concepto de “interfaz“ es similar al usado en Java: cualquier objeto (value) que cumpla el contrato especificado por una interfaz (sin necesidad de una declaración explícita) obtiene ese tipo.
También existen formas de embeber tipos dentro de otros tipos para obtener algo análogo a las subclases.
Los métodos de Go son más generales que los de C++ o Java, pueden ser definidos para cualquier tipo de datos no sólo para los registros.
En Go, el concepto de “interfaz“ es similar al usado en Java: cualquier objeto (value) que cumpla el contrato especificado por una interfaz (sin necesidad de una declaración explícita) obtiene ese tipo.
También existen formas de embeber tipos dentro de otros tipos para obtener algo análogo a las subclases.
Los métodos de Go son más generales que los de C++ o Java, pueden ser definidos para cualquier tipo de datos no sólo para los registros.
EJEMPLOS
El clásico programa Hola mundo en Go es similiar a como se haría en C++. Con este mítico
ejemplo podemos apreciar que en cuanto a sintaxis son muy similares:
package main
import "fmt"
func main() {
fmt.Printf("Hola, mundo.\n")
}
La notación de los
comentarios es exactamente la misma que la de C++:
/* ...
...
... */
// ...
No hay comentarios:
Publicar un comentario