Professional Documents
Culture Documents
Este artculo es una traduccin del original publicado en el blog de Mozilla Hacks.
As que para los programadores de sistemas Rust parece una gran opcin, pero qu hay
de aquellos que no estn familiarizados con lenguajes de bajo nivel? Tal vez la ltima vez
que escuchaste sobre C y asignacin de pila / heap fue hace 10 aos en el primer
curso de ciencias de la computacin (o tal vez nunca). Rust ofrece el rendimiento
normalmente visto slo en los idiomas de sistemas de bajo nivel pero la mayora de las
veces, sin duda se siente como un lenguaje de alto nivel! Aqu hay algunos ejemplos de
cmo puedes aprovechar Rust ahora en aplicaciones prcticas:
Quiero hackear en hardware / aplicaciones de Internet de las cosas
La era Internet de las cosas (IoT) y la expansin del movimiento maker permite una
democratizacin real de proyectos de hardware. Ya se trate de la Raspberry Pi, Arduino, o
uno de los jvenes titanes como el BeagleBone o Tessel, puedes elegir entre una gran
cantidad de lenguajes para codificar tus proyectos de hardware, incluyendo Python o
JavaScript.
Hay veces, sin embargo, cuando el rendimiento que ofrecen estos lenguajes no es
adecuado. En otras ocasiones, el microcontrolador de hardware que pretendemos
soportar no es adecuado para los ambientes de ejecucin que estos lenguajes requieren:
chips lentos con reservas de memoria pequeas y aplicaciones de ultra bajo consumo de
energa todava requieren un lenguaje ms cerca al metal. Tradicionalmente este lenguaje
ha sido C pero como ya habrn adivinado, Rust es el nuevo chico en el bloque.
Rust es compatible con una amplia variedad de plataformas exticas. Mientras que algo
de esto es todava experimental, el soporte incluye hardware ARM genrico, el tablero de
desarrollo TIVA de Texas Instruments, e incluso el Raspberry Pi. Algunas de las nuevas
tablas de IoT como el Tessel 2, vienen con soporte oficial para Rust!
Estoy operando aplicaciones de computacin de alto rendimiento que escalan a mltiples
ncleos
Los estudios sugieren que Rust ya es bueno para HPC (computacin de alto
rendimiento). Incluso no tienes que reescribir toda tu aplicacin en Rust: su
flexible interfaz para funciones forneas (FFI) proporciona enlaces de C eficientes que te
permiten exponer y llamar cdigo Rust sin ninguna sobrecarga notable. Esto te permite
volver a escribir tu aplicacin mdulo por mdulo, pasando lentamente hacia una mejor
experiencia del desarrollador que se traducir en rendimiento equivalente al cdigo
antiguo o mejor. Tambin conseguirn una base de cdigo ms fcil de mantener con
menos errores, que escala mejor en un elevado nmero de ncleos.
Simplemente necesito algo rpido!
Rust es ideal para reescribir partes sensibles al rendimiento de tu aplicacin. Se conecta
bien con otros lenguajes a travs de FFI y tiene un pequeo tiempo de ejecucin que
compite con C y C ++ en la mayora de los casos, incluso cuando los recursos son
limitados.
A pesar de la naturaleza de trabajo en progreso del lenguaje, ya hay aplicaciones crticas
de negocio, en vivo en produccin que han estado haciendo un buen uso de Rust desde
hace algn tiempo: el startup de Yehuda Katz, Skylight, utiliza cdigo Rust de alto
rendimiento incrustado en un gem de Ruby para procesamiento de datos. La versin 1.0.0
estable es tambin un hito importante en que no deberan ocurrir cambios de ruptura de
compatibilidad a partir de ahora. Eso hace que sea seguro recomendar Rust incluso para
las aplicaciones ms exigentes y robustas!
Ve a Yehuda Katz y Tom Dale hablar de los fundamentos de la programacin Rust y cmo
utilizaron Rust con Ruby en su aplicacin.
Empezando con Rust
Hay muchos tutoriales que cubren Rust en general, as como los aspectos especficos del
lenguaje. Por ejemplo, el blog de Rust tiene grandes artculos sobre diversos aspectos de
desarrollo de aplicaciones Rust. Tambin hay excelentes charlas introductorias como la
charla de Aaron Turon en la Universidad de Stanford. Explica los principales conceptos y
motivaciones detrs de Rust muy bien, y la charla sirve el aperitivo perfecto para empezar
tu recorrido:
Charlas y tutoriales no son un sustituto para la escritura de cdigo, no? Rust tiene todo
cubierto en ese sentido, tambin! El libro de Rust fue concebido para ayudarte a empezar
desde la instalacin, al primer Hello World, hasta proporcionar una referencia detallada
de todas las caractersticas lingsticas esenciales.
Otro recurso digno de mencionar es Rust by Example, que te gua a travs de las
caractersticas clave de Rust, desde lo ms bsico a los poderes arcanos de rasgos
(traits), macros y la FFI. Este recurso ofrece ejemplos invaluables, editables en vivo en el
navegador para todos los artculos. Incluso no tienes que descargar y compilar Rust, ya
que se puede probar y editar todos estos ejemplos desde la comodidad de tu sof de la
sala, tal y como son. Tambin est el Rust Playpen para exactamente el mismo propsito.
No es que la descarga e instalacin Rust es mucho problema, de todos modos. Dirgete a
la pgina de inicio y descarga el binario / instalador apropiado all. Las descargas
contienen todas las herramientas que necesitas para empezar (como el
compilador rustc, o el gestor de paquetes cargo), y estn disponibles pre-construidos
para todas las plataformas (Windows, Linux y OSX).
Qu es entonces, lo que hace Rust tan nico, tan diferente?
El camino Rust
Podra decirse que es el modelo de propiedad nico de Rust el que le permite brillar de
verdad la eliminacin de clases enteras de errores relacionados con administracin de
threads y la gestin de memoria, mientras que facilita el desarrollo y la depuracin.
Tambin es muy valioso para mantener un ambiente de ejecucin mnimo y la salida del
compilador liviana y con buen desempeo.
El modelo de propiedad
El principio bsico del modelo de propiedad de Rust es que cada recurso puede
pertenecer a un y slo un dueo. Un recurso puede ser cualquier cosa de un
segmento de memoria a un socket de red abierto a algo ms abstracto como un bloqueo
de exclusin mutua. El propietario de dicho recurso es responsable de usar, posiblemente
prestar el recurso (a otros usuarios), y finalmente limpiarlo.
Todo esto sucede de forma automtica, con la ayuda de rangos (scopes) y asignaciones
(bindings): las asignaciones son propietarias de valores o los piden prestados, y persisten
hasta el final de su rango. Cuando las asignaciones se salen de su rango, o bien dan su
recurso prestado de vuelta, o lo eliminan si eran propietarias.
Lo que es an mejor es que los controles necesarios para que el modelo de propiedad
funcione son ejecutados y aplicados por el compilador Rust y el revisor de
prstamos durante la compilacin, que a su vez se traduce en diversos beneficios.
Abstracciones de cero costo
Ya que el correcto funcionamiento de un programa se afirma en tiempo de compilacin, el
cdigo que compila en general puede considerarse seguro en cuanto a los tipos ms
comunes de errores de memoria y de concurrencia (como defectos use-after-
free o carreras de datos). Esto es posible porque Rust se queja en tiempo de compilacin
si el programador intenta hacer algo que viola los principios anteriores, que a su vez
ayuda a mantener el ambiente de ejecucin al mnimo.
Al delegar estos controles al tiempo de compilacin, no hay necesidad de realizarlos en
tiempo de ejecucin (el cdigo ya es seguro), y no hay sobrecarga de tiempo de
ejecucin. En el caso de las asignaciones de memoria, no hay necesidad de un recolector
de basura de tiempo de ejecucin, tampoco. Esto construcciones avanzadas del
lenguaje con poca o ninguna sobrecarga de tiempo de ejecucin es la idea bsica de
abstracciones de cero costo.
Aunque una explicacin detallada del modelo de propiedad se encuentra fuera del
alcance de este artculo, el Libro de Rust (vinculado arriba) y varias charlas y artculos
sobresalen en la explicacin de sus principios. Los principios de apropiacin y el revisor
de prstamos son esenciales para la comprensin de Rust, y son claves para otros
aspectos de gran alcance del lenguaje, al igual que su manejo de la concurrencia y
paralelismo.
Dos pjaros, una construccin del lenguaje
El estado mutable compartido es la raz de todos los males. La mayora de los lenguajes
tratan de hacer frente a este problema a travs de la parte mutable, pero Rust trata con l
mediante la resolucin de la parte compartido.
El libro Rust
int main(void)
{
int num;
for(num=1; num<101; ++num)
{
if( num%3 == 0 && num%5 == 0 ) {
printf("fizzbuzz\n");
} else if( num%3 == 0) {
printf("fizz\n");
} else if( num%5 == 0) {
printf("buzz\n");
} else {
printf("%d\n",num);
}
}
return 0;
}
FizzBuzz Imperativo versin Python
for num in xrange(1,101):
if num%3 == 0 and num%5 == 0:
print "fizzbuzz"
elif num%3 == 0:
print "fizz"
elif num%5 == 0:
print "buzz"
else:
print num
FizzBuzz Imperativo Versin Rust
fn main() {
for num in 1..101 { // notacin de rangos!
match (num%3, num%5) { // reconocimiento de patrones!
(0, 0) => println!("fizzbuzz"),
(0, _) => println!("fizz"),
(_, 0) => println!("buzz"),
_ => println!("{}", num)
}
}
}
Abrir este cdigo en Rust Playpen >>
Incluso en un pequeo fragmento de este tipo, algo del poder de Rust se comienza a
mostrar. La diferencia ms obvia podra ser que estamos usando reconocimiento de
patrones en lugar de los tradicionales if. Nosotros podramos usarlos, sin embargo
el match es una adicin muy til al arsenal de un Rustacean.
La otra cosa que cabe notar es la notacin de rango en el ciclo for (similar a su
contraparte de Python). Es interesante, sin embargo, que en este caso no
podramos haber utilizado un tradicional ciclo for C dado que no est soportado en
Rust por diseo. Los ciclos for tradicionales se consideran propensos a errores y se
sustituyen con el ms seguro y ms flexible concepto de iterables.
He aqu un vistazo ms elaborado de lo que sucede en la fase de reconocimientos de
patrones de nuestro ejemplo FizzBuzz:
...
o Bio
o Latest Posts
jorgev
Add-ons Developer Relations Lead at Mozilla
Jorge trabaja para el equipo de complementos de Mozilla, y se dedica a Mozilla Hispano y Mozilla
Costa Rica en su tiempo libre. Actualmente est encargado del blog de Mozilla Hispano Labs.
Artculos relacionados
Notable Replies
1. Miguel_Usechesays:
26/11/2015
Cool, excelente artculo
Continue the discussion foro.mozilla-hispano.org
Participants
Buscar
Participa!
Firefox Friends
Agrega botones de Firefox en tu sitio web y comparte tu amor por Mozilla Firefox.
Armada alucinante
Ayuda a otros usuarios en Twitter.
Boletn Firefox
Suscrbete al boletn de novedades de Firefox.
Descargas
Descarga los programas de Mozilla.
Lo ms visto
o Nueva actualizacin de Firefox, FLAC, y ayuda de seguridad
o Firefox ahora habla Guaran e incorpora detalles interesantes