G

Go vs Rust (en el Backend)

Comparación de Go (Golang) y Rust

Volver al contenido

Copiar enlace

En el Desarrollo Web backend hay muchos lenguajes de programación populares como C#, Java, Javascript(Nodejs), Python, PHP y muchos otros.

Pero el dia de hoy quisiera hacer una compracion breve de 2 lenguajes que muchos iniciantes del desarrollo Web backend pueden llegar a escuchar mucho y pueden llegar a compararlos, uno es Go y el otro es Rust.

tl;dr

Si tienes prisa, El resumen rapido es si bien parecerian competencia en realidad ambos tienen areas distintas de uso, Go es mas usado en el backend para desarrollar aplicaciones distribuidas, mientras que Rust es mas usado para desarrollar herramientas de nivel de sitemas, como compiladores, interpretes, kernel del sistema operativo y asi.

Ambos se pueden usar el backend pero Go tiene une mejor experiencia de desarrollo al ser creado justamente para esto, mientras que Rust tiene mejor rendimiento pero su experiencia de desarrollo es mas complicada, y el rendimiento de tus aplicaciones se paga haciendole mas dificil el trabajo al desarrollador.

Ahora si quieres conocer mas fondo a esto, veamos más a detalle algunos puntos.

Lenguajes Veloces

Cuando se habla de rendimiento un lenguaje que es conocido por su velocidad es C++, por ejemplo hay un proyecto llamado Frameworks Benchmarks que todos los años se encargan de comparar la velocidad de distintos frameworks desarrollados en multiples lenguajes de programación, midiendo el rendimiento de serializaciones JSON, renderizado de templates, acceso de base de datos, y otras tareas muy comunes en proyectos backend.

Teniendo este ultimo año como el Framework más rapido, al Framework de Backend Drogon, el cual esta desarrollado en C++.

Y si eres un iniciante, te puedes llegar a preguntar, ¿porque entonces no usamos todos, Frameworks desarrollados en C++ o C?.

Y la respuestas viene de la mano con lo que denominamos Experiencia de Desarrollo (Developer Experience o DX). Esto se trata acerca de que tan facil es llevar proyectos a cabo, si el lenguaje es simple, y permite hacer tareas comunes con facilidad, o si ofrece modulos que evitan que reinventemos funcionalidad, o si el lenguaje te abstrae lo suficiente de complejidades, o si permitirte tener herramientas que no consuman muchos recursos, y así.

Por ejemplo, los programas creados en C++ son muy rapdios pero el crearlos lleva mucho mas trabajo que hacerlo en lenguaje de alto nivel, al tener que estar administrando tu mismo la meoria en cada tarea comun. Ademas en un proyecto reales puedes estar trabajando con multiples desarrolladores y todos depen usar las mimas herramientas, formateado de codigo, herramientas de desarrollo y se deben generar cambios rapidamente.

Es decir, por mas que existan Frameworks muy veloces, si su experiencia de desarrollo es complicada, esto tomara mas tiempo llevar cosas reales a cabo.

La otra cara de esto es que tambien pueden llegar a existir Frameworks que tienen una experiencia de desarrollo muy sencilla, permitiendo a desarrolladores no tan experimentados crear cosas reales, sin conocer tan a fondo el hardware del computador, por ejemplo aqui estarian lenguajes como Python, Javascript, PHP, y lenguajes de scripting comunmente.

sin embargo si los comparamos con los anteriores estos son mas lentos.

Entonces por lo general muchos proyectos tienen que escoger una ruta entre rendimiento y experiencia de desarrollo.

Ahora como los años han pasado, y los lenguajes que te he mencionado ya no son los unicos del backend, es por esto que el dia de hoy comparare 2 lenguajes que actualmente muchas empresas los estan usando en Backend como una forma de cumplir con ambos aspectos.

Uno es Go, y otro es Rust. Primero veamos sus similitudes.

Memory Safety

Tanto Go como Rust los podriamos colocar en la misma categoria de lenguajes de programacion modernos que priorizan administrar la memoria de forma segura. (memory safety).

La razon de esto es que despues de muchos años en los que se ha utilizado lenguajes de programación como C o C++, muchas desarrolladores han notado que la causa de Bugs y fallos de seguridad es el acceso inseguro o erroneo de la memoria. Go y Rust se enfocan en solucionar esto, pero cada uno con su propio enfoque

Lenguajes Compilados

Ambos tambien son lenguajes compilados, esto significa que ambos traducen tu codigo en codigo maquina, asi que puedes distribuir o desplegar tus programas, con un solo binario a diferencia de lenguajes interpretados como Python, Javascript, Ruby, PHP, entre otros que ncesitan distribuir tambien un interprete, o maquina virtual junto a sus dependecias. esto tambien significa que producen programas portables y que se ejecutan más rapidos.

Lenguajes de proposito General

tanto Go y Rust son lenguajes Open Source de proposito general, lo que significa que tecnicamente puedes crear cualquier tipo de aplicacion, aplicaciones web backend, aplicaicones de escritorio, software embebido, clis, aplicacioens moviles, etc.

Aunque esto depende mucho del uso que le de su comunidad. De hecho ambos tienen una comunidad muy activa y son usados tanto en proyectos open source como en proyectos a gran escala en empresas.

Lenguajes Pragmaticos

