Rust VS Go, ¿qué idioma deberían elegir los desarrolladores en 2023?

Fuente: InfoQ

En 2023, tenemos mil razones para aprender Rust.

El 7 de agosto, la Fundación Rust publicó los resultados del Informe de encuesta de Rust de 2022. El informe muestra que la tasa de adopción de Rust continúa aumentando. Más del 90 % de los encuestados indicaron que son usuarios de Rust; Rust se utiliza para la la mayoría del trabajo de codificación en , un aumento significativo del 51,8% respecto al año anterior.

No hay duda de que Rust se está convirtiendo cada vez más en el foco de atención de los desarrolladores con su excelente seguridad de memoria y rendimiento de concurrencia. Sin embargo, también es difícil ignorar a Go, un jugador relativamente "veterano" que una vez fue seleccionado como el lenguaje de programación del año.

Nacido en 2009, el lenguaje Go ha atraído una gran atención debido a su modelo de concurrencia único y sus poderosas ventajas de rendimiento. Vale la pena señalar que, al igual que el lenguaje Rust, el creador del lenguaje Go también "odia" C++, y Go también es el lenguaje dominante de los nativos de la nube.

En la encuesta de desarrolladores de Stack Overflow 2022, entre las 70 000 respuestas a la pregunta de "un lenguaje de programación que hace que la gente ame y odie", los programadores obviamente prefieren Rust, el 86 % dijo que le gusta Rust y el 64 % dijo que le gusta Go. Frente al estado candente de Rust, algunos desarrolladores se han preguntado a sus almas: ¿Todavía vale la pena aprender Go en 2023?

Rust VS Go, ¿qué idioma deberían elegir los desarrolladores en 2023?

Rust VS Go, ¿qué idioma deberían elegir los desarrolladores en 2023?

Además, en los últimos dos días, elegir Rust o Go también se ha convertido en un tema candente en Hacker News:

Rust VS Go, ¿qué idioma deberían elegir los desarrolladores en 2023?

Un internauta que apoya a Rust dijo: "También me ha preocupado esta elección durante mucho tiempo. Al final, ganó Rust. Primero, siento que Rust está más cerca de las cosas de la era anterior de Pascal, y puedes controlarlo todo". ; en segundo lugar, si wasm y las tecnologías relacionadas son un gran brote, Rust sería una opción más segura; entonces, ya tenemos Python para un desarrollo rápido, por lo que tiene sentido elegir algo un poco más extremo, y Go está algo en el medio. Finalmente, Rust debe usarse para Core y de alto perfil, por lo que es poco probable que se elimine".

Otro desarrollador que no estuvo de acuerdo dijo: "He estado desarrollando en Go durante casi diez años, pero recientemente también probé Rust. Creo que actualmente existe una preferencia obligatoria y engañosa por Rust, según mi experiencia en De la experiencia en varias empresas emergentes, incluido mi actual, ¡Go es, con mucho, la mejor opción para el desarrollo de back-end! Nota, rendimiento, funcionalidad o de otra manera... ¡los dos lenguajes son muy, muy similares!

Debo decir que tanto Go como Rust son definitivamente excelentes lenguajes de programación. Son modernos, potentes, versátiles y ofrecen un gran rendimiento. Pero realmente no tiene sentido comparar directamente a Go y Rust, quién es mejor, porque cada lenguaje de programación representa una serie de profundas compensaciones detrás de él. Se optimizarán diferentes idiomas para diferentes necesidades, por lo que cuando elegimos un idioma, también debemos considerar qué tipo de problemas queremos usarlo para resolver. Entonces, comenzaremos con los escenarios aplicables de los lenguajes Go y Rust, y discutiremos el "camino" del diseño de Go y Rust.

Si bien Rust y Go difieren mucho en sintaxis y estilo, ambos son herramientas de primera clase para crear software. Comencemos el análisis específico a continuación.

Go vs. Rust: similitudes

Rust y Go tienen mucho en común, por lo que la gente suele compararlos. ¿Qué objetivos tienen en común?

