Go lenguaje de programación - Lenguajes De Programación

Breaking

Flickr Photos

BANNER 728X90

lunes, 30 de abril de 2018

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.
Go es un nuevo lenguaje de programación para sistemas lanzado por la todopoderosa Google en Noviembre del 2009. Aunque empezó a ser desarrollado en Septiembre del 2007 por Robert Griesemer, Rob Pike y Ken Thompson.
Go es un lenguaje de programación compilado, concurrente, imperativo, estructurado, no 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[1]. Existe un port no oficial a Microsoft Windows pero es bastante inestable. Actualmente se está trabajando para llevarlo al sistema operativo de Microsoft.

Objetivos principales

Simple, simple, simple. Menos es más.
Fácil de leer. Los ingenieros de desarrollo pasan mucho tiempo leyendo software de otras personas.
Concurrente (soporte multi-core y asincrónico).
Compilación extremadamente rápida.
Compilado a código nativo.
Veloz y con un bajo uso de memoria.

Características de Go


Go, al igual que C y C++, es un lenguaje compilado y concurrente, o, en otras palabras: soporta canales de comunicación basados en el lenguaje CSP. Sin embargo, la concurrencia en Go es diferente a los criterios de programación basados en bloqueos como pthreads. Los creadores de Go, además, se inspiraron en la versatilidad y las cualidades de otros lenguajes como Python, C++ y Java (entre otros), para conseguir un lenguaje con las siguientes características, algunas únicas, y otras compartidas con otros lenguajes compilados.

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
Aun 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.

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.

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. Un struct puede implementar una interfaz de forma automática, lo cual es una característica potente y novedosa.


No son ni hilos, 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.

Ventajas


Tal vez el título de este subtema sea un cliché en esta clase de notas, sin embargo creo que cumple con mi intención principal: para tomar una postura sobre cualquier cosa, es necesario conocer los matices buenos y malos que esta tiene. En la siguiente lista señalo algunos de los aspectos buenos del lenguaje (sin ningún orden en particular):

Simple, confiable y eficiente: es, de algún modo, el eslogan de Golang. El equipo de desarrollo de Go muchas veces ha comentado que una de sus metas fue crear un lenguaje de programación simple, fácil de aprender, leer, trabajar; y que a su vez fuera confiable. Podría decirse que lo lograron, realmente es muy sencillo aprender a programar con Go gracias a su sintaxis minimalista; además, solucionaron algunos de los problemas que otros lenguajes como C venían acarreando desde hace muchos años (ejemplo: operaciones entre diferentes tipos de datos).


Concurrencia nativa: tal vez el punto fuerte de Go. Me atrevería a catalogarlo como uno de los lenguajes de programación con una de las mejores implementaciones nativas de concurrencia. La concurrencia es una propiedad de los sistemas para ejecutar diferentes procesos de forma simultánea con la posibilidad de comunicarse entre ellos. Las goroutines (las que permiten utilizar esta propiedad) son muy sencillas de aprender y con una implementación con poco que criticar.
Excelente alternativa para el desarrollo de páginas y aplicaciones web: te sorprenderá la facilidad con la que lo puedes hacer. Si te interesa, puedes comprobarlo con la serie de desarrollo web que ponemos a tu disposición aquí.

Opciones limitadas: aunque esta razón trae consigo muchos inconvenientes, realmente el lenguaje omitió tantas cosas que resulta sumamente atractivo para programadores quienes quieran un lenguaje que cumpla con su cometido y no presente problemas de compatibilidad entre -exagero- infinidad de paquetes, bibliotecas, etc.

Tu programa funcionará en cualquier actualización de la versión en la que lo escribiste: si escribiste un programa en Go 1.0, el equipo de desarrollo mantiene un acuerdo con sus usuarios: sin importar qué nuevas funciones implementen, ese programa funcionará con cualquier actualización de la versión 1.0 (1.1, 1.2, 1.3 etc.). No mantienen el acuerdo entre diferentes versiones, es decir, no te garantizan que tu programa escrito en la versión 1.0 vaya a funcionar con la versión 2.0. Más información al respecto aquí.
Excelente herramienta para servidores: proporciona una buena opción para sustituir a C y ensamblador en servidores ya que conserva muchas de las facilidades que estos últimos contienen, como la gestión de memoria, pero con un sintaxis más simple y fácil de aprender.


Documentación fácil de comprender y memorizar: puedes consultar casi cualquier aspecto del lenguaje en la documentación oficial aquí.
Gestión de memoria sencilla: es muy sencillo consultar el código ensamblador de todo programa en tiempo de ejecución.

Código con un estilo estándar: ¿no te ha pasado que encuentras un programa escrito en Java que, en lugar de ser orientado a objetos, sigue el paradigma de programación por procedimientos? Con Go se aprende una gran parte del estilo de programación estándar automáticamente al repasar temas y ejemplos del lenguaje, de ese modo se eliminan tiempos muertos aplicando formato a nuestro código o al de nuestros compañeros.
Actualizaciones constantes: muchos de los problemas iniciales del lenguaje, conforme el equipo de desarrollo lanzó nuevas versiones, se han corregido. En Internet podemos encontrar infinidad de programadores que compartían su mal sabor de boca con el lenguaje, sin embargo, algunos de esos problemas ya han sido solucionados, por ejemplo: el recolector de basura en algún momento ocasionó muchos problemas de velocidad de compilación, pero esto ha sido mejorado considerablemente.

Desventajas

A pesar de los puntos anteriores, también tiene algunos aspectos malos:
Abstracción compleja: aunque las sentencias son tan simples que se pueden entender proyectos grandes con relativamente poca documentación, la simplicidad trajo consigo algunos problemas. Algunos algoritmos resultan muy extensos y de difícil comprensión porque muchas de las bibliotecas y funciones que otros lenguajes usaban para aligerar el trabajo del programador, no se implementaron en el lenguaje (function template, por ejemplo).
Características no implementadas: esta desventaja es una extensión de la anterior. Algunas herramientas y características muy útiles han sido dejadas de lado con Go como la herencia, programación orientada a objetos, alias etc.

Sin excepciones: esta es una de las características que muchos programadores han pedido incluir desde hace varias actualizaciones. Resulta un poco incómodo no poder hacer uso de excepciones en un lenguaje que es tan popular para servidores.

El equipo de desarrollo debe de aceptar cualquier función nueva: aunque parezca razonable, su política de simplicidad y compatibilidad deja en el tintero muchas funciones que podrían llegar a ser muy atractivas y útiles porque los desarrolladores no las consideran necesarias, no han encontrado una forma “natural” de implementarla o bien porque creen que podrían traer más problemas que soluciones.