Rust

Hace años que sigo a Rust [aquí], un lenguaje de programación promovido por Mozilla.

La primera impresión, fue que pecaban de ambiciosos.
La segunda también.

Mientras tanto, Google ha creado y desarrollado rápidamente otro lenguaje de programación de ámbito muy  similar (Go [aquí]).

Todo empezó con un proyecto personal de un empleado de Mozilla, que posteriormente fue adoptado por esta empresa.

Es un lenguaje nuevo, moderno y espectacular.


Algunas características interesantes:


  • Compilación nativa
  • Tipado estático fuerte con inferencia de tipos y tipos genéricos. Casi nada.
  • Multiparadigma, Funcional, imperativo, OOP, concurrente...
  • Inmutable por defecto
  • Tareas ligeras con control de errores independientes
  • Pattern matching
  • Funciones de primera clase
  • Closures
  • Funciones dentro de funciones

Pero lo más destacable es:

  • Seguridad
  • Fiabilidad
  • Concurrencia
Y es especialmente difícil juntar estas palabras, aunque hay casos de especial éxito como Erlang [aquí].


Seguridad

Los mayores problemas de seguridad vienen derivados por la no distinción de datos y programa. Si metemos un programa malicioso en "datos" de una foto, por ejemplo, "sólo" nos queda conseguir que el flujo de ejecución se desvíe allí al visualizar dicha foto.
Esto se suele conseguir con buffer-overflow [aquí] y técnicas similares.

Llevan bastantes años trabajando en Microsoft y un poco menos en GNU para reducir estas vulnerabilidades.

Fiabilidad

Es deseable que el programa no muera bruscamente y sin control en cualquier momento.
La razón más común de este problema es "dangling pointer" [aquí]. También un "null pointer" [aquí] puede generar problemas (incluso en java, aunque le hayan cambiado "recientemente" el nombre, queda mal decir que no hay punteros pero sí nullpointer exception).

Concurrencia

Los problemas de concurrencia, son complicados de corregir. Además, un sistema concurrente, puede ser complejo de mantener, evolucionar y crecer.
Para evitarlo, la mejor solución es no utilizar memoria compartida. En su lugar, paso de mensajes.


Rust, seguridad, fiabilidad y concurrencia

En Rust se eliminan los "dangling y null pointers" y la memoria compartida no segura entre hebras.
Además se suministra un sistema sencillo y eficiente de comunicación entre tareas por paso de mensajes.
Y no se utilizan procesos ni hebras del sistema operativo como primitiva fundamental del paralelismo, en su lugar se utilizan tareas ligeras (como debe ser) [aquí] con aislamiento entre ellas.


Rust y Servo

Rust está dejando de ser una idea, una investigación, una afición, para ser una realidad seria.
Mozilla se plantea el desarrollo de un nuevo motor html escrito en Rust para dispositivos móviles en colaboración ($) con Samsumg [aquí].

Mucha suerte a Servo, Mozilla y Rust




Comentarios

Entradas populares de este blog

Software libre

Servicios, servicios, servicios... (y Amazon)

Tecnologías divertidas