Rust es un lenguaje de programación multiparadigma de tipo estático de bajo nivel que se centra más en la seguridad y el rendimiento.

—Gints Dreimanis

y:

Go es un lenguaje de programación de código abierto que facilita la creación de software simple, confiable y eficiente.

—golang.org

Seguridad de la memoria

Tanto Go como Rust se encuentran entre los lenguajes de programación modernos que ponen énfasis en la seguridad de la memoria. A lo largo de las décadas de desarrollo de lenguajes más antiguos como C y C++, ha quedado claro que una de las principales causas de errores y fallas es el acceso inseguro/incorrecto a la memoria.

Rust y Go dieron cada uno soluciones diferentes, pero el objetivo de ambos es ser más inteligentes y seguros en términos de administración de memoria y ayudar a los desarrolladores a escribir programas correctos con un rendimiento excelente.

Ejecutable rápido y compacto

Ambos son lenguajes compilados, lo que significa que los programas se pueden traducir directamente a un código de máquina ejecutable, de modo que los programas se pueden implementar como un solo archivo binario. A diferencia de los lenguajes interpretados como Python y Ruby, no necesitamos enviar un intérprete y muchas bibliotecas/dependencias con el programa. Como reflejo directo de esta fortaleza central, los programas Rust and Go tienden a ejecutarse más rápido que los lenguajes interpretados.

Lenguaje de uso general

Tanto Rust como Go son lenguajes de programación de propósito general poderosos y extensibles que puede usar para desarrollar todo tipo de software moderno, desde aplicaciones web hasta microservicios distribuidos, microcontroladores integrados, aplicaciones móviles y más. **Ambos tienen excelentes bibliotecas estándar y prósperos ecosistemas de terceros, además de un sólido soporte comercial y una gran base de usuarios. **Ambos existen desde hace años y seguirán prosperando en los años venideros. Aprender Go or Rust sería una inversión de tiempo y energía muy razonable en estos días.

Estilo de programación pragmática

