design - etiqueta - ¿Para qué tipo de soluciones está diseñado Go?
etiqueta title (6)
El proyecto Go fue concebido para que sea más fácil escribir el tipo de servidores y otro software que usa internamente Google, pero la implementación aún no es lo suficientemente madura para el uso de producción a gran escala. Mientras continuamos el desarrollo, también estamos haciendo experimentos con el lenguaje como un entorno de servidor candidato. Está llegando allí. Por ejemplo, el servidor detrás de http://golang.org es un programa Go; de hecho, es solo el servidor de documentos godoc que se ejecuta en una configuración de producción.
Fuente: Preguntas frecuentes sobre Go: ¿Google está usando Go internamente?
Parece que Go está diseñado como un reemplazo para los problemas que previamente habría resuelto con C ++. ¿Es esto una declaración precisa? ¿Para qué tipo de soluciones está diseñado Go?
Además de la respuesta de Ben de las preguntas frecuentes de Google, creo que Go pretende ser un lenguaje integrado con Native Client para permitir un desarrollo más sencillo para el próximo sistema operativo Chrome.
Creo que MarkCC lo resume muy bien :
Goroutines y canales proporcionan el mejor soporte que he visto fuera de Erlang para hacer uso de concurrencia. Y, francamente, creo que Go es mucho menos feo que Erlang. (Lo siento, fans de Erlang, pero realmente no me gusta Erlang.) En comparación con Java, que creo que es el principal competidor de Go en esta área, los goroutines y canales de Go son mucho más fáciles de trabajar que los de Java y los bloqueos, no hay absolutamente ninguna comparación en absoluto. Ir más o menos destruye la competencia en esta área.
Creo que su declaración es parcialmente precisa, pero podría argumentarse que anteriormente habría utilizado Erlang para aplicaciones altamente concurrentes como enrutadores de telefonía, etc. Ericsson desarrolló esto para Ericsson. No uso Erlang y no conozco sus deficiencias, pero probablemente haya algunas y esto podría explicar por qué Google decidió crear su propio idioma concurrente.
El hecho de que Erlang no se menciona en la página de Faq es interesante, y también lo es la proposición de que las computadoras más rápidas deberían conducir a un desarrollo de software más rápido. No es mi computadora lo que me está deteniendo :-).
De las propias preguntas frecuentes de Google sobre el tema: ¿Cuál es el propósito del proyecto? :
Ningún lenguaje de sistemas principales ha surgido en más de una década, pero en ese momento el panorama de la informática ha cambiado enormemente. Hay varias tendencias:
- Las computadoras son mucho más rápidas pero el desarrollo de software no es más rápido.
- La administración de dependencias es una gran parte del desarrollo de software en la actualidad, pero los "archivos de cabecera" de los lenguajes de la tradición C son antitéticos para limpiar el análisis de dependencias y la compilación rápida.
- Existe una creciente rebelión contra los sistemas de tipo engorroso como los de Java y C ++, empujando a las personas hacia lenguajes de tipado dinámico como Python y JavaScript.
- Algunos conceptos fundamentales, como la recolección de basura y el cómputo paralelo, no son bien compatibles con los lenguajes de sistemas populares.
- La aparición de computadoras multinúcleo ha generado preocupación y confusión.
Creemos que vale la pena intentarlo de nuevo con un nuevo lenguaje, un lenguaje concurrente recogido de basura con una compilación rápida. En cuanto a los puntos anteriores:
- Es posible compilar un gran programa Go en unos pocos segundos en una sola computadora.
- Go proporciona un modelo para la construcción de software que facilita el análisis de dependencias y evita gran parte de la sobrecarga de los archivos y bibliotecas de estilo C.
- El sistema de tipos de Go no tiene jerarquía, por lo que no se pierde tiempo definiendo las relaciones entre los tipos. Además, aunque Go tiene tipos estáticos, el lenguaje intenta hacer que los tipos se sientan más ligeros que en los lenguajes OO típicos.
- Go está completamente recogido y proporciona un soporte fundamental para la ejecución y comunicación simultáneas.
- Por su diseño, Go propone un enfoque para la construcción de software de sistema en máquinas multinúcleo.
Están apuntando a proyectos que pueden y necesitan un alto nivel de concurrencia. A pesar de que sus preguntas frecuentes dicen que Google NO usa esto internamente, definitivamente puede ver que fue influenciado por sus propias necesidades y deseos.
Actualización 5/2/2018: Ahora dicen que sí usan Go.
¿Google está usando Go internamente? Sí. Ahora hay varios programas Go implementados en producción dentro de Google. Un ejemplo público es el servidor detrás de golang.org. Es solo el servidor de documentos godoc que se ejecuta en una configuración de producción en Google App Engine.
Otros ejemplos incluyen el sistema Vitess para instalaciones de SQL a gran escala y el servidor de descarga de Google, dl.google.com, que ofrece binarios de Chrome y otras instalaciones de gran tamaño, como los paquetes apt-get.