Características


Go nos ofrece un lenguaje fuertemente tipado y compilado como C y C++ incorporando además características de alto nivel que facilitan el uso del lenguaje por los, pero lo cierto es que tiene algunas características únicas, veamos algunas:

Concurrente: Es un lenguaje concurrente que soporta canales de comunicación basados en el lenguaje CSP, en el cual se comunican los procesos de forma secuencial o seguida. La concurrencia en Go es diferente a los criterios de programación basados en bloqueos como pthreads.

Recolector de basura: se utiliza como la mayoría de los lenguajes modernos para administrar la memoria y liberar espacios en ella. El recolector de basura de Go está siendo reimplementado para elevar al máximo la eficiencia y reducir la latencia todo lo posible.

Simplicidad: Los lenguajes más utilizados como C++, Java o C# son más pesados y voluminosos, en cambio go es más sencillo y su sintaxis es clara, concisa y divertida.
 
Duck Typing (Tipificación dinámica): 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.

Goroutines: 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 mucho más seguro 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.

Innovación: 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.

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.

El uso de ++ y -- para incrementar y reducir el valor de una variable es una sentencia y no una expresión. Además, solo puede utilizarse en su versión postfija pues según los autores, la versión prefija pierde todo su sentido en la ausencia de aritmética de punteros.

No hay comentarios:

Publicar un comentario