Saltar al contenido

Tecnología · Lenguaje de sistemas

Desarrollo de software en Rust

Rust es un lenguaje para escribir software rápido y fiable: da el rendimiento de C o C++ y su compilador rechaza, antes de que el programa arranque, familias enteras de errores que en otros lenguajes aparecen en casa del cliente. Lo usamos para el núcleo de aplicaciones de escritorio, para servicios que no pueden caerse y para acelerar la pieza lenta de un sistema que ya tienes.

Se combina con

Fig. 01Línea con calibre y llave única1 EJECUTABLE1 EJECUTABLEPYTHON · NODEPUERTOCALIBRE · LLAVE ÚNICA · UN BLOQUEEn bucle
El calibre rechaza la pieza defectuosa antes de que entre en la máquina. Dentro, una sola llave decide qué brazo puede tocarla: nunca dos a la vez.

Situaciones

Qué puedes resolver con Rust

Rust compensa cuando un fallo sale caro o cuando el programa tiene que exprimir la máquina: mucho dato, muchos aparatos o un equipo modesto que no se va a cambiar.

  • Un programa que se cae sin avisar

    Cierres inesperados, memoria que crece hasta agotar el equipo o datos corruptos cuando dos procesos escriben a la vez. Rust impide esos fallos al compilar; no los detecta después.

  • Una pieza lenta en un sistema que funciona

    Un cálculo, una importación o un informe que tarda demasiado en Python o en Node.js. Se reescribe solo esa parte en Rust y el resto del sistema la usa como una biblioteca más.

  • Software que habla con aparatos

    Básculas, lectores, impresoras industriales o máquinas con su propio protocolo, por puerto serie, USB o red. Rust trabaja a ese nivel sin dejar de ser seguro.

  • Una herramienta que se instala y funciona

    Un único ejecutable, sin dependencias que instalar aparte, que arranca al momento y consume poco. Para puestos de trabajo, servidores o equipos antiguos.

El calibre: lo que no encaja no llega a la máquina

Qué conviene revisar al empezar

  • Qué parte del sistema falla o va lenta, y cómo se mide hoy
  • En qué sistemas operativos y equipos tiene que funcionar
  • Con qué otros lenguajes o programas tiene que convivir
  • Quién va a mantener el código después

Servicios

Qué desarrollamos con Rust

Cuatro tipos de encargo. A menudo el primero es pequeño: una sola pieza en Rust dentro de lo que ya existe.

  • Módulo 1 · Bloque macizo

    Herramientas y servicios nativos

    Programas de línea de comandos, servicios en segundo plano y utilidades internas que se entregan como un solo ejecutable para Windows, macOS y Linux.

    Ejemplos de entregables

    • Conversor de ficheros por lotes
    • Servicio de sincronización
    • Herramienta interna de línea de comandos
  • Módulo 2 · Celda de llave única

    Núcleo de aplicaciones de escritorio

    La lógica, los datos y el acceso al sistema escritos en Rust, debajo de la interfaz. La misma base sirve para la app de escritorio y, si hace falta, para la de móvil.

    Ejemplos de entregables

    • Motor de cálculo de una app
    • Archivos y base de datos local
    • Lógica común a escritorio y móvil
  • Módulo 3 · Cartucho

    Módulos en Rust para Python y Node.js

    La parte lenta de un sistema existente, reescrita en Rust y publicada como un paquete que tu código actual importa igual que cualquier otro.

    Ejemplos de entregables

    • Módulo de cálculo para Python
    • Extensión nativa para Node.js
    • Procesado de ficheros grandes
  • Módulo 4 · Puerto

    Aparatos y protocolos

    Comunicación con dispositivos por puerto serie, USB, Bluetooth o red, con los reintentos y las comprobaciones que hacen falta cuando el otro lado es una máquina.

    Ejemplos de entregables

    • Lectura de una báscula por puerto serie
    • Protocolo propio de una máquina
    • Pasarela entre aparatos y servidor

Un ejemplo en funcionamiento

Tres errores que no llegan a arrancar

Demostración simulada. Tres fallos típicos, contados en palabras. Compila el programa y mira qué dice el compilador de Rust de cada uno; aplica el arreglo y vuelve a compilar.

Demostración simulada · datos de muestra

El programa, contado en palabras

  1. Dos hilos suman en el mismo contador a la vez.

    En otros lenguajes Compila. A veces el total sale mal y nadie sabe por qué.

  2. Se entrega la lista de pedidos a otra función y luego se vuelve a usar.

    En otros lenguajes Compila. El programa se cae al tocar memoria que ya no es suya.

  3. Se lee el descuento de un cliente que puede no tener ninguno.

    En otros lenguajes Compila. Falla el día que llega un cliente sin descuento.

  1. Analizar
  2. Comprobar quién usa cada dato
  3. Generar el ejecutable

Salida del compilador (simulada)

  1. Pulsa «Compilar» para ver qué dice el compilador.

No hay ningún compilador detrás de esta demostración: los mensajes están preparados y resumidos en castellano. Lo que enseña es real: estos tres errores Rust los rechaza al compilar, antes de que el programa exista.