Tampoco son lenguajes excesivamente funcionales (como Scala o Elixir), ni totalmente orientados a objetos (como Java y C#). Por el contrario, aunque tanto Go como Rust tienen las funciones de programación funcional y orientada a objetos, siempre enfatizan la orientación pragmática, es decir, resuelven el problema de la manera más adecuada, en lugar de obligar a todos a usar un método específico a través de la "ideología".manera de hacer las cosas. **Pero si realmente le gusta el estilo de programación funcional, hay más opciones de herramientas relacionadas en el lado de Rust, que es una de las ventajas de Rust sobre Go. **

Ciertamente podemos discutir sobre lo que constituye un lenguaje verdaderamente "orientado a objetos". Pero para ser justos, el estilo de programación orientada a objetos que esperan los usuarios de C++, Java o C# no existe realmente en Go o Rust.

—Jack Mott

Desarrollo masivo

Tanto Rust como Go brindan muchas características útiles para la programación a gran escala, por lo que ambos pueden adaptarse a las necesidades del mundo real de grandes equipos de desarrollo y grandes bases de código. **Por ejemplo, los programadores de C han debatido durante años sobre dónde poner paréntesis y si el código debe sangrarse con tabulaciones o espacios; pero Rust y Go ya usan herramientas de formato estándar (Go tiene gofmt, Rust es rustfmt) resuelven completamente estos problemas. problemas. Reescriben automáticamente su código usando un estilo conforme.

No es que este formato en particular sea sutil, pero los programadores de **Rust and Go son más pragmáticos y prefieren elegir un estándar uniforme de implementación. **

El estilo de gofmt puede no ser el favorito de todos, pero gofmt tiene algo para todos.

—Roba Pike

Otra gran ventaja de estos dos lenguajes se refleja en la canalización de compilación. Ambos tienen herramientas de administración de dependencias y compilación estándar excelentes, integradas y de alto rendimiento. Esto significa que los programadores no tienen que lidiar con complejos sistemas de construcción de terceros, ni necesitan aprender un nuevo sistema cada pocos años.

Utilicé Java y Ruby al principio de mi carrera, por lo que escribir código de Go y Rust siempre ha sido un poco intimidante y está fuera de mi control. Pero cuando entré en Google y vi un servicio escrito en Go, me sentí realmente aliviado porque lo encontré fácil de construir y ejecutar.

Lo mismo ocurre con Rust. Aunque solo he investigado en proyectos de pequeña escala, puedo ver su facilidad de uso. Desearía que esos sistemas de compilación infinitamente configurables fueran cosa del pasado, ahora que los nuevos lenguajes vienen con sus propias herramientas de compilación dedicadas que funcionan de manera inmediata, ¿no es eso bueno?

—Sam Rosa

**¿Se oxida o desaparece? **

Después de hablar de tantos temas, y de que ambos lenguajes están tan bien diseñados y son tan potentes, ¿hay algún resultado en esta competición? O, dado que ambas son excelentes opciones, ¿por qué la gente sigue indignada en las redes sociales y escribe largas publicaciones de blog con comentarios que dicen "Rust es para idiotas" o "Go no es un lenguaje de programación en absoluto" ¿Palabras un poco duras?

Por supuesto, algunas personas solo quieren desahogar sus emociones, pero esto obviamente no ayuda a resolver el problema real. Al menos cuando se trata de qué lenguaje usar en un proyecto, o qué lenguaje usar para ingresar al mundo de la programación, las voces fuertes obviamente no ayudan a tomar la decisión correcta.

Volvamos a la discusión de los adultos y veamos cómo Rust and Go tienen fortalezas y debilidades bajo un análisis racional.

Go vs. Rust: Rendimiento

Como se mencionó anteriormente, los programas generados por Go y Rust son rápidos porque se compilan en código de máquina nativo sin pasar por un intérprete o una máquina virtual. Pero el rendimiento de Rust es aún mejor, incluso comparable a C y C++, que se conocen como puntos de referencia de rendimiento de la industria. Y a diferencia de estos lenguajes anticuados, Rust también brinda seguridad de memoria y mecanismos de seguridad de concurrencia, mientras que apenas afecta la velocidad de ejecución. Rust también permite a los desarrolladores crear abstracciones complejas sin penalizar el rendimiento en tiempo de ejecución.

Por el contrario, Aunque el rendimiento de los programas Go también es bueno, el diseño se centra principalmente en la velocidad de desarrollo (incluida la compilación), más que en el grado de ejecución. Los programadores de Go prefieren un código claro y legible, por lo que la velocidad de ejecución es un poco más lenta.

El compilador Go tampoco dedica mucho tiempo a generar el código de máquina más eficiente, está más preocupado por compilar grandes cantidades de código rápidamente. ** Entonces, en los puntos de referencia de tiempo de ejecución, a menudo es el programa Rust el que abruma al programa Go. **

El rendimiento del tiempo de ejecución de Rust también es muy consistente y predecible porque no utiliza la recolección de elementos no utilizados. El recolector de basura de Go es muy eficiente y está optimizado para mantener los tiempos de pausa lo más cortos posible (los tiempos de pausa se acortan con cada versión de Go). Pero de todos modos, la recolección de basura siempre introduce cierta imprevisibilidad en la forma en que se comporta el programa, y esto puede ser grave o incluso completamente inaceptable para ciertas aplicaciones (como los sistemas integrados).

Debido a que el objetivo de Rust es darle al programador un control completo sobre el hardware subyacente, **Los programas de Rust se pueden optimizar profundamente para acercarse al máximo rendimiento teórico de la máquina. **Esto hace que Rust sea la mejor opción para ciertos casos de uso donde la velocidad de ejecución supera todo lo demás, como la programación de juegos, los kernels del sistema operativo, los componentes del navegador web y los sistemas de control en tiempo real.

  • Simplicidad

No importa cuán poderoso sea un lenguaje de programación si es demasiado difícil de aprender y deja fuera a la mayoría de las personas. Go parece estar diseñado deliberadamente para distinguirse de lenguajes de complejidad creciente como C++: **Tiene muy poca sintaxis, muy pocas palabras clave y ni siquiera muchas funciones. **

Esto significa que el lenguaje Go es fácil de aprender y puede escribir varios programas con él después de un poco de comprensión.

Go es muy fácil de aprender. He oído mencionar esto mucho antes, pero después de usarlo todavía me sorprende lo rápido que mejora la productividad. Gracias al lenguaje Go, la documentación y las herramientas relacionadas, escribí un código interesante y que se podía confirmar en solo dos días.

—Primeras impresiones de Go del programador de Rust

El punto clave aquí es "simplicidad" tres palabras. Por supuesto, simple no significa fácil. Pero un idioma pequeño y simple definitivamente es más fácil de aprender que un idioma grande y complejo. No hay muchas formas de lograr un efecto, por lo que el código Go de alta calidad casi siempre tiene el mismo aspecto. Esto tiene otro beneficio: podemos entender rápidamente qué está haciendo un servicio con el que no estamos familiarizados.

Rust VS Go, ¿qué idioma deberían elegir los desarrolladores en 2023?

**La ontología central de Go es pequeña, pero la biblioteca estándar es muy poderosa. **Es decir, además de la sintaxis de Go, nuestra curva de aprendizaje también debe tener en cuenta esta parte de la biblioteca estándar.

Por otro lado, transferir funciones del lenguaje a la biblioteca estándar significa que todos solo deben concentrarse en aprender las bibliotecas relacionadas con las necesidades de desarrollo actuales. **Go también está diseñado teniendo plenamente en cuenta las necesidades del desarrollo de software a gran escala y puede soportar grandes bases de código y equipos de desarrollo. **En este tipo de escenario, los nuevos desarrolladores deben poder comenzar rápidamente. Con este fin, la comunidad Go siempre ha priorizado la simplicidad, la claridad, la versatilidad y la franqueza de los programas.

Usando el lenguaje GO, a menudo es más fácil para los desarrolladores jóvenes ser productivos, pero es más difícil para los desarrolladores intermedios introducir abstracciones complejas y, por lo tanto, causar problemas. Debido a esta característica, Rust tiende a ser menos atractivo que Go en el mundo del desarrollo de software empresarial.

— Loris Cro

  • Función

Rust admite más complejidad que varios otros lenguajes de programación, por lo que el alcance de implementación correspondiente también es mayor.

— Devatón

**Rust está diseñado específicamente para incluir una variedad de funciones potentes y útiles que ayudan a los programadores a hacer más con menos código. **Por ejemplo, la función de coincidencia de Rust permite escribir rápidamente una lógica flexible y expresiva:

Rust VS Go, ¿qué idioma deberían elegir los desarrolladores en 2023?

Pero también debido a que Rust tiene muchas consideraciones de diseño, es más difícil de aprender, especialmente en la etapa inicial. Pero está bien, C++ o Java tienen mucho que aprender después de todo, y ni siquiera ofrece las funciones avanzadas de Rust, como la seguridad de la memoria. Por lo tanto, es realmente irrazonable criticar el sonido demasiado complicado de Rust: está diseñado para enfatizar la expresión y las funciones ricas, no podemos esperar que sea tan simple y puro mientras se aprovechan los beneficios. Entonces, por supuesto, Rust tiene su propia curva de aprendizaje. Pero mientras se supere esta dificultad, habrá un camino tranquilo por delante.

Si está listo para aprender sintaxis y semántica más complejas (y una barra más alta para la legibilidad del código) a cambio del más alto nivel de rendimiento, Rust puede incluso rivalizar con C++ y D. —Dave Cheney

**Aunque Rust y Go toman prestadas algunas funciones (como los genéricos), es justo decir que las funciones de Rust siguen siendo superiores y las funciones de Go son relativamente escasas. **

  • Concurrencia

La mayoría de los lenguajes brindan algún tipo de soporte para la programación concurrente (es decir, realizar múltiples operaciones al mismo tiempo), pero Go fue diseñado para esto desde cero. **Go no utiliza subprocesos del sistema operativo, pero proporciona una alternativa ligera: goroutines. **Cada goroutine es una función Go que se ejecuta de forma independiente y que el planificador de Go asigna a uno de los subprocesos del sistema operativo bajo control. Es decir, el programador puede administrar una gran cantidad de rutinas simultáneas de manera muy eficiente, utilizando solo una cantidad limitada de subprocesos del sistema operativo.

Por lo tanto, podemos ejecutar millones de gorutinas concurrentes en un solo programa sin preocuparnos por causar serios problemas de rendimiento. Debido a esto, **Go es una solución completa para escenarios de aplicaciones simultáneas a gran escala, como servidores web y microservicios. **

Go también proporciona canales para goroutines, que es una forma rápida, segura y eficiente de comunicarse y compartir datos. El nivel de diseño de concurrencia de Go es realmente muy alto y la experiencia de uso es bastante relajada y agradable.

En general, el diseño de programas concurrentes es muy difícil, y construir programas concurrentes confiables y correctos en cualquier idioma no es nada fácil. Sin embargo, dado que este requisito se consideró al comienzo del proyecto, el mecanismo de programación concurrente en Go se ha hecho lo más simple posible y bien integrado.

Go facilita la creación de una aplicación cuidadosamente deconstruida que se puede implementar como un conjunto de microservicios y aprovechar al máximo la concurrencia. No es imposible en Rust, solo es más difícil de implementar. En cierto sentido, Rust es más adecuado para programadores que no deben permitir agujeros de seguridad causados por problemas de memoria; pero, en consecuencia, cuando realizan algunas tareas que son relativamente simples para otros lenguajes (incluido GO), prefieren tener que pagar. más esfuerzo. —Sony Koptev

Por el contrario, el mecanismo de concurrencia en Rust acaba de aterrizar y aún no se ha estabilizado, por lo que todos pueden continuar prestando atención a esta dirección de desarrollo activo. Esto también es beneficioso.Por ejemplo, la biblioteca de rayón de Rust proporciona un método muy elegante y ligero que puede convertir cálculos secuenciales en cálculos paralelos.

Sería muy bueno tener una sintaxis ligera para generar rutinas y usar canales. Esta es una manifestación directa del poder de la gramática, y varios pequeños detalles también hacen que la experiencia de programación simultánea de Go sea mucho mejor que la de otros lenguajes.

—Primeras impresiones de Go del programador de Rust

Si bien puede no ser fácil implementar programas simultáneos en Rust, aún es perfectamente factible, y ** estos programas también se benefician de las garantías de seguridad de memoria cuidadosamente diseñadas de Rust. **Tome como ejemplo la clase Mutex de la biblioteca estándar: en Go, podemos olvidarnos de adquirir el mutex antes de acceder a algo; pero en Rust, no hay necesidad de preocuparse por eso en absoluto.

Go se centra en la concurrencia como uno de los conceptos centrales. Esto no quiere decir que no podamos lograr efectos de concurrencia similares a Go en Rust, pero la dificultad de implementación es algo así como una prueba para los programadores. Go se enfoca en la concurrencia como uno de sus conceptos centrales. Esto no quiere decir que no podamos lograr efectos de concurrencia similares a Go en Rust, pero la dificultad de implementación es algo así como una prueba para los programadores.

——Dave Cheney

  • seguridad

Como se mencionó anteriormente, tanto Go como Rust tienen sus propias formas de evitar varios errores de programación comunes, especialmente problemas relacionados con la administración de la memoria. Pero **Rust va más allá, se puede decir que no escatima esfuerzos para asegurarse de que nadie cometa errores de seguridad inesperados. **

El compilador de Rust es tan estricto que verifica cada variable que usamos, cada dirección de memoria a la que nos referimos. Evita posibles condiciones de carrera de datos y también le notifica sobre un comportamiento indefinido. En el mundo de Rust, es casi imposible que surjan problemas de concurrencia y seguridad de la memoria.

— ¿Por qué elegir Rust?

Dicho esto, la experiencia de programación en Rust es diferente a casi cualquier otro lenguaje, y puede ser bastante desafiante cuando se presenta por primera vez. Pero a los ojos de muchos desarrolladores, este esfuerzo claramente vale la pena.

Para mí, la mayor ventaja de Rust es que el compilador se ha convertido en mi buen asistente, no perderá ningún error detectado (en serio, a veces me parece magia).

—Grzegorz Nosek

Muchos lenguajes, incluido Go, también brindan herramientas para ayudar a los programadores a evitar errores, pero Rust lleva este efecto a un nuevo nivel. Muchos programas incorrectos ni siquiera se compilan.

En Rust, varias instalaciones de la biblioteca ayudan a los programadores a evitar errores de usuario. Rust nos permite especificar una parte de los datos y luego garantizar que no pertenece ni es manipulado por nada más. No puedo pensar en un idioma que haya proporcionado tantas herramientas para evitar el mal uso accidental antes, lo cual se siente maravilloso. — Sam Rosa

"Luchar contra el verificador de préstamos" es imprescindible para los recién llegados a Rust, pero en su mayor parte, el verificador no es realmente el enemigo. Los problemas que encuentra son errores reales (o al menos errores potenciales) en el código. Es posible que nos obligue a refactorizar fundamentalmente nuestros programas para evitar tales problemas: si realmente pone la corrección y la confiabilidad como su principal prioridad, entonces este requisito estricto es obviamente algo bueno.

Desde otra perspectiva, ¿se puede llamar nuevo lenguaje a un nuevo lenguaje que no cambia el método de programación? Y al usar otros lenguajes, Rust nos enseña a pensar con seguridad, lo cual es igualmente importante.

Si las personas eligen Rust, a menudo se debe al diseño garantizado que proporciona: seguridad sobre punteros nulos/carreras de datos, comportamiento de tiempo de ejecución predecible y control total sobre el hardware. Si esto no tiene sentido para ti, realmente no hay necesidad de usar Rust. Después de todo, hay un precio detrás de estos beneficios: es difícil empezar. Tienes que romper malos hábitos y dominar nuevos conceptos. Al principio, todos serán torturados hasta la muerte por el verificador de préstamos.

— Mateo Endler

La dificultad real de comenzar con el modelo de programación de Rust puede depender de qué otros lenguajes haya usado antes. Los programadores de Python o Ruby pueden encontrar Rust demasiado restrictivo, pero otros pueden encontrar agradables la claridad y las restricciones inequívocas.

Si es un programador de C o C++ y ha pasado semanas buscando errores de seguridad de memoria en el lenguaje, le encantará Rust. Entonces, "luchar contra el verificador de préstamos" se convierte en "¿es esto todavía posible con un compilador? ¡Genial!"

— Grzegorz Nosek

  • Aumentar proporcionalmente

Los programas de servidor actuales contienen decenas de millones de líneas de código, escritos por cientos de programadores y se actualizan casi todos los días. En términos de diseño y desarrollo, Go tiene plenamente en cuenta la necesidad de mejorar la eficiencia del trabajo en dicho entorno. Las consideraciones de diseño para Go incluyen una gestión de dependencia estricta, la adaptabilidad de la arquitectura del software a medida que crece el sistema y la solidez a través de los límites de los componentes. — Rob Pike

Cuando está resolviendo un problema solo o en un equipo pequeño, si elige un lenguaje simple o rico es puramente una cuestión de preferencia personal. Sin embargo, con la expansión de la escala del software, la complejidad y la expansión del equipo, las diferencias entre los dos lenguajes comenzaron a surgir realmente.

Para aplicaciones grandes y sistemas distribuidos, la velocidad de ejecución del código suele ser menos importante que la velocidad de desarrollo: un lenguaje como Go que enfatiza deliberadamente el diseño esbelto puede reducir el tiempo de adaptación de los nuevos desarrolladores y permitirles participar más rápidamente Para contribuir a grandes bases de código.

Usando el lenguaje GO, a menudo es más fácil para los desarrolladores jóvenes ser productivos, pero es más difícil para los desarrolladores intermedios introducir abstracciones complejas y, por lo tanto, causar problemas. Debido a esta característica, Rust tiende a ser menos atractivo que Go en el mundo del desarrollo de software empresarial.

— Loris Cro

La claridad y la legibilidad son siempre más importantes que la elegancia cuando se trata de desarrollo de software a gran escala. **Las limitaciones de Go en realidad lo hacen más adaptable a las necesidades de las empresas y grandes organizaciones que lenguajes más complejos y poderosos como Rust. **

Rust vs Go: Diferencias

Si bien tanto Rust como Go son lenguajes modernos populares y ampliamente utilizados, en realidad no son competidores porque apuntan a casos de uso posiblemente completamente diferentes**.

Todo el enfoque de la programación en Go es completamente diferente al de Rust, y estas características son particularmente adecuadas para algunas personas, pero por otro lado pueden irritar por completo a otras. Lo cual tiene sentido, porque si Rust y Go están resolviendo básicamente los mismos problemas de formas básicamente similares, ¿por qué necesitamos dos lenguajes separados?

Entonces, ¿podemos partir de los enfoques de Rust and Go e interpretar sus respectivas esencias? Intentémoslo juntos.

  • recolección de basura

"Recolectar basura o no recolectar basura" es siempre una pregunta sin respuesta correcta. En general, la recolección de elementos no utilizados y la gestión automática de la memoria pueden ayudarnos a desarrollar programas confiables y eficientes de forma rápida y sencilla. Entonces, para algunos desarrolladores, estas son características esenciales.

Otros argumentan que la recolección de elementos no utilizados, con su sobrecarga de rendimiento y sus pausas globales, puede conducir a un comportamiento de tiempo de ejecución impredecible e introducir una latencia inaceptable. Por supuesto que hay algo de verdad en esta afirmación.

Go y Rust son dos lenguajes muy diferentes. Aunque ambos pueden describirse simplemente como un lenguaje de sistema o un sustituto de C, sus objetivos y escenarios de aplicación, estilos de diseño de lenguaje y prioridades de funciones son, de hecho, muy diferentes. La recolección de basura es un gran diferenciador central. La recolección de basura en Go hace que el lenguaje sea más simple, más pequeño y más fácil de entender. Rust no tiene recolección de basura, lo que lo hace extremadamente rápido (esto es especialmente adecuado para desarrolladores que requieren no solo un alto rendimiento, sino también una baja latencia), y también realiza una serie de funciones y patrones de programación que Go no puede hacer en absoluto (En menos sin sacrificar el rendimiento).

— PingCAP

  • cerca del hardware

Se puede decir que la historia de la programación de computadoras es un proceso de desarrollo abstracto cada vez más complejo. Permite a los programadores resolver problemas sin prestar demasiada atención a cómo funciona realmente el hardware subyacente. Este diseño hace que los programas sean más fáciles de escribir y portátiles. Pero para otros programas, el acceso al hardware y el control preciso sobre cómo se ejecuta el programa es más importante.

**El objetivo de Rust es permitir a los programadores "acercarse al hardware" y recuperar más control, mientras que Go abstrae los detalles arquitectónicos, lo que permite a los programadores acercarse al problema. **

Ambos lenguajes tienen diferentes áreas de aplicación. Go es bueno para escribir microservicios y tareas típicas de "DevOps", pero no es un lenguaje de programación de sistemas. Rust es más fuerte en tareas que enfatizan la simultaneidad, la seguridad y/o el rendimiento, y tiene una curva de aprendizaje más pronunciada que Go.

— Mateo Endler

  • Rendimiento primero

De hecho, para la mayoría de los programas, el rendimiento es menos importante que la legibilidad del código. Pero si algunos proyectos realmente priorizan el rendimiento, hay muchas compensaciones de diseño en **Rust que lo ayudarán a llevar la velocidad de ejecución de su código hasta el límite. **

Por el contrario, Go se preocupa más por la simplicidad del código e incluso está dispuesto a sacrificar algo de rendimiento en tiempo de ejecución por ello. Pero la velocidad de compilación de Go no tiene paralelo, lo que a menudo es aún más importante para proyectos de código a gran escala.

Rust funciona más rápido que Go. En los puntos de referencia, Rust es de hecho más rápido, en algunos casos por un orden de magnitud. Pero antes de elegir Rust, sea claro: Go no se queda atrás en la mayoría de los puntos de referencia y aún mantiene una ventaja de rendimiento sobre lenguajes como Java, C #, Java y Python.

Si necesita un rendimiento de primer nivel, puede elegir cualquiera de estos dos idiomas, y el rendimiento de velocidad nunca lo decepcionará. Además, si está creando un servicio web que maneja cargas de alta intensidad y requiere un escalado vertical/horizontal flexible, ambos lenguajes también pueden satisfacer sus necesidades.

— Andrew Lader

  • Corrección

Por otro lado, si no obliga al programa a que nunca falle, las ventajas y desventajas serán diferentes. La mayoría del código no está diseñado para uso a largo plazo, pero algunos programas se ejecutan en producción durante años. Frente a estas realidades, puede valer la pena invertir un poco más de tiempo en desarrollar y garantizar que el programa funcione de manera correcta y confiable sin incurrir en una gran carga de mantenimiento en el futuro.

Tanto Go como Rust lo ayudan a escribir programas correctos, pero de diferentes maneras: **Go proporciona un excelente marco de prueba incorporado, mientras que Rust se enfoca en eliminar errores de tiempo de ejecución a través de verificadores prestados. **

Mi opinión es: para el código que debe publicarse mañana, use Go; si es un código que debe ejecutarse de manera estable en los próximos cinco años, elija Rust.

— Grzegorz Nosek

Si bien tanto Go como Rust son lo suficientemente buenos para proyectos de desarrollo serios, es mejor comprender completamente sus diversas características y ventajas. En resumen, no importa lo que piensen los demás: **Solo tú puedes decidir qué lenguaje de programación es más adecuado para las necesidades de tu equipo y proyecto. **

Si desea acelerar el desarrollo, digamos que tiene muchos servicios diferentes para escribir, o el equipo de desarrollo en sí es grande, entonces el lenguaje Go es definitivamente la respuesta correcta. Go presta especial atención al diseño para la concurrencia y está interesado en detectar comportamientos de acceso a la memoria inseguros (al igual que Rust), pero no lo obliga a administrar cada detalle individualmente.

Go es rápido y potente, pero en esencia ayuda a los desarrolladores a salirse del camino y centrarse en la simplicidad y la unidad. Por otro lado, si necesita exprimir hasta la última gota de rendimiento, Rust es ideal.

—Andrew Lader

Conclusión Espero que este artículo pueda ayudarlo a comprender los aspectos destacados respectivos de Rust and Go. Si es posible, será mejor que experimentes un poco con estos dos lenguajes, porque son muy útiles en cualquier camino técnico, incluso para los aficionados a la programación.

Pero si solo dedica su tiempo a estudiar un idioma en serio, asegúrese de la experiencia y las inclinaciones respectivas de Go y Rust antes de tomar una decisión.

Por supuesto, el conocimiento de los lenguajes de programación es solo una pequeña parte de lo que hace exitoso a un ingeniero de software. Además de la programación, los ingenieros deben dominar el diseño, la ingeniería, la arquitectura, la comunicación y la colaboración. Mientras todos puedan hacer bien las siguientes cosas, sin importar el lenguaje de programación que elija, se convertirá en un excelente maestro de ingeniería de software.

Ver originales
  • Recompensa
  • Comentar
  • Compartir
Comentar
Sin comentarios