Ambos tambien son lenguajes de programacion pragmaticos. es decir ninguno de los dos son lenguajes de programacion funcional (como Scala, o Elixir), ni tampoco lenguajes orientados a objetos (como C# o Java), asi que no tratan de cumplir con una modelo definido de como escribir codigo, sino que se enfocan en resolver problemas que han dado justamente otros lenguajes que si usan estos paradigmas principalmnee.

Es decir son lenguajes multiparadigmas, y que poseen caracteristicas que te permiten usar algo de programacion funcional y orientacion a objetos a su modo, sin forzarte a usar uno en especifico.

Adicionalmente ambos tambien vienen con sus propias herramientas de formatear codigo (gofmt y rustfmt) lo que hace que haya una ola forma estandarizada de escribir codigo para todos los desarrolaldores, y tambien viene con su propio administrador de dependencias (en Rust es Cargo y en Go es modules)

Pero ahora veamos en que se diferencian.

Rendimiento de Go vs Rust

tanto Go como rust producen programas compilados, sin embargo el rendimiento de los programas escritos en Rust es comparable a lenguajes como C/C++, los cuales son de los lenguajes mas rapidos que existen, pero a diferencia de estos, Rust ofrece seguridad al momento de administrar la memoria, manejar concurrencia, y ofrece muchas abstracciones sin que esto afecte a la ejecucion de los programas.

Go por otro lado es más rapido que muchos lenguajes comunes (Javascript, Python, Java) pero no tan rapido como Rust, y es que este está mas enfocado en ser un lenguaje que ofrezca una experiencia de desarrollo comoda pero con el rendimiento suficiente de no preocuparse mucho de usar C++. Ademas que Go brilla en el manejo de concurrencia usando sus "Goroutines" las cuales permiten ejecutar multiples funciones como subprocesos usando los nucleos del CPU en paralelo, cosa que tambien se puede hacer en Rust, solo que es mucho más complicado para el desarrollador.

package main

import (
    "fmt"
    "time"
)

func f(from string) {
    for i := 0; i < 3; i++ {
        fmt.Println(from, ":", i)
    }
}

func main() {

    f("direct")

    go f("goroutine")
    time.Sleep(time.Second)
    fmt.Println("done")
}

El compilador de Go tampoco ocupa mucho tiempo en producir el codigo maquina más eficiente, solo trata de producir codigo muy rapido, haciendolo una excelente opcion para proyectos con códigos bases muy grande, aunque sacrifica un poco la velocidad, haciendo que Go sea muy veloz en tiempo de compilacion pero un poco más lento que Rust en tiempo de ejecución.

a diferencia de Rust, que su tiempo de compilacion son bastante lentos, pero su ejecución es mucho más rapida, y es que Rust no necesita de un garbage collector, a diferencia de Go, lo que permite pasar objetos por referencia facilmente sin la necesidad de hacer copias.

Esto lleva a que en muchas mediciones probadas con distintos algoritmos siempre Rust sea mucho más rapido que el código mas optimizado de Go:

Sin embargo en Rust esta velocidad signfica que el desarrollo debe administrar el mismo los recursos del computador, mientras que Go abstrae esta complejidad al desarrollador.

Para que sirven

Go es un lenguaje creado por Google y Rust fue creado por Mozilla, aunque ambos son open Source estos fueron creados por motivos distintos.

Google fue creado para poder tener un lenguaje mucho mas eficiente el cual sus desarrolladores pudiean crear servicios web facilmente compartiendo herramientas y un estilo de cóigo similar.

Mientras que Rust fue creado para prevenir vulnerabilidades de seguridad relacionadas a la administracion de memoria. esto tampoco quiere decir que GO ea inseguro, sino que Rust ofrece varios paradigmas de concurrencia para poder evitar fallos comunes.

Que se puede desarrollar con estos lenguajes

En go tipicamente se desarrollan aplicaciones de Red, como:

  • Docker
  • Kubernetes
  • Crockroachdb

Aunque tambien hay proyectos en donde se usa para trasnpilar lenguajes de alto nivel como es el caso de esbuild.

Rust por su lado es tipicamente usado para crear sistemas operativos, game engines, software de sistemas embebidos, como:

  • Kernel de Linux
  • Android
  • Redox, un sistema operativo basado en UNIX que esta desarrollado en Rust.

Conclusion

En conclusión, Go es un lenguaje pensado en tener velociad de desarrollo en lugar velocidad de ejecución (compilaciones rapidas, lenguaje simple, biblioteca estandar muy variada).

actualmente valen la pena aprenderlos si solo te quieres especializar en el mundo del Backend, este es un lenguaje que puedes llegar a encontrar un trabajo tipicamente en empresas grandes donde aplican arquitecturas de microservicios por ejemplo.

Sin embargo Rust, si bien tambien hay empresas que lo usan actualmente en el backend, es mucho mas comun desarrollar programas de nivel de sitemas como compiladores, builder, o transpiladores, que comunmente para aplicaciones de red. Rust es una perfecta opcion donde la velocidad importa mas que cualquier otra cosa.

En mi opinion Go tiene una experiencia de desarrollo mas facil, y si ya has programado en algun lenguaje similar a Java, C#, Python, Javascript, PHP, y otros te seria mas facil aprender Go que Rust.

Ademas que el proposito principal de GO es ser usado en el backend, y existen muchos proyectos web en donde esta siendo utilizados lo que puedes llegar a encontrar mas facilmnete trabajo como desarrollo backend de Go que desarrollador backend en Rust.

Mientras que si tienes pensando enfocarte en el desarrollo de sistemas a bajo nivel, como desarrollo software para controlar hardware, crear compiladores, bundler, o a futuro enfocarte en el desarrollo de ciertos programas relacionados del sistema operativo, y asi. Rust es una mejor opcion en estos entornos.

Actualizado por ultima vez el

Esta es una compracion y explicacion de 2 lenguajes modernos y que son muy mencionados actualmente por su velocidad, eficiencia y experiencia de desarrollo

¿Quieres Compatir mi Contenido?

Publicado:hace 4 años

Actualizado:hace 2 años

;