El lenguaje de programación Rust ha ganado mucha popularidad en los últimos años, debido a su enfoque en la seguridad y el rendimiento.
Por eso, algunas empresas enfocadas al desarrollo de video juegos han considerado este lenguaje en sus desarrollos por ser más prometedor que lenguajes más establecidos como C++, C# o Godot. Sin embargo, no todo ha sido tan idílico como parecía.
Hace 3 años la empresa LogLog comenzó a utilizar Rust con altas expectativas. Considerando que Rust aportaba un excelente rendimiento y herramientas que reducían errores comunes relacionados con la memoria. Algo crucial en un entorno tan exigente como el desarrollo de vídeo juegos.
Durante ese periodo, la empresa lanzó varios juegos en plataformas como Steam, utilizando frameworks como Bevy y Macroquad. También crearon su propio motor 2D desde cero.
Sin embargo, a medida que avanzaban en su experiencia, los problemas comenzaron a acumularse. Uno de los principales retos fue la curva de aprendizaje del lenguaje, porque Rust es más complicado que otros lenguajes populares. Escribieron más de 100,000 líneas de código en estos 3 años y muchos de los problemas iniciales no desaparecieron con el tiempo.
El principal obstáculo técnico fue el "borrow chacker", una herramienta pilar en el diseño de Rust, que asegura que los datos no se puedan modificar de manera insegura en tiempo de ejecución. Pero en el contexto de los video juegos la rápida iteración y la flexibilidad son esenciales, así que resulto en una traba constante.
"El checker obliga a refactorizar en los momentos más inconvenientes, el tiempo que el programador de Rust termina de refactorizar su código para cumplir con el borrow checker, un programador de C# ya ha probado varias ideas y ha hecho iteraciones en ellas".
Esto dificulta la implementación de prototipos rápidos, y hace que las modificaciones más simples resulten tediosas y lentas, cosa que las empresas independientes con recursos limitados, sean lujos que no se puedan permitir.
Crear prototipos funcionales en poco tiempo, es lo que permite a los programadores a experimentar y evaluar ideas antes de consumir recursos en el desarrollo completo.
Los programadores de LogLog Games, encontraron que realizar pequeños cambios en el diseño, requería más refactorización impuestas por el propio compilador.
En otros lenguajes como C++ o C#, es común implementar soluciones rápidas y desordenadas durante la fase de prototipo, para después refinarlas. En Rust es prácticamente imposible debido a sus restricciones.
"El código en Rust a menudo es más limpio, pero eso no garantiza que el juego sea mejor. Lo que importa no es un sistema perfecto, sino que tan rápido puedes implementar y probar mecánicas para descubrir qué funciona y qué no".
El ecosistema de Rust carece de herramientas maduras comparables a las que ofrecen Unity o Unreal Engine: ni editores visuales, ni sistemas avanzados de interfaz de usuario, etc.
Un punto recurrente de frustración fue el uso extendido de sistemas de componentes (ECS) en Rust, como el que implementa Bevy. Aunque estos sistemas ofrecen beneficios en memoria y modularidad, lo que podría ser una línea de código en Unity o Godot se convierte en una tarea de 30 líneas divididas en varios lugares.
Después de 3 años han tomado la decisión de abandonar Rust, y LogLog Games planea volver a usar Unity, aprovechando su ecosistema avanzado y herramientas que favorecen la iteración rápida.
A pesar de las críticas e inconformidades, la empresa reconoce que Rust tiene muchas fortalezas como las herramientas de línea de comandos, procesamiento de datos, algoritmos y mayor rendimiento.
"Rust es un lenguaje que funciona bien para proyectos donde la seguridad y la estabilidad a largo plazo son prioritarias. Pero para nosotros, el desarrollo de vídeo juegos es sobre velocidad y creatividad. Y en esos aspectos, Rust simplemente no nos ayudó".