Integración

Cómo encaja con tus sistemas

Rust rara vez llega solo. Lo habitual es que ocupe el centro de una aplicación, o un hueco concreto dentro de un sistema escrito en otro lenguaje.

De dónde viene

RustNúcleo o módulo en Rustrápido y comprobado al compilar

A dónde llega

Dependencias que conviene revisar

  • Si el equipo que lo mantendrá conoce Rust o habrá que formarlo
  • Qué bibliotecas del ecosistema cubren lo que necesitas y cuáles no
  • Cómo se compila y se firma para cada sistema operativo
  • Qué se queda en el lenguaje actual y dónde está la frontera

Cómo trabajamos y qué entregamos

Cómo trabajamos un encargo en Rust

  1. 01

    Revisión inicial

    Miramos el sistema que hay, medimos dónde falla o dónde se va el tiempo y vemos con qué tiene que convivir la pieza nueva.

  2. 02

    Alcance

    Escribimos qué se hace en Rust y qué no, cómo se medirá la mejora y en qué sistemas operativos se entrega.

  3. 03

    Primera entrega

    La pieza funcionando en tus equipos con datos reales, junto a la medida de antes y la de después.

  4. 04

    Validación

    La pruebas con los casos difíciles: el fichero enorme, el aparato que no responde, el equipo más antiguo.

  5. 05

    Documentación

    Cómo se compila, se prueba y se publica, y qué bibliotecas usa y por qué.

Qué recibes al cerrar el encargo

  • El código en un repositorio a tu nombre, con sus pruebas
  • Los ejecutables para cada sistema operativo
  • La medida de rendimiento de antes y de después
  • La lista de lo que queda fuera y por qué

Preguntas

Preguntas sobre Rust

¿Falta la tuya? Escríbela a info@veodar.com y te respondemos con una pregunta concreta, no con un dossier.

¿Por qué Rust y no C++ o Go?

C++ da el mismo rendimiento, pero deja pasar errores de memoria que Rust rechaza al compilar. Go es más sencillo de aprender y muy bueno para servicios, aunque lleva recolector de basura y da menos control sobre la máquina. Rust compensa cuando importan a la vez la velocidad, el consumo y que no falle; si no es tu caso, lo decimos.

¿Hay que reescribir todo mi sistema en Rust?

No, y casi nunca conviene. Lo normal es reescribir solo la pieza que falla o va lenta y conectarla con lo que ya tienes: Rust se integra bien con Python, Node.js, C y .NET. El resto se queda como está.

¿Es difícil encontrar quien mantenga código en Rust?

Hay menos programadores que en JavaScript o Python, es cierto, y la curva de aprendizaje es más larga. A cambio, el compilador obliga a un código ordenado que otra persona puede retomar. Entregamos el código con pruebas y documentación, y si tu equipo lo va a mantener, lo tenemos en cuenta al decidir cuánto se hace en Rust.

¿Rust sirve para aplicaciones con interfaz?

Sí. Lo más habitual es poner la lógica en Rust y la interfaz con tecnología web, usando Tauri; también existen bibliotecas de interfaz nativa. Para una aplicación de gestión con muchos formularios en Windows, .NET puede ser más directo, y lo valoramos contigo.

¿Cuánto más rápido va?

Depende de dónde se vaya hoy el tiempo, y por eso no damos una cifra antes de medir. Si el cuello de botella es cálculo o tratamiento de datos, la mejora suele ser grande; si es una base de datos o una red lenta, cambiar de lenguaje no lo arregla. Lo primero que hacemos es medirlo.

¿En qué sistemas funciona?

El mismo código se compila para Windows, macOS y Linux, y también para móviles, para navegadores, como WebAssembly, y para equipos pequeños. Cada sistema tiene sus detalles de empaquetado y de firma, que forman parte del encargo.

Actualizado:

Otras tecnologías

Con qué se combina

Todas las tecnologías
  • Apps de escritorio con TauriAplicaciones para Windows, macOS y Linux con interfaz web y núcleo en Rust: instaladores ligeros y permisos acotados. Nuevas o migradas desde Electron.
  • Servicios concurrentes con TokioServicios en Rust que atienden muchas conexiones y aparatos a la vez sin bloquearse, con tiempos de espera, reintentos y parada ordenada.
  • Rust en el navegador con WebAssemblyEl mismo código en Rust que usa tu app de escritorio, dentro de una página web: cálculos pesados sin servidor y extensiones aisladas.

Empezar

Cuéntanos qué pieza te está fallando o frenando.

Con saber qué hace hoy el programa, en qué equipos y dónde duele nos basta para una primera respuesta.

Qué ayuda a valorarlo

  • Qué hace el programa y dónde falla o va lento
  • En qué lenguaje está hecho lo que ya existe
  • En qué sistemas operativos tiene que funcionar
  • Si hay aparatos o ficheros grandes de por medio

¿Antes de escribir? Mira cómo presupuestamos un proyecto o las soluciones por área de la empresa.

Fig. 07Manipulador MorseH · O · L · A