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