Rust es un lenguaje de programación de propósito general que hace hincapié en el rendimiento , la seguridad de tipos , la concurrencia y la seguridad de la memoria .
Rust admite múltiples paradigmas de programación . Se vio influenciado por ideas de la programación funcional , incluyendo la inmutabilidad , las funciones de orden superior , los tipos de datos algebraicos y la coincidencia de patrones . También admite la programación orientada a objetos mediante estructuras, enumeraciones , rasgos y métodos. Rust garantiza la seguridad de la memoria (es decir, que todas las referencias apunten a memoria válida) sin un recolector de basura convencional ; en su lugar, los errores de seguridad de memoria y las condiciones de carrera se previenen mediante el "verificador de préstamos", que rastrea el ciclo de vida de los objetos a los que se hace referencia en tiempo de compilación .
El desarrollador de software Graydon Hoare creó Rust en 2006 mientras trabajaba en Mozilla , empresa que patrocinó oficialmente el proyecto en 2009. La primera versión estable, Rust 1.0, se publicó en mayo de 2015. El proyecto cuenta con el patrocinio de la Fundación Rust desde febrero de 2021.
Rust ha sido adoptado por numerosos proyectos de software, especialmente servicios web y software de sistema . Ha sido objeto de estudios académicos y cuenta con una creciente comunidad de desarrolladores.
Historia
2006–2009: Primeros años
Rust comenzó como un proyecto personal del empleado de Mozilla Graydon Hoare en 2006. Según MIT Technology Review , comenzó el proyecto debido a su frustración con un ascensor averiado en su edificio de apartamentos cuyo software se había bloqueado, [ 20 ] y nombró el lenguaje en honor al grupo de hongos del mismo nombre que está "sobreingeniería para la supervivencia". [ 20 ] Durante el período entre 2006 y 2009, Rust no fue publicitado a otros en Mozilla y fue escrito en el tiempo libre de Hoare; [ 21 ] : 7:50 Hoare comenzó a hablar sobre el lenguaje alrededor de 2009 después de que un pequeño grupo en Mozilla se interesara en el proyecto. [ 22 ] Hoare citó lenguajes de las décadas de 1970, 1980 y 1990 como influencias, incluyendo CLU , BETA , Mesa , NIL, [ nota 4 ] Erlang , Newsqueak , Napier , Hermes , Sather , Alef y Limbo . [ 22 ] Describió el lenguaje como "tecnología del pasado que viene a salvar al futuro de sí mismo". [ 21 ] : 8:17 [ 22 ] El desarrollador inicial de Rust, Manish Goregaokar, describió de manera similar a Rust como basado en "investigaciones de décadas de antigüedad". [ 20 ]
Durante los primeros años, el compilador de Rust estaba escrito en aproximadamente 38.000 líneas de OCaml . [ 21 ] : 15:34 [ 23 ] Las primeras versiones de Rust contenían varias características que ya no están presentes hoy en día, incluyendo la programación orientada a objetos explícita mediante una objpalabra clave [ 21 ] : 10:08 y un sistema de estados de tipo para cambios de estado de variables, como pasar de no inicializado a inicializado. [ 21 ] : 13:12
2009–2012: Patrocinio de Mozilla
Mozilla patrocinó oficialmente el proyecto Rust en 2009. [ 20 ] Brendan Eich y otros ejecutivos, intrigados por la posibilidad de usar Rust para un motor de navegador web seguro , asignaron ingenieros al proyecto, entre ellos Patrick Walton, Niko Matsakis, Felix Klock y Manish Goregaokar. [ 20 ] Una sala de conferencias ocupada por los desarrolladores del proyecto fue apodada "la cueva de los nerds", con un letrero colocado en la puerta. [ 20 ]
Durante este período, el trabajo pasó del compilador OCaml inicial a un compilador autoalojado ( es decir , escrito en Rust) dirigido a LLVM . [ 24 ] [ nota 5 ] El sistema de propiedad se implementó en 2010. [ 20 ] El logotipo de Rust se desarrolló en 2011 basado en un plato de bicicleta. [ 26 ]
Rust 0.1 se convirtió en la primera versión pública el 20 de enero de 2012 [ 27 ] para Windows, Linux y MacOS. [ 28 ] A principios de la década de 2010 se observó una creciente participación de ingenieros a tiempo completo en Mozilla y voluntarios de código abierto fuera de Mozilla. [ 20 ]
2012–2015: Evolución
Los años de 2012 a 2015 estuvieron marcados por cambios sustanciales en el sistema de tipos de Rust . [ 21 ] : 18:36 [ 20 ] La gestión de memoria a través del sistema de propiedad se consolidó y expandió gradualmente. Para 2013, el recolector de basura se usaba poco y se eliminó en favor del sistema de propiedad. [ 20 ] Se eliminaron otras características para simplificar el lenguaje, incluidos los estados de tipo, la purepalabra clave, [ 29 ] varios tipos de punteros especializados y el soporte de sintaxis para canales . [ 21 ] : 22:32
Según Steve Klabnik, Rust se vio influenciado durante este período por desarrolladores provenientes de C++ (por ejemplo, rendimiento de bajo nivel de las funcionalidades), lenguajes de scripting (por ejemplo, Cargo y gestión de paquetes) y programación funcional (por ejemplo, desarrollo de sistemas de tipos). [ 21 ] : 30:50
Graydon Hoare renunció a Rust en 2013. [ 20 ] Tras la partida de Hoare, evolucionó orgánicamente bajo una estructura de gobernanza federada, con un "equipo central" inicialmente de seis personas, [ 21 ] : 21:45 y alrededor de 30-40 desarrolladores en total en varios otros equipos. [ 21 ] : 22:22 Se agregó un proceso de Solicitud de Comentarios (RFC) para nuevas características del lenguaje en marzo de 2014. [ 21 ] : 33:47 El equipo central crecería a nueve personas para 2016 [ 21 ] : 21:45 con más de 1600 RFC. [ 21 ] : 34:08
Según Andrew Binstock para Dr. Dobb's Journal en enero de 2014, si bien Rust era "ampliamente considerado un lenguaje notablemente elegante", su adopción se ralentizó debido a que cambiaba radicalmente de una versión a otra. [ 30 ] El desarrollo de Rust en ese momento se centró en finalizar las características de la versión 1.0 para poder comenzar a prometer compatibilidad con versiones anteriores . [ 21 ] : 41:26
Seis años después del patrocinio de Mozilla, Rust 1.0 se publicó y se convirtió en la primera versión estable el 15 de mayo de 2015. [ 20 ] Un año después, el compilador de Rust había acumulado más de 1400 colaboradores y había más de 5000 bibliotecas de terceros publicadas en el sitio web de gestión de paquetes de Rust, Crates.io. [ 21 ] : 43:15
2015–2020: Servo y adopción temprana

El desarrollo del motor de navegador Servo continuó en paralelo con Rust, financiado conjuntamente por Mozilla y Samsung . [ 31 ] Los equipos detrás de los dos proyectos trabajaron en estrecha colaboración; el equipo de Servo probaba las nuevas características de Rust, y las nuevas características de Servo se usaban para dar retroalimentación al equipo de Rust. [ 21 ] : 5:41 La primera versión de Servo se lanzó en 2016. [ 20 ] El navegador web Firefox se lanzó con código Rust a partir de 2016 (versión 45), [ 21 ] : 53:30 [ 32 ] pero los componentes de Servo no aparecieron en Firefox hasta septiembre de 2017 (versión 57) como parte de los proyectos Gecko y Quantum . [ 33 ]
Se realizaron mejoras en el ecosistema de la cadena de herramientas de Rust durante los años posteriores a la versión 1.0, incluyendo Rustfmt , la integración del entorno de desarrollo integrado , [ 21 ] : 44:56 y un ciclo regular de pruebas y lanzamiento de compiladores. [ 21 ] : 46:48 La comunidad de Rust obtuvo un código de conducta y un chat IRC para discusiones. [ 21 ] : 50:36
La adopción más temprana conocida fuera de Mozilla fue por proyectos individuales en Samsung, Facebook (ahora Meta Platforms ), Dropbox y Tilde, Inc., la empresa detrás de ember.js . [ 21 ] : 55:44 [ 20 ] Amazon Web Services siguió en 2020. [ 20 ] Los ingenieros citaron el rendimiento, la falta de un recolector de basura, la seguridad y la agradable experiencia de trabajar en el lenguaje como razones para la adopción. Los desarrolladores de Amazon citaron un hallazgo de investigadores portugueses que indicaba que el código Rust consumía menos energía en comparación con un código similar escrito en Java . [ 20 ] [ 34 ]
2020-presente: Despidos en Mozilla y la Fundación Rust
En agosto de 2020, Mozilla despidió a 250 de sus 1000 empleados en todo el mundo, como parte de una reestructuración corporativa provocada por la pandemia de COVID-19 . [ 35 ] [ 36 ] El equipo detrás de Servo se disolvió. El evento generó preocupación sobre el futuro de Rust. [ 37 ] La semana siguiente, el Rust Core Team reconoció el grave impacto de los despidos y anunció que se estaban preparando planes para una fundación de Rust. El primer objetivo de la fundación sería adquirir la propiedad de todas las marcas registradas y nombres de dominio y asumir la responsabilidad financiera de sus costos. [ 38 ]
El 8 de febrero de 2021, cinco empresas fundadoras anunciaron la creación de la Fundación Rust : Amazon Web Services , Google , Huawei , Microsoft y Mozilla . [ 39 ] [ 40 ] La fundación proporcionaría apoyo financiero a los desarrolladores de Rust en forma de subvenciones y financiación de servidores. [ 20 ] En una entrada de blog publicada el 6 de abril de 2021, Google anunció el soporte para Rust dentro del Proyecto de Código Abierto de Android como alternativa a C/C++. [ 41 ]
El 22 de noviembre de 2021, el Equipo de Moderación, responsable de hacer cumplir el código de conducta de la comunidad, anunció su renuncia "en protesta por el hecho de que el Equipo Central se eximiera de toda responsabilidad". [ 42 ] En mayo de 2022, miembros del consejo de liderazgo de Rust publicaron una respuesta pública al incidente. [ 43 ]
La Fundación Rust publicó un borrador de una nueva política de marcas registradas el 6 de abril de 2023, lo que generó reacciones negativas generalizadas entre los usuarios y colaboradores de Rust. [ 44 ] La política de marcas registradas incluía reglas sobre cómo se podían usar el logotipo y el nombre de Rust. [ 44 ]
Sintaxis y características
La sintaxis de Rust es similar a la de C y C++ , [ 45 ] [ 46 ] aunque muchas de sus características fueron influenciadas por lenguajes de programación funcional como OCaml . [ 47 ] Hoare ha descrito Rust como dirigido a desarrolladores de C++ frustrados. [ 22 ]
Programa Hola Mundo
A continuación se muestra un programa "¡Hola, mundo!" en Rust. La fnpalabra clave denota una función , y la println!macro (ver § Macros ) imprime el mensaje en la salida estándar . [ 48 ] Las instrucciones en Rust se separan con punto y coma .
fn main () { println! ( "Hola, mundo!" ); }Variables
Las variables en Rust se definen mediante la letpalabra clave. [ 49 ] El siguiente ejemplo asigna un valor a la variable con nombre foode tipo i32y muestra su valor; la anotación de tipo puede omitirse.:i32
fn main () { let foo : i32 = 10 ; println! ( "El valor de foo es {foo}" ); }Las variables son inmutables por defecto, a menos que mutse añada la palabra clave. [ 50 ] El siguiente ejemplo utiliza //, que denota el inicio de un comentario . [ 51 ]
fn main () { // Este código no compilaría sin agregar "mut". let mut foo = 10 ; println! ( "El valor de foo es {foo}" ); foo = 20 ; println! ( "El valor de foo es {foo}" ); }Varias letexpresiones pueden definir varias variables con el mismo nombre, lo que se conoce como ocultamiento de variables . El ocultamiento de variables permite transformar variables sin tener que cambiarles el nombre. [ 52 ] El siguiente ejemplo declara una nueva variable con el mismo nombre que duplica el valor original:
fn main () { let foo = 10 ; // Esto imprimirá "El valor de foo es 10" println! ( "El valor de foo es {foo}" ); let foo = foo * 2 ; // Esto imprimirá "El valor de foo es 20" println! ( "El valor de foo es {foo}" ); }También es posible el sombreado de variables para valores de diferentes tipos. Por ejemplo, pasar de una cadena a su longitud:
fn main () { let letters = "abc" ; let letters = letters . len (); }Expresiones de bloque y flujo de control
Una expresión de bloque está delimitada por llaves . Cuando la última expresión dentro de un bloque no termina con un punto y coma, el bloque se evalúa al valor de esa expresión final: [ 53 ]
fn main () { let x = { println! ( "esto está dentro del bloque" ); 1 + 2 }; println! ( "1 + 2 = {x}" ); }Las expresiones finales de los cuerpos de las funciones se utilizan como valor de retorno: [ 54 ]
fn add_two ( x : i32 ) -> i32 { x + 2 }ifexpresiones
Una ifexpresión condicional ejecuta código en función de si el valor dado es verdadero o falso true. elseSe puede usar para cuando el valor se evalúa como verdadero false, y se puede usar para combinar múltiples expresiones. [ 55 ]elseif
fn main () { let x = 10 ; if x > 5 { println! ( "el valor es mayor que cinco" ); }if x % 7 == 0 { println! ( "El valor es divisible por 7" ); } else if x % 5 == 0 { println! ( "El valor es divisible por 5" ); } else { println! ( "El valor no es divisible por 7 ni por 5" ); } }ify elselos bloques pueden evaluarse a un valor, que luego se puede asignar a una variable: [ 55 ]
fn main () { let x = 10 ; let new_x = if x % 2 == 0 { x / 2 } else { 3 * x + 1 }; println! ( "{new_x}" ); }whilebucles
whilepuede utilizarse para repetir un bloque de código mientras se cumple una condición. [ 56 ]
fn main () { // Iterar sobre todos los enteros del 4 al 10 let mut value = 4 ; while value <= 10 { println! ( "value = {value}" ); value += 1 ; } }forbucles e iteradores
Los bucles for en Rust recorren los elementos de una colección. [ 57 ]for Las expresiones funcionan sobre cualquier tipo de iterador .
fn main () { // Usando `for` con sintaxis de rango para la misma funcionalidad que arriba // La sintaxis 4..=10 significa el rango de 4 a 10, hasta 10 inclusive. for value in 4 ..= 10 { println! ( "value = {value}" ); } }En el código anterior, es un valor de tipo que implementa el rasgo. El código dentro de las llaves se aplica a cada elemento devuelto por el iterador.4..=10RangeIterator
Los iteradores se pueden combinar con funciones sobre iteradores como map, filter, y sum. Por ejemplo, la siguiente suma todos los números entre 1 y 100 que son múltiplos de 3:
( 1 ..= 100 ). filtro ( | x | x % 3 == 0 ). suma ()loopy breakdeclaraciones
En términos más generales, la looppalabra clave permite repetir una porción de código hasta que breakocurra una condición. breakOpcionalmente, puede salir del bucle con un valor. En el caso de bucles anidados, las etiquetas denotadas por pueden usarse para romper un bucle externo en lugar del bucle más interno. [ 58 ]'label_name
fn main () { let value = 456 ; let mut x = 1 ; let y = loop { x *= 10 ; if x > value { break x / 10 ; } }; println! ( "Mayor potencia de diez que es menor o igual que value: {y}" );let mut up = 1 ; ' outer : loop { let mut down = 120 ; loop { if up > 100 { break 'outer ; }Si down < 4 { break ; }abajo /= 2 ; arriba += 1 ; println! ( "arriba: {arriba}, abajo: {abajo}" ); } arriba *= 2 ; } }Coincidencia de patrones
Las expresiones matchy se pueden usar para la coincidencia de patrones . Por ejemplo, se puede usar para duplicar un valor entero opcional si está presente y devolver cero en caso contrario: [ 59 ]ifletmatch
fn double ( x : Option < u64 > ) -> u64 { match x { Some ( y ) => y * 2 , None => 0 , } }De forma equivalente, esto se puede escribir con y :ifletelse
fn double ( x : Option < u64 > ) -> u64 { if let Some ( y ) = x { y * 2 } else { 0 } }Tipos
Rust es fuertemente tipado y estático , lo que significa que los tipos de todas las variables deben conocerse en tiempo de compilación. Asignar un valor de un tipo particular a una variable de tipo diferente provoca un error de compilación . Se utiliza la inferencia de tipos para determinar el tipo de las variables si no se especifica. [ 60 ]
El tipo (), llamado "tipo de unidad" en Rust, es un tipo concreto que tiene exactamente un valor. No ocupa memoria (ya que representa la ausencia de valor). Todas las funciones que no tienen un tipo de retorno indicado devuelven implícitamente (). Es similar a voiden otros lenguajes de estilo C; sin embargo, voiddenota la ausencia de un tipo y no puede tener ningún valor.
El tipo de entero predeterminado es i32, y el tipo de punto flotante predeterminado es f64. Si el tipo de un número literal no se proporciona explícitamente, se infiere del contexto o se utiliza el tipo predeterminado. [ 61 ]
Tipos primitivos
Los tipos enteros en Rust se nombran según su signo y la cantidad de bits que ocupan. Por ejemplo, i32es un entero con signo que ocupa 32 bits de almacenamiento, mientras que u8es sin signo y solo ocupa 8 bits. isizey usizeocupan almacenamiento dependiendo del ancho del bus de direcciones de memoria del destino de compilación. Por ejemplo, al compilar para destinos de 32 bits , ambos tipos ocuparán 32 bits de espacio. [ 62 ] [ 63 ]
Por defecto, los literales enteros están en base 10, pero se admiten diferentes bases0b11 con prefijos, por ejemplo, para números binarios , 0o567para octales y 0xDBpara hexadecimales . Por defecto, los literales enteros tienen como tipo predeterminado. Se pueden usar i32sufijos como para establecer explícitamente el tipo de un literal. [ 64 ] Los literales de byte como están disponibles para representar el valor ASCII (como un ) de un carácter específico. [ 65 ]4u32b'X'u8
El tipo booleano se denomina boolque puede tomar un valor de trueo false. Un charocupa 32 bits de espacio y representa un valor escalar Unicode: [ 66 ] un punto de código Unicode que no es un sustituto . [ 67 ] Los números de punto flotante IEEE 754 son compatibles con f32para flotantes de precisión simple y f64para flotantes de doble precisión . [ 68 ]
Tipos compuestos
Los tipos compuestos pueden contener múltiples valores. Las tuplas son listas de tamaño fijo que pueden contener valores cuyos tipos pueden ser diferentes. Los arrays son listas de tamaño fijo cuyos valores son del mismo tipo. Las expresiones de los tipos tupla y array se pueden escribir enumerando los valores y se puede acceder a ellos con (con tuplas) o (con arrays): [ 69 ].index[index]
let tuple : ( u32 , bool ) = ( 3 , true ); let array : [ i8 ; 5 ] = [ 1 , 2 , 3 , 4 , 5 ]; let value = tuple . 1 ; // true let value = array [ 2 ]; // 3Los arreglos también se pueden construir copiando un solo valor varias veces: [ 70 ]
let array2 : [ char ; 10 ] = [ ' ' ; 10 ];Propiedad y referencias
El sistema de propiedad de Rust consiste en reglas que garantizan la seguridad de la memoria sin utilizar un recolector de basura. En tiempo de compilación, cada valor debe adjuntarse a una variable llamada propietario de ese valor, y cada valor debe tener exactamente un propietario. [ 71 ] Los valores se mueven entre diferentes propietarios mediante asignación o pasando un valor como parámetro de función. Los valores también pueden tomarse prestados, lo que significa que se pasan temporalmente a una función diferente antes de ser devueltos al propietario. [ 72 ] Con estas reglas, Rust puede prevenir la creación y el uso de punteros colgantes : [ 72 ] [ 73 ]
fn print_string ( s : String ) { println! ( "{}" , s ); }fn main () { let s = String :: from ( "Hello, World" ); print_string ( s ); // s consumido por print_string // s se ha movido, por lo que ya no se puede usar // otro print_string(s); resultaría en un error de compilación }La función print_stringtoma posesión del Stringvalor pasado como argumento; alternativamente, &se puede usar para indicar un tipo de referencia (en ) y para crear una referencia (en ): [ 74 ]&String&s
fn print_string ( s : & String ) { println! ( "{}" , s ); }fn main () { let s = String :: from ( "Hello, World" ); print_string ( & s ); // s es prestada por print_string print_string ( & s ); // s no ha sido consumida; podemos llamar a la función muchas veces }Debido a estas reglas de propiedad, los tipos de Rust se conocen como tipos afines , lo que significa que cada valor puede usarse como máximo una vez. Esto impone una forma de aislamiento de fallos de software, ya que el propietario de un valor es el único responsable de su corrección y liberación. [ 75 ]
Cuando un valor sale del ámbito, se elimina ejecutando su destructor . El destructor puede definirse programáticamente mediante la implementación del Droprasgo . Esto ayuda a gestionar recursos como identificadores de archivos, sockets de red y bloqueos , ya que cuando se eliminan objetos, los recursos asociados a ellos se cierran o liberan automáticamente. [ 76 ]
vidas
La vida útil de un objeto se refiere al período de tiempo durante el cual una referencia es válida; es decir, el tiempo entre la creación y la destrucción del objeto. [ 77 ] Estas vidas útiles están implícitamente asociadas con todos los tipos de referencia de Rust. Si bien a menudo se infieren, también pueden indicarse explícitamente con parámetros de vida útil con nombre (a menudo denotados como , , etc.). [ 78 ]'a'b
En Rust, la vida útil de un valor se infiere del conjunto de ubicaciones en el código fuente (es decir, números de función, línea y columna) para las que una variable es válida. [ 79 ] Por ejemplo, una referencia a una variable local tiene una vida útil desde la expresión en la que se declara hasta su último uso. [ 79 ]
fn main () { let mut x = 5 ; // ------------------+- Tiempo de vida 'a // | let r = & x ; // -+-- Tiempo de vida 'b | // | | println! ( "r: {}" , r ); // -+ | // Dado que r ya no se usa, | // su tiempo de vida termina | let r2 = & mut x ; // -+-- Tiempo de vida 'c | } // ------------------+El verificador de préstamos del compilador de Rust se asegura de que las referencias solo se utilicen en las ubicaciones del código fuente donde la vida útil asociada sea válida. [ 80 ] [ 81 ] En el ejemplo anterior, almacenar una referencia a la variable xen res válido, ya que la variable xtiene una vida útil más larga ( ) que la variable ( ). Sin embargo, cuando tiene una vida útil más corta, el verificador de préstamos rechazaría el programa:'ar'bx
fn main () { let r ; // ------------------+- Tiempo de vida 'a // | { // | let x = 5 ; // -+-- Tiempo de vida 'b | r = & x ; // ERROR: x no | | } // vive lo suficiente -| | // println! ( "r: {}" , r ); // | } // ------------------+Dado que la vida útil de la variable referenciada ( ) es más corta que la vida útil de la variable que contiene la referencia ( ), el verificador de préstamos falla, impidiendo que se utilice fuera de su ámbito. [ 82 ]'b'ax
Los tiempos de vida se pueden indicar utilizando parámetros de tiempo de vida explícitos en los argumentos de la función. Por ejemplo, el siguiente código especifica que la referencia devuelta por la función tiene el mismo tiempo de vida que original(y no necesariamente el mismo tiempo de vida que prefix): [ 83 ]
fn remove_prefix <' a > ( mut original : & ' a str , prefix : & str ) -> & ' a str { if original . starts_with ( prefix ) { original = original [ prefix . len () .. ]; } original }En el compilador, la propiedad y los tiempos de vida trabajan juntos para prevenir problemas de seguridad de memoria como punteros colgantes. [ 84 ] [ 85 ]
Tipos definidos por el usuario
Los tipos definidos por el usuario se crean con las palabras clave structo enum. La structpalabra clave se utiliza para denotar un tipo de registro que agrupa múltiples valores relacionados. [ 86 ]enum Los pueden adoptar diferentes variantes en tiempo de ejecución, con capacidades similares a los tipos de datos algebraicos que se encuentran en los lenguajes de programación funcional. [ 87 ] Tanto los registros como las variantes de enumeración pueden contener campos con diferentes tipos. [ 88 ] Se pueden definir nombres alternativos, o alias, para el mismo tipo con la typepalabra clave . [ 89 ]
La implpalabra clave puede definir métodos para un tipo definido por el usuario. Los datos y las funciones se definen por separado. Las implementaciones cumplen una función similar a la de las clases en otros lenguajes. [ 90 ]
Biblioteca estándar

La biblioteca estándar de Rust define e implementa muchos tipos de datos personalizados ampliamente utilizados, incluidas estructuras de datos centrales como Vec, Option, y HashMap, así como tipos de punteros inteligentes . Rust proporciona una forma de excluir la mayor parte de la biblioteca estándar utilizando el atributo #![no_std], para aplicaciones como dispositivos embebidos. Internamente, la biblioteca estándar se divide en tres partes, core, alloc, y std, donde stdy allocse excluyen mediante #![no_std]. [ 91 ]
Rust utiliza el tipo de opciónOption<T> para definir valores opcionales, que pueden coincidir utilizando if leto matchpara acceder al valor interno: [ 92 ]
fn main () { let name1 : Option <& str > = None ; // En este caso, no se imprimirá nada if let Some ( name ) = name1 { println! ( "{name}" ); }let name2 : Option <& str > = Some ( "Matthew" ); // En este caso, se imprimirá la palabra "Matthew" if let Some ( name ) = name2 { println! ( "{name}" ); } }De manera similar, el tipo de resultado de Rust Result<T, E>contiene un valor calculado correctamente (la Okvariante) o un error (la Errvariante). [ 93 ] Al igual que Option, el uso de Resultsignifica que el valor interno no se puede usar directamente; los programadores deben usar una matchexpresión, azúcar sintáctico como ?(el operador "try") o una unwrapaserción explícita para acceder a él. Tanto Optioncomo Resultse usan en toda la biblioteca estándar y son una parte fundamental del enfoque explícito de Rust para manejar errores y datos faltantes.
Consejos
Los tipos de referencia &y están garantizados para no ser nulos y apuntar a memoria válida. [ 94 ] Los tipos de puntero sin formato y no cumplen con las garantías de seguridad, por lo que pueden ser nulos o inválidos; sin embargo, es imposible desreferenciarlos a menos que el código se declare explícitamente como no seguro mediante el uso de un bloque. [ 95 ] A diferencia de la desreferenciación, la creación de punteros sin formato está permitida dentro de código Rust seguro. [ 96 ]&mut*const*mutunsafe
Conversión de tipo
Rust no proporciona conversión de tipos implícita (coerción) entre la mayoría de los tipos primitivos. Sin embargo, la conversión de tipos explícita (casting) se puede realizar utilizando la aspalabra clave. [ 97 ]
let x : i32 = 1000 ; println! ( "1000 como u16 es: {}" , x as u16 );Polimorfismo
Rust admite el polimorfismo a través de rasgos , funciones genéricas y objetos de rasgos . [ 98 ]
Rasgos
El comportamiento común entre tipos se declara mediante rasgos y implbloques: [ 99 ]
rasgo Zero : Sized { fn zero () -> Self ; fn is_zero ( & self ) -> bool donde Self : PartialEq , { self == & Zero :: zero () } }impl Zero for u32 { fn zero () -> u32 { 0 } }impl Zero for f32 { fn zero () -> Self { 0.0 } }El ejemplo anterior incluye un método is_zeroque proporciona una implementación predeterminada que puede ser sobrescrita al implementar el rasgo. [ 99 ]
Funciones genéricas
Una función puede hacerse genérica añadiendo parámetros de tipo entre corchetes angulares ( ), que solo permiten tipos que implementen el rasgo:<Num>
// zero es una función genérica con un parámetro de tipo Num fn zero < Num : Zero > () -> Num { Num :: zero () }fn main () { let a : u32 = zero (); let b : f32 = zero (); assert! ( a . is_zero () && b . is_zero ()); }En los ejemplos anteriores, así como son límites de rasgos que restringen el tipo para permitir solo tipos que implementen o . [ 99 ] Dentro de un rasgo o impl, se refiere al tipo que el código está implementando. [ 100 ]Num:ZerowhereSelf:PartialEqZeroPartialEqSelf
Los genéricos se pueden usar en funciones para permitir implementar un comportamiento para diferentes tipos sin repetir el mismo código (véase polimorfismo paramétrico acotado ). Las funciones genéricas se pueden escribir en relación con otros genéricos, sin conocer el tipo real. [ 101 ]
objetos de rasgos
Por defecto, los rasgos utilizan despacho estático : el compilador monomorfiza la función para cada instancia de tipo concreto, lo que produce un rendimiento equivalente al del código específico del tipo a costa de tiempos de compilación más largos y binarios más grandes. [ 102 ]
Cuando el tipo exacto no se conoce en tiempo de compilación, Rust proporciona objetos de rasgo&dyn Trait y Box<dyn Trait>. [ 103 ] Las llamadas a objetos de rasgo utilizan despacho dinámico a través de una tabla de búsqueda; un objeto de rasgo es un "puntero gordo" que contiene tanto un puntero de datos como un puntero a la tabla de métodos. [ 102 ] Esta indirección agrega un pequeño costo en tiempo de ejecución, pero mantiene una sola copia del código y reduce el tamaño binario. Solo los rasgos "seguros para objetos" son elegibles para ser utilizados como objetos de rasgo. [ 104 ]
Este enfoque es similar al tipado dinámico (duck typing) , donde todos los tipos de datos que implementan un rasgo determinado pueden tratarse como funcionalmente intercambiables. [ 105 ] El siguiente ejemplo crea una lista de objetos donde cada objeto implementa el Displayrasgo:
usar std :: fmt :: Display ;let v : Vec < Box < dyn Display >> = vec! [ Box :: new ( 3 ), Box :: new ( 5.0 ), Box :: new ( "hi" ), ];para x en v { println! ( "{x}" ); }Si un elemento de la lista no implementa el Displayrasgo, provocará un error de compilación. [ 106 ]
Gestión de la memoria
Rust no utiliza recolección de basura . La memoria y otros recursos se gestionan mediante la convención de "la adquisición de recursos es la inicialización" [ 107 ] , con conteo de referencias opcional. Rust proporciona una gestión determinista de los recursos, con una sobrecarga muy baja [ 108 ] . Los valores se asignan en la pila por defecto, y todas las asignaciones dinámicas deben ser explícitas [ 109 ] .
Los tipos de referencia integrados que utilizan el &símbolo no implican conteo de referencias en tiempo de ejecución. La seguridad y validez de los punteros subyacentes se verifican en tiempo de compilación, evitando punteros colgantes y otras formas de comportamiento indefinido . [ 110 ] El sistema de tipos de Rust separa las referencias compartidas e inmutables de la forma &Tde las referencias únicas y mutables de la forma &mut T. Una referencia mutable puede ser convertida a una referencia inmutable, pero no al revés. [ 111 ]
Inseguro
Las comprobaciones de seguridad de memoria de Rust (véase #Safety ) pueden eludirse mediante el uso de unsafebloques. Esto permite a los programadores desreferenciar punteros sin formato arbitrarios, llamar a código externo o realizar otras funciones de bajo nivel no permitidas por Rust seguro. [ 112 ] Algunas de las funciones de bajo nivel habilitadas de esta manera incluyen el acceso a memoria volátil , intrínsecas específicas de la arquitectura, el juego de tipos y el ensamblaje en línea. [ 113 ]
Se necesita código inseguro, por ejemplo, en la implementación de estructuras de datos. [ 114 ] Un ejemplo citado con frecuencia es que es difícil o imposible implementar listas doblemente enlazadas en Rust seguro. [ 115 ] [ 116 ] [ 117 ] [ 118 ]
Los programadores que utilizan Rust no seguro son responsables de mantener los requisitos de seguridad de memoria y tipos de Rust, por ejemplo, que no existan dos referencias mutables que apunten a la misma ubicación. [ 119 ] Si los programadores escriben código que viola estos requisitos, esto resulta en un comportamiento indefinido . [ 119 ] La documentación de Rust incluye una lista de comportamientos considerados indefinidos, incluyendo el acceso a punteros colgantes o desalineados, o la violación de las reglas de alias para referencias. [ 120 ]
Macros
Las macros permiten la generación y transformación de código Rust para reducir la repetición. Existen dos tipos de macros: macros declarativas definidas mediante macro_rules!, y macros procedimentales , que se definen en crates separados. [ 121 ] [ 122 ]
macros declarativas
Una macro declarativa (también llamada "macro por ejemplo") es una macro, definida mediante la macro_rules!palabra clave, que utiliza la coincidencia de patrones para determinar su expansión. [ 123 ] [ 124 ] A continuación se muestra un ejemplo que suma todos sus argumentos:
macro_rules! suma { ( $initial : expr $(, $expr : expr ) * $(, ) ? ) => { $initial $( + $expr ) * } }fn main () { let x = sum ! ( 1 , 2 , 3 ); println! ( "{x}" ); // imprime 6 }En este ejemplo, la macro llamada sumse define usando la forma macro_rules! sum {(...) => { ... } }. La primera parte dentro de los paréntesis de la definición, el patrón de macro ( $initial:expr $(, $expr:expr )* $(,)? )especifica la estructura de entrada que puede tomar. Aquí, $initial:exprrepresenta la primera expresión, mientras que $(, $expr:expr )*significa que puede haber cero o más expresiones adicionales separadas por comas después de ella. El final $(,)?permite al llamador incluir opcionalmente una coma final sin causar un error. La segunda parte, después de la flecha =>, describe qué código se generará cuando se invoque la macro. En este caso, $initial $(+ $expr)*significa que el código generado comenzará con la primera expresión, seguida de +y cada una de las expresiones adicionales en secuencia. El *nuevamente significa "repetir este patrón cero o más veces". Esto significa que, cuando la macro se llama más tarde en la línea 8, como sum!(1, 2, 3), la macro se resolverá a 1 + 2 + 3representando la suma de todas las expresiones pasadas.
Macros procedimentales
Las macros procedimentales son funciones de Rust que se ejecutan y modifican el flujo de tokens de entrada del compilador , antes de que se compile cualquier otro componente. Generalmente son más flexibles que las macros declarativas, pero son más difíciles de mantener debido a su complejidad. [ 125 ] [ 126 ]
Las macros procedimentales se presentan en tres variantes:
- Macros con funciones
custom!(...) - Derivar macros
#[derive(CustomDerive)] - macros de atributos
#[custom_attribute]
Interfaz con C y C++
Rust admite la creación de interfaces de funciones externas (FFI) mediante la externpalabra clave. Una función que utiliza la convención de llamada de C se puede escribir usando . Los símbolos se pueden exportar de Rust a otros lenguajes mediante el atributo, y los símbolos se pueden importar a Rust mediante bloques: [ nota 6 ] [ 128 ]extern"C"fn#[unsafe(no_mangle)]extern
#[unsafe(no_mangle)] pub extern "C" fn exported_from_rust ( x : i32 ) -> i32 { x + 1 } unsafe extern "C" { fn imported_into_rust ( x : i32 ) -> i32 ; }El #[repr(C)]atributo permite diseños de memoria deterministas para structs y enums para su uso a través de límites FFI. [ 128 ] Bibliotecas externas como bindgeny cxxpueden generar enlaces de Rust para C/C++. [ 128 ] [ 129 ]
Seguridad
Las propiedades de seguridad garantizadas por Rust incluyen seguridad de memoria , seguridad de tipos y ausencia de condiciones de carrera de datos . Como se describió anteriormente, estas garantías pueden eludirse utilizando la unsafepalabra clave.
La seguridad de la memoria incluye la ausencia de desreferencias a punteros nulos , colgantes y desalineados , y la ausencia de desbordamientos de búfer y errores de doble liberación . [ 130 ] [ 131 ] [ 132 ] [ 133 ]
Las fugas de memoria son posibles en Rust seguro. [ 134 ] Las fugas de memoria pueden ocurrir como resultado de la creación de punteros con conteo de referencias que apuntan entre sí (un ciclo de referencias) [ 134 ] o pueden crearse deliberadamente mediante la llamada a Box::leak. [ 135 ]
Ecosistema
El ecosistema de Rust incluye su compilador, su biblioteca estándar y componentes adicionales para el desarrollo de software. La instalación de componentes se gestiona normalmente mediante rustup, un instalador de la cadena de herramientas de Rust desarrollado por el proyecto Rust. [ 136 ]
Compilador
El compilador de Rust rustccompila el código Rust en binarios . Primero, el compilador analiza el código fuente y lo convierte en un AST . A continuación, este AST se convierte en IR . Luego, se invoca el backend del compilador como un subcomponente para aplicar optimizaciones y traducir el IR resultante a código objeto . Finalmente, se utiliza un enlazador para combinar los objetos en una única imagen ejecutable. [ 137 ]
rustc utiliza LLVM como su backend de compilación por defecto, pero también admite el uso de backends alternativos como GCC y Cranelift . [ 138 ] La intención de esos backends alternativos es aumentar la cobertura de la plataforma de Rust o mejorar los tiempos de compilación. [ 139 ] [ 140 ]
Carga

Cargo es el sistema de compilación y gestor de paquetes de Rust . Descarga, compila, distribuye y sube paquetes —llamados crates— que se mantienen en un registro oficial. También actúa como interfaz para Clippy y otros componentes de Rust. [ 141 ]
Por defecto, Cargo obtiene sus dependencias del registro aportado por los usuarios crates.io , pero también se pueden especificar como dependencias repositorios Git , crates en el sistema de archivos local y otras fuentes externas. [ 142 ]
Cargo admite compilaciones reproducibles a través de dos archivos de metadatos: Cargo.toml y Cargo.lock. [ 143 ] Cargo.toml declara cada paquete utilizado y sus requisitos de versión. Cargo.lock se genera automáticamente durante la resolución de dependencias y registra las versiones exactas de todas las dependencias, incluidas las dependencias transitivas . [ 144 ]
Rustfmt
Rustfmt es un formateador de código para Rust. Formatea los espacios en blanco y la indentación para producir código de acuerdo con un estilo común , a menos que se especifique lo contrario. Se puede invocar como un programa independiente o desde un proyecto Rust a través de Cargo. [ 145 ]
Clippy

Clippy es la herramienta de análisis estático integrada de Rust para mejorar la corrección, el rendimiento y la legibilidad del código Rust. A partir de 2026, tiene más de 800 reglas. [ 146 ] [ 147 ]
Sistema de versiones
Tras Rust 1.0, se desarrollan nuevas funcionalidades en versiones nocturnas , que se publican diariamente. Durante cada ciclo de lanzamiento de seis semanas, los cambios de las versiones nocturnas se publican en la versión beta, mientras que los cambios de la versión beta anterior se publican en una nueva versión estable. [ 148 ]
Cada dos o tres años se publica una nueva "edición". Las ediciones se lanzan para permitir realizar cambios incompatibles limitados , como la promoción awaita una palabra clave para admitir las características async/await . Los paquetes que apuntan a diferentes ediciones pueden interoperar entre sí, por lo que un paquete puede actualizarse a una nueva edición incluso si sus llamadores o sus dependencias aún apuntan a ediciones anteriores. La migración a una nueva edición puede facilitarse con herramientas automatizadas. [ 149 ]
Soporte IDE
rust-analyzer es un conjunto de utilidades que proporciona a los entornos de desarrollo integrados (IDE) y a los editores de texto información sobre un proyecto Rust a través del Protocolo de servidor de lenguaje . Esto habilita funciones como el autocompletado y la visualización de errores de compilación durante la edición de código. [ 150 ]
Actuación
Dado que no realiza recolección de basura, Rust suele ser más rápido que otros lenguajes seguros en cuanto a memoria. [ 151 ] [ 75 ] [ 152 ] La mayoría de las garantías de seguridad de memoria de Rust no imponen sobrecarga en tiempo de ejecución, [ 153 ] con la notable excepción de la indexación de matrices , que se verifica en tiempo de ejecución por defecto. [ 154 ] El impacto en el rendimiento de las comprobaciones de límites de indexación de matrices varía, pero puede ser significativo en algunos casos. [ 154 ]
Muchas de las características de Rust son las llamadas abstracciones de costo cero , lo que significa que se optimizan en tiempo de compilación y no generan penalización en tiempo de ejecución. [ 155 ] El sistema de propiedad y préstamo permite implementaciones de copia cero para algunas tareas sensibles al rendimiento, como el análisis sintáctico . [ 156 ] El despacho estático se utiliza por defecto para eliminar las llamadas a métodos , excepto para los métodos llamados en objetos de rasgos dinámicos. [ 157 ] El compilador utiliza la expansión en línea para eliminar las llamadas a funciones y las invocaciones de métodos despachados estáticamente. [ 158 ]
A diferencia de C y C++, Rust permite que el compilador reordene los elementos de struct y enum a menos que #[repr(C)]se aplique un atributo de representación. [ 159 ] Esto permite que el compilador produzca código más eficiente en algunos casos. [ 160 ]
Las mejoras de rendimiento en LLVM se trasladan a Rust. [ 161 ]
Adopción

En los servicios web , OpenDNS , un servicio de resolución DNS propiedad de Cisco , utiliza Rust internamente. [ 162 ] [ 163 ] Amazon Web Services utiliza Rust en "componentes sensibles al rendimiento" de los servicios. En 2019, AWS liberó el código fuente de Firecracker , una solución de virtualización escrita principalmente en Rust. [ 164 ] Microsoft Azure IoT Edge, una plataforma utilizada para ejecutar servicios de Azure en dispositivos IoT , tiene componentes implementados en Rust. [ 165 ] Microsoft también utiliza Rust para ejecutar módulos en contenedores con WebAssembly y Kubernetes . [ 166 ] Cloudflare , una empresa que proporciona servicios de red de entrega de contenido , utilizó Rust para construir un nuevo proxy web llamado Pingora para aumentar el rendimiento y la eficiencia. [ 167 ] El gestor de paquetes npm utilizó Rust para su servicio de autenticación de producción en 2019. [ 168 ] [ 169 ] [ 170 ]

En los sistemas operativos, el kernel de Linux comenzó a introducir soporte experimental para código Rust en la versión 6.1 a finales de 2022, como parte del proyecto Rust para Linux . [ 171 ] [ 172 ] [ 173 ] Los primeros controladores escritos en Rust se incluyeron en la versión 6.8. [ 171 ] En 2025, los desarrolladores del kernel en la Cumbre de Desarrolladores del Kernel de Linux determinaron que el proyecto fue un éxito, y el uso de Rust para el código del kernel ya no se considerará experimental. [ 174 ] Los desarrolladores de Android utilizaron Rust en 2021 para reescribir componentes existentes. [ 175 ] [ 176 ] Microsoft ha reescrito partes de Windows en Rust. [ 177 ] El proyecto r9 tiene como objetivo reimplementar Plan 9 de Bell Labs en Rust. [ 178 ] Rust también se ha utilizado en el desarrollo de nuevos sistemas operativos como Redox , un sistema operativo y microkernel "similar a Unix" , [ 179 ] Theseus, un sistema operativo experimental con gestión de estado modular, [ 180 ] [ 181 ] y la mayor parte de Fuchsia . [ 182 ] Rust se utiliza para herramientas de línea de comandos y componentes de sistemas operativos como stratisd , un gestor de sistemas de archivos [ 183 ] [ 184 ] y COSMIC, un entorno de escritorio de System76 . [ 185 ]
En el desarrollo web, Deno , un entorno de ejecución seguro para JavaScript y TypeScript , está construido sobre V8 usando Rust y Tokio. [ 186 ] Otras adopciones notables en este espacio incluyen Ruffle , un emulador SWF de código abierto , [ 187 ] y Polkadot , una plataforma de blockchain y criptomonedas de código abierto . [ 188 ] Componentes del motor de navegador Servo (financiado por Mozilla y Samsung ) se incorporaron en el motor de navegador Gecko subyacente a Firefox . [ 189 ] En enero de 2023, Google ( Alphabet ) anunció soporte para usar bibliotecas Rust de terceros en Chromium . [ 190 ] [ 191 ]
En otros casos, Discord , una empresa de software de mensajería instantánea , reescribió partes de su sistema en Rust para mejorar su rendimiento en 2020. Ese mismo año, Dropbox anunció que su sistema de sincronización de archivos también se había reescrito en Rust. Facebook ( Meta ) utilizó Rust para rediseñar su sistema de gestión de código fuente para proyectos internos. [ 20 ]
En la encuesta de desarrolladores de Stack Overflow de 2025 , el 14,8 % de los encuestados había realizado recientemente un desarrollo extenso en Rust. [ 192 ] La encuesta nombró a Rust como el "lenguaje de programación más admirado" anualmente desde 2016 hasta 2025 (inclusive), según la cantidad de desarrolladores existentes interesados en continuar trabajando en el lenguaje. [ 193 ] [ nota 7 ] En 2025, el 29,2 % de los desarrolladores que no trabajaban actualmente en Rust expresaron interés en hacerlo. [ 192 ]
En la investigación académica
La seguridad y el rendimiento de Rust se han investigado en la investigación de lenguajes de programación. [ 194 ] [ 114 ] [ 195 ]
En otros campos, un artículo publicado en Proceedings of the International Astronomical Union utilizó Rust para simular sistemas multiplanetarios. [ 196 ] Un artículo publicado en Nature compartió experiencias de bioinformáticos que utilizan Rust. [ 141 ] Ambos artículos citaron el rendimiento y la seguridad de Rust como ventajas, y la curva de aprendizaje como un inconveniente principal para su adopción.
El proyecto TRACTOR de DARPA de 2025 tiene como objetivo traducir automáticamente C a Rust utilizando técnicas como análisis estático, análisis dinámico y modelos de lenguaje grandes. [ 197 ]
Comunidad

Según la revista MIT Technology Review , la comunidad de Rust ha sido vista como "inusualmente amigable" con los recién llegados y ha atraído particularmente a personas de la comunidad queer , en parte debido a su código de conducta . [ 20 ] La inclusión ha sido citada como un factor importante para algunos desarrolladores de Rust. [ 141 ] El blog oficial de Rust recopila y publica datos demográficos cada año. [ 200 ]
Fundación Rust
La Fundación Rust es una organización sin fines de lucro, constituida en Estados Unidos , que administra la marca registrada, la infraestructura y los activos de Rust. [ 202 ] [ 46 ]
Se estableció el 8 de febrero de 2021, con cinco miembros corporativos fundadores (Amazon Web Services, Huawei, Google, Microsoft y Mozilla). [ 203 ] El consejo de la fundación estuvo presidido por Shane Miller, [ 204 ] con Ashley Williams como directora ejecutiva interina. [ 46 ] A finales de 2021, Rebecca Rumbul se convirtió en directora ejecutiva y CEO. [ 205 ]
Equipos de gobernanza
El proyecto Rust es mantenido por 8 equipos de alto nivel a partir de noviembre de 2025.: el consejo de liderazgo, el equipo del compilador, el equipo de herramientas de desarrollo, el equipo de infraestructura, el equipo de lenguaje, la plataforma de lanzamiento, el equipo de bibliotecas y el equipo de moderación. [ 206 ] El consejo de liderazgo supervisa el proyecto y está formado por representantes de los demás equipos. [ 207 ]
Véase también
Notas
- ↑ Incluye herramientas de compilación, herramientas de host y soporte de biblioteca estándar para x86-64 , ARM , MIPS , RISC-V , WebAssembly , i686 , AArch64 , PowerPC y s390x . [ 2 ]
- ↑ Incluye Windows , Linux , macOS , FreeBSD , NetBSD e Illumos . Las herramientas de compilación para host en Android , iOS , Haiku , Redox y Fuchsia no se distribuyen oficialmente; estos sistemas operativos son compatibles como destinos. [ 2 ]
- ↑ Las dependencias de terceros, por ejemplo, LLVM o MSVC , están sujetas a sus propias licencias. [ 3 ] [ 4 ]
- 1 2 NIL se cita como una influencia para Rust en múltiples fuentes; esto probablemente se refiere al Network Implementation Language desarrollado por Robert Strom y otros en IBM , que fue pionero en el análisis de estados de tipo , [ 5 ] [ 6 ] que no debe confundirse con New Implementation of LISP .
- ↑ La lista de versiones del compilador Rust (conocida como cadena de arranque) tiene un historial que se remonta a 2012. [ 25 ]
- ↑ El uso deenvolturasy el antepuesto albloqueson obligatorios en la edición de 2024 o posterior. [ 127 ]
no_mangleunsafeextern"C"unsafe - ↑ Es decir, entre los encuestados que han realizado "un extenso trabajo de desarrollo [con Rust] durante el último año" (14,8%), Rust tuvo el mayor porcentaje que también expresó interés en "trabajar en [Rust] durante el próximo año" (72,4%). [ 192 ]
Referencias
Fuentes de libros
- Gjengset, Jon (2021). Óxido para los Rustáceos (1ª ed.). Sin prensa de almidón. ISBN 9781718501850OCLC 1277511986 .
- Klabnik, Steve; Nichols, Carol (12 de agosto de 2019). El lenguaje de programación Rust (cubre Rust 2018) . No Starch Press. ISBN 978-1-7185-0044-0.
- Blandy, Jim; Orendorff, Jason; Tindall, Leonora FS (2021). Programación en Rust: Desarrollo de sistemas rápido y seguro (2.ª ed.). O'Reilly Media. ISBN 978-1-4920-5254-8OCLC 1289839504
- McNamara, Tim (2021). Rust in Action . Manning Publications. ISBN 978-1-6172-9455-6OCLC 1153044639
- Klabnik, Steve; Nichols, Carol (2023). El lenguaje de programación Rust (2.ª ed.). No Starch Press. ISBN 978-1-7185-0310-6OCLC 1363816350 .
Otros
- ↑ "Anuncio de Rust 1.96.1" . 30 de junio de 2026. Consultado el 1 de julio de 2026 .
- 1 2 "Soporte de plataforma" . El libro rustc . Archivado del original el 30-06-2022 . Recuperado el 27-06-2022 .
- ↑ "Copyright" . GitHub . El lenguaje de programación Rust. 19 de octubre de 2022. Archivado del original el 22 de julio de 2023. Consultado el 19 de octubre de 2022 .
- ↑ "Licencias" . El lenguaje de programación Rust . Archivado del original el 23 de febrero de 2025. Consultado el 7 de marzo de 2025 .
- ↑ Strom, Robert E. (1983). «Mecanismos para la aplicación de la seguridad en tiempo de compilación». Actas del 10.º simposio ACM SIGACT-SIGPLAN sobre principios de lenguajes de programación - POPL '83 . págs. 276–284 . doi : 10.1145/567067.567093 . ISBN 0897910907. S2CID 6630704 .
- ↑ Strom, Robert E.; Yemini, Shaula (1986). "Typestate: Un concepto de lenguaje de programación para mejorar la fiabilidad del software" (PDF) . IEEE Transactions on Software Engineering . 12 (1). IEEE: 157–171 . Bibcode : 1986ITSEn..12..157S . doi : 10.1109/tse.1986.6312929 . S2CID 15575346 .
- ↑ "Tipos de unicidad" . Blog de Rust . Archivado del original el 15/09/2016 . Consultado el 08/10/2016 .
Aquellos familiarizados con el estilo de Elm reconocerán que los mensajes
--explain
actualizados se inspiran en gran medida en el enfoque de Elm.
- ↑ "Influencias" . The Rust Reference . Archivado del original el 26/11/2023 . Consultado el 31/12/2023 .
- ↑ "Tipos de unicidad" . Documentación de Idris 1.3.3 . Archivado del original el 21/11/2018 . Consultado el 14/07/2022 .
Están inspirados en... los tipos de propiedad y los punteros prestados del lenguaje de programación Rust.
- ↑ Eberlei, Benjamin; Schröder, Martin (2020-03-09). "PHP RFC: Attributes v2" . wiki.php.net . Recuperado el 2026-05-11 .
- ↑ Tovilo, Ilija (22 de mayo de 2020). "PHP RFC: Match expression v2" . wiki.php.net . Consultado el 29 de noviembre de 2020 .
- ↑ Garfield, Larry; Tovilo, Ilija (2020-12-04). "PHP RFC: Enumeraciones" . wiki.php.net . Recuperado el 2026-05-11 .
- ↑ Garfield, Larry; Tovilo, Ilija (11 de noviembre de 2020). "PHP RFC: Pattern Matching" . wiki.php.net . Recuperado el 11 de mayo de 2026 .
- ↑ Tung, Liam. "Microsoft abre el lenguaje de programación Project Verona, inspirado en Rust, en GitHub" . ZDNET . Archivado del original el 17 de enero de 2020. Consultado el 17 de enero de 2020 .
- ↑ Jaloyan, Georges-Axel (2017-10-19). "Safe Pointers in SPARK 2014". arXiv : 1710.07047 [ cs.PL ].
- ↑ Lattner, Chris. "Página web de Chris Lattner" . Nondot . Archivado del original el 25 de diciembre de 2018. Consultado el 14 de mayo de 2019 .
- ↑ "Documentación de V (Introducción)" . GitHub . El lenguaje de programación V. Consultado el 4 de noviembre de 2023 .
- ↑ Yegulalp, Serdar (29 de agosto de 2016). "Un nuevo competidor se une a Rust para derrocar al lenguaje C" . InfoWorld . Archivado del original el 25 de noviembre de 2021. Consultado el 19 de octubre de 2022 .
- ↑ "Gleam para usuarios de Rust" . Archivado del original el 27/01/2026 . Consultado el 27/01/2026 .
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Thompson, Clive (14 de febrero de 2023). " Cómo Rust pasó de ser un proyecto secundario al lenguaje de programación más querido del mundo" . MIT Technology Review . Archivado del original el 19 de septiembre de 2024. Recuperado el 23 de febrero de 2023 .
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Klabnik, Steve (2016-06-02). "La historia del óxido" . Applicative 2016. Nueva York, NY, EE. UU.: Association for Computing Machinery. pág. 80. doi : 10.1145/2959689.2960081 . ISBN 978-1-4503-4464-7.
- 1 2 3 4 Hoare, Graydon (julio de 2010). Proyecto Servo: Tecnología del pasado que viene a salvar al futuro de sí mismo (PDF) . Cumbre anual de Mozilla. Archivado del original (PDF) el 31 de marzo de 2026. Recuperado el 29 de octubre de 2024 .
- ↑ Hoare, Graydon (noviembre de 2016). "Prehistoria de Rust (Archivo del código fuente del compilador OCaml original de Rust)" . GitHub . Recuperado el 29 de octubre de 2024 .
- ↑ "0.1 primer lanzamiento público compatible Hito · rust-lang/rust" . GitHub . Consultado el 29-10-2024 .
- ↑ Nelson, Jynn (5 de agosto de 2022). RustConf 2022 - Bootstrapping: El compilador del pasado y del futuro . Portland, Oregón: Rust Team . Recuperado el 29 de octubre de 2024 a través de YouTube.
- ↑ "Logotipo de Rust" . Bugzilla . Archivado del original el 2 de febrero de 2024. Consultado el 2 de febrero de 2024 .
- ↑ Anderson, Brian (24-01-2012). " [ rust-dev ] El compilador Rust 0.1 está disponible" . rust-dev (Lista de correo). Archivado del original el 24-01-2012 . Recuperado el 07-01-2025 .
- ↑ Anthony, Sebastian (24 de enero de 2012). "Mozilla lanza Rust 0.1, el lenguaje que eventualmente usurpará el C++ de Firefox" . ExtremeTech . Consultado el 7 de enero de 2025 .
- ↑ "Purity by pcwalton · Pull Request #5412 · rust-lang/rust" . GitHub . Consultado el 29-10-2024 .
- ↑ Binstock, Andrew (2014-01-07). "El auge y la caída de las lenguas en 2013" . Dr. Dobb's Journal . Archivado del original el 2016-08-07 . Recuperado el 2022-11-20 .
- ↑ Lardinois, Frederic (3 de abril de 2015). "Mozilla y Samsung se asocian para desarrollar Servo, el motor de navegador de próxima generación de Mozilla para procesadores multinúcleo" . TechCrunch . Archivado del original el 10 de septiembre de 2016. Consultado el 25 de junio de 2017 .
- ↑ "Firefox 45.0, vea todas las nuevas funciones, actualizaciones y correcciones" . Mozilla . Archivado del original el 17 de marzo de 2016. Consultado el 31 de octubre de 2024 .
- ↑ Lardinois, Frederic (29 de septiembre de 2017). "Es hora de darle otra oportunidad a Firefox" . TechCrunch . Archivado del original el 15 de agosto de 2023. Consultado el 15 de agosto de 2023 .
- ^ Pereira, Rui; Couto, Marco; Ribeiro, Francisco; Rúa, Rui; Cunha, Jácome; Fernandes, João Paulo; Saraiva, João (23 de octubre de 2017). "Eficiencia energética en lenguajes de programación: ¿Cómo se relacionan la energía, el tiempo y la memoria?" . Actas de la décima conferencia internacional ACM SIGPLAN sobre ingeniería de lenguajes de software . SLE 2017. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 256–267 . doi : 10.1145/3136014.3136031 . hdl : 1822/65359 . ISBN 978-1-4503-5525-4.
- ↑ Cimpanu, Catalin (11 de agosto de 2020). "Mozilla despide a 250 empleados mientras se reorienta hacia los productos comerciales" . ZDNET . Archivado del original el 18 de marzo de 2022. Consultado el 2 de diciembre de 2020 .
- ↑ Cooper, Daniel (11 de agosto de 2020). "Mozilla despide a 250 empleados debido a la pandemia" . Engadget . Archivado del original el 13 de diciembre de 2020. Consultado el 2 de diciembre de 2020 .
- ↑ Tung, Liam (21 de agosto de 2020). "Lenguaje de programación Rust: los recortes de empleo de Mozilla nos han afectado gravemente, pero así es como sobreviviremos" . ZDNET . Archivado del original el 21 de abril de 2022. Consultado el 21 de abril de 2022 .
- ↑ "Sentando las bases para el futuro de Rust" . Blog de Rust . 18 de agosto de 2020. Archivado del original el 2 de diciembre de 2020. Consultado el 2 de diciembre de 2020 .
- ↑ "¡Hola mundo!" . Rust Foundation . 8 de febrero de 2020. Archivado del original el 19 de abril de 2022. Consultado el 4 de junio de 2022 .
- ↑ "Mozilla da la bienvenida a la Fundación Rust" . Blog de Mozilla . 9 de febrero de 2021. Archivado del original el 8 de febrero de 2021. Consultado el 9 de febrero de 2021 .
- ↑ Amadeo, Ron (2021-04-07). "Google ahora escribe código de bajo nivel para Android en Rust" . Ars Technica . Archivado del original el 2021-04-08 . Recuperado el 2021-04-08 .
- ↑ Anderson, Tim (23 de noviembre de 2021). "Renuncia todo el equipo de moderación de Rust" . The Register . Archivado del original el 14 de julio de 2022. Consultado el 4 de agosto de 2022 .
- ↑ Levick, Ryan; Bos, Mara. "Actualización de gobernanza" . Inside Rust Blog . Archivado del original el 27/10/2022 . Consultado el 27/10/2022 .
- 1 2 Claburn, Thomas (17 de abril de 2023). "La Fundación Rust se disculpa por la confusión en su política de marcas registradas" . The Register . Archivado del original el 7 de mayo de 2023. Recuperado el 7 de mayo de 2023 .
- ↑ Proven, Liam (27/11/2019). "Rebecca Rumbul nombrada nueva directora ejecutiva de The Rust Foundation" . The Register . Archivado del original el 14/07/2022 . Consultado el 14/07/2022 .
Ambos son lenguajes de llaves, con una sintaxis similar a la de C que los hace accesibles para los programadores de C.
- 1 2 3 Vigliarolo, Brandon (10 de febrero de 2021). "El lenguaje de programación Rust ahora tiene su propia fundación independiente" . TechRepublic . Archivado del original el 20 de marzo de 2023. Recuperado el 14 de julio de 2022 .
- ↑ Klabnik y Nichols 2019 , pág. 263.
- ↑ Klabnik y Nichols 2019 , págs. 5–6.
- ↑ Klabnik y Nichols 2023 , pág. 32.
- ↑ Klabnik y Nichols 2023 , págs. 32–33.
- ↑ Klabnik y Nichols 2023 , págs. 49–50.
- ↑ Klabnik y Nichols 2023 , págs. 34–36.
- ↑ Klabnik y Nichols 2023 , págs. 6, 47, 53.
- ↑ Klabnik y Nichols 2023 , págs. 47–48.
- 1 2 Klabnik y Nichols 2023 , págs. 50–53.
- ↑ Klabnik y Nichols 2023 , pág. 56.
- ↑ Klabnik y Nichols 2023 , págs. 57–58.
- ↑ Klabnik y Nichols 2023 , págs. 54–56.
- ↑ Klabnik y Nichols 2019 , págs. 104–109.
- ↑ Klabnik y Nichols 2019 , pág. 24.
- ↑ Klabnik y Nichols 2019 , págs. 36–38.
- ↑ "isize" . doc.rust-lang.org . Consultado el 28 de septiembre de 2025 .
- ↑ "usize" . doc.rust-lang.org . Consultado el 28 de septiembre de 2025 .
- ↑ Klabnik y Nichols 2023 , págs. 36–38.
- ↑ Klabnik y Nichols 2023 , pág. 502.
- ↑ "Tipo primitivo char" . Documentación de la biblioteca estándar de Rust . Consultado el 7 de septiembre de 2025 .
- ↑ "Glosario de términos Unicode" . Consorcio Unicode . Archivado del original el 24 de septiembre de 2018. Consultado el 30 de julio de 2024 .
- ↑ Klabnik y Nichols 2019 , págs. 38–40.
- ↑ Klabnik y Nichols 2023 , págs. 40–42.
- ↑ Klabnik y Nichols 2023 , pág. 42.
- ↑ Klabnik y Nichols 2019 , págs. 59–61.
- 1 2 Klabnik y Nichols 2019 , págs. 63–68.
- ↑ Klabnik y Nichols 2019 , págs. 74–75.
- ↑ Klabnik y Nichols 2023 , págs. 71–72.
- 1 2 Balasubramanian, Abhiram; Baranowski, Marek S.; Burtsev, Anton; Panda, Aurojit; Rakamarić, Zvonimir; Ryzhyk, Leonid (2017-05-07). "Programación de sistemas en Rust" . Actas del 16.º Taller sobre Temas Candentes en Sistemas Operativos . HotOS '17. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 156–161 . doi : 10.1145/3102980.3103006 . ISBN 978-1-4503-5068-6. S2CID 24100599 . Archivado del original el 11-06-2022 . Recuperado el 01-06-2022 .
- ↑ Klabnik y Nichols 2023 , págs. 327–30.
- ↑ "Lifetimes" . Rust by Example . Archivado del original el 16/11/2024 . Consultado el 29/10/2024 .
- ↑ "Anotación explícita" . Rust by Example . Consultado el 29/10/2024 .
- 1 2 Klabnik y Nichols 2019 , pág. 194.
- ↑ Klabnik y Nichols 2019 , págs. 75, 134.
- ↑ Shamrell-Harrington, Nell (15 de abril de 2022). "El comprobador de préstamos de Rust: un análisis profundo" . InfoQ . Archivado del original el 25 de junio de 2022. Recuperado el 25 de junio de 2022 .
- ↑ Klabnik y Nichols 2019 , págs. 194–195.
- ↑ Klabnik y Nichols 2023 , págs. 208–12.
- ↑ Klabnik & Nichols 2023 , 4.2. Referencias y préstamos .
- ↑ Pearce, David (17 de abril de 2021). "Un formalismo ligero para tiempos de vida de referencia y préstamos en Rust" . ACM Transactions on Programming Languages and Systems . 43 : 1–73 . doi : 10.1145/3443420 . Archivado del original el 15 de abril de 2024. Recuperado el 11 de diciembre de 2024 .
- ↑ Klabnik y Nichols 2019 , pág. 83.
- ↑ Klabnik y Nichols 2019 , pág. 97.
- ↑ Klabnik y Nichols 2019 , págs. 98–101.
- ↑ Klabnik y Nichols 2019 , págs. 438–440.
- ↑ Klabnik y Nichols 2019 , pág. 93.
- ↑ Gjengset 2021 , págs .
- ↑ Klabnik y Nichols 2023 , págs. 108–110, 113–114, 116–117.
- ↑ "El manejo de errores de Rust es perfecto en realidad" . Bitfield Consulting . 27 de mayo de 2024. Archivado del original el 7 de agosto de 2025. Consultado el 15 de septiembre de 2025 .
- ↑ Gjengset 2021 , pág. 155-156.
- ↑ Klabnik y Nichols 2023 , págs. 421–423.
- ↑ Klabnik y Nichols 2019 , págs. 418–427.
- ↑ "Casting" . Rust by Example . Consultado el 1 de abril de 2025 .
- ↑ Klabnik y Nichols 2023 , pág. 378.
- 1 2 3 Klabnik y Nichols 2023 , págs. 192–198.
- ↑ Klabnik y Nichols 2023 , pág. 98.
- ↑ Klabnik y Nichols 2019 , págs. 171–172, 205.
- 1 2 Klabnik y Nichols 2023 , págs. 191–192.
- ↑ Klabnik y Nichols 2019 , págs. 441–442.
- ↑ Gjengset 2021 , pág. 25.
- ↑ Klabnik y Nichols 2023 , 18.2. Uso de objetos de rasgos que permiten valores de diferentes tipos .
- ↑ Klabnik y Nichols 2019 , págs. 379–380.
- ↑ "RAII" . Rust by Example . Archivado del original el 21/04/2019 . Consultado el 22/11/2020 .
- ↑ "Abstracción sin sobrecarga: rasgos en Rust" . Blog de Rust . Archivado del original el 23 de septiembre de 2021. Consultado el 19 de octubre de 2021 .
- ↑ "Box, stack and heap" . Rust by Example . Archivado del original el 31/05/2022 . Consultado el 13/06/2022 .
- ↑ Klabnik y Nichols 2019 , págs. 70–75.
- ↑ Klabnik y Nichols 2019 , pág. 323.
- ↑ Klabnik y Nichols 2023 , págs. 420–429.
- ↑ McNamara 2021 , pág. 139, 376–379, 395.
- 1 2 Astrauskas, Vytautas; Matheja, Christoph; Poli, Federico; Müller, Peter; Summers, Alexander J. (2020-11-13). "¿Cómo usan los programadores Rust inseguro?" . Actas de la ACM sobre lenguajes de programación . 4 : 1– 27. doi : 10.1145/3428204 . hdl : 20.500.11850/465785 . ISSN 2475-1421 .
- ↑ Lattuada, Andrea; Hance, Travis; Cho, Chanhee; Brun, Matías; Subasinghe, Isitha; Zhou, Yi; Howell, Jon; Parno, Bryan; Hawblitzel, Chris (6 de abril de 2023). "Verus: Verificación de programas Rust utilizando tipos fantasma lineales" . Actas de la ACM sobre lenguajes de programación . 7 : 85:286–85:315. doi : 10.1145/3586037 . hdl : 20.500.11850/610518 .
- ↑ Milano, Mae; Turcotti, Julia; Myers, Andrew C. (2022-06-09). «Un sistema de tipos flexible para una concurrencia sin miedo». Actas de la 43.ª Conferencia Internacional ACM SIGPLAN sobre Diseño e Implementación de Lenguajes de Programación . Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 458–473 . doi : 10.1145/3519939.3523443 . ISBN 978-1-4503-9265-5.
- ↑ "Introducción: aprender Rust con demasiadas listas enlazadas" . rust-unofficial.github.io . Consultado el 6 de agosto de 2025 .
- ↑ Noble, James; Mackay, Julian; Wrigstad, Tobias (16 de octubre de 2023). "Eslabones oxidados en cadenas locales✱" . Actas del 24.º Taller Internacional de la ACM sobre Técnicas Formales para Programas tipo Java . Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1–3 . doi : 10.1145/3611096.3611097 . ISBN 979-8-4007-0784-1.
- 1 2 Evans, Ana Nora; Campbell, Bradford; Soffa, Mary Lou (1 de octubre de 2020). "¿Es seguro el uso de Rust por parte de los desarrolladores de software?" . Actas de la 42.ª Conferencia Internacional ACM/IEEE sobre Ingeniería de Software . Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 246–257 . arXiv : 2007.00752 . doi : 10.1145/3377811.3380413 . ISBN 978-1-4503-7121-6.
- ↑ "Comportamiento considerado indefinido" . The Rust Reference . Consultado el 6 de agosto de 2025 .
- ↑ Klabnik y Nichols 2023 , págs. 449–455.
- ↑ Gjengset 2021 , págs .
- ↑ "Macros por ejemplo" . The Rust Reference . Archivado del original el 21/04/2023 . Consultado el 21/04/2023 .
- ↑ Klabnik y Nichols 2019 , págs. 446–448.
- ↑ "Macros procedimentales" . Referencia del lenguaje de programación Rust . Archivado del original el 7 de noviembre de 2020. Consultado el 23 de marzo de 2021 .
- ↑ Klabnik y Nichols 2019 , págs. 449–455.
- ↑ Baumgartner, Stefan (23 de mayo de 2025). "Lenguaje de programación: Rust 2024 es la edición más completa hasta la fecha" . heise online . Consultado el 28 de junio de 2025 .
- ^ Gjengset 2021 , págs.193-209 .
- ↑ "Interoperabilidad segura entre Rust y C++ con CXX" . InfoQ . 6 de diciembre de 2020. Archivado del original el 22 de enero de 2021. Consultado el 3 de enero de 2021 .
- ↑ Rosenblatt, Seth (3 de abril de 2013). "Samsung se une a la búsqueda de Rust por parte de Mozilla" . CNET . Archivado del original el 4 de abril de 2013. Consultado el 5 de abril de 2013 .
- ↑ Brown, Neil (17 de abril de 2013). "Un sabor a óxido" . LWN.net . Archivado del original el 26 de abril de 2013. Recuperado el 25 de abril de 2013 .
- ↑ "Razas" . El Rustonomicon . Archivado del original el 10 de julio de 2017. Consultado el 3 de julio de 2017 .
- ↑ Vandervelden, Thibaut; De Smet, Ruben; Deac, Diana; Steenhaut, Kris; Braeken, An (2024-09-07). "Descripción general de los sistemas operativos y marcos de trabajo Rust integrados" . Sensors . 24 (17): 5818. Bibcode : 2024Senso..24.5818V . doi : 10.3390/ s24175818 . PMC 11398098. PMID 39275729 .
- 1 2 Klabnik y Nichols 2023 , págs. 343–346.
- ↑ Gjengset 2021 , pág. 6.
- ^ Blandy, Orendorff y Tindall 2021 , págs .
- ↑ "Descripción general del compilador" . Guía de desarrollo del compilador de Rust . Colaboradores del proyecto Rust. Archivado del original el 31 de mayo de 2023. Consultado el 7 de noviembre de 2024 .
- ↑ "Generación de código" . Guía de desarrollo del compilador Rust . Colaboradores del proyecto Rust . Consultado el 3 de marzo de 2024 .
- ↑ "rust-lang/rustc_codegen_gcc" . GitHub . El lenguaje de programación Rust. 2 de marzo de 2024. Consultado el 3 de marzo de 2024 .
- ↑ "rust-lang/rustc_codegen_cranelift" . GitHub . El lenguaje de programación Rust. 2 de marzo de 2024. Consultado el 3 de marzo de 2024 .
- 1 2 3 Perkel, Jeffrey M. (2020-12-01). " Por qué los científicos recurren a Rust" . Nature . 588 (7836): 185– 186. Bibcode : 2020Natur.588..185P . doi : 10.1038/d41586-020-03382-2 . PMID 33262490. S2CID 227251258. Archivado del original el 2022-05-06 . Recuperado el 2022-05-15 .
- ↑ Simone, Sergio De (18 de abril de 2019). "Rust 1.34 introduce registros alternativos para cajas no públicas" . InfoQ . Archivado del original el 14 de julio de 2022. Consultado el 14 de julio de 2022 .
- ↑ "Por qué existe el transporte de carga - El libro sobre el transporte de carga" . doc.rust-lang.org . Consultado el 22 de marzo de 2026 .
- ↑ "Cargo.toml vs Cargo.lock - El libro de Cargo" . doc.rust-lang.org . Consultado el 22 de marzo de 2026 .
- ↑ Klabnik y Nichols 2019 , págs. 511–512.
- ↑ "rust-lang/rust-clippy" . El lenguaje de programación Rust. 4 de enero de 2026. Consultado el 4 de enero de 2026 .
- ↑ "Clippy Lints" . El lenguaje de programación Rust . Consultado el 30 de noviembre de 2023 .
- ↑ Klabnik y Nichols 2019 , Apéndice G – Cómo se forma el óxido y "Nightly Rust"
- ^ Blandy, Orendorff y Tindall 2021 , págs .
- ↑ Klabnik y Nichols 2023 , pág. 623.
- ↑ Anderson, Tim (30 de noviembre de 2021). "¿Puede Rust salvar el planeta? ¿Por qué sí y por qué no?" . The Register . Archivado del original el 11 de julio de 2022. Consultado el 11 de julio de 2022 .
- ↑ Yegulalp, Serdar (06/10/2021). "¿Qué es el lenguaje Rust? Desarrollo de software seguro, rápido y sencillo" . InfoWorld . Archivado del original el 24/06/2022 . Consultado el 25/06/2022 .
- ↑ McNamara 2021 , pág. 11.
- 1 2 Popescu, Natalie; Xu, Ziyang; Apostolakis, Sotiris; August, David I.; Levy, Amit (2021-10-15). "Más seguro a cualquier velocidad: mejora de seguridad automática con conocimiento del contexto para Rust" . Actas de la ACM sobre lenguajes de programación . 5 (OOPSLA). Sección 2. doi : 10.1145/3485480 . S2CID 238212612. pág. 5:
Observamos una gran variación en los gastos generales de la indexación verificada: el 23,6% de los puntos de referencia informan de importantes pérdidas de rendimiento por la indexación verificada, pero el 64,5% informa de poco o ningún impacto y, sorprendentemente, el 11,8% informa de un rendimiento mejorado.
- ↑ McNamara 2021 , págs. 19, 27.
- ↑ Couprie, Geoffroy (2015). "Nom, una biblioteca de combinadores de analizadores sintácticos orientada a bytes, en flujo continuo y sin copia en Rust". Talleres de seguridad y privacidad de la IEEE de 2015. págs. 142–148 . doi : 10.1109/SPW.2015.31 . ISBN 978-1-4799-9933-0. S2CID 16608844 .
- ↑ McNamara 2021 , pág. 20.
- ↑ "Generación de código" . The Rust Reference . Archivado del original el 09/10/2022 . Consultado el 09/10/2022 .
- ↑ Farshin, Alireza; Barbette, Tom; Roozbeh, Amir; Maguire, Gerald Q. Jr; Kostić, Dejan (2021). «PacketMill: Hacia redes de 100 Gbps por núcleo». Actas de la 26.ª Conferencia Internacional ACM sobre Soporte Arquitectónico para Lenguajes de Programación y Sistemas Operativos . págs. 1–17 . doi : 10.1145/3445814.3446724 . ISBN 9781450383172. S2CID 231949599 . Archivado del original el 12/07/2022 . Recuperado el 12/07/2022 .
... Si bien algunos compiladores (por ejemplo, Rust) admiten la reordenación de estructuras [82], los compiladores de C y C++ tienen prohibido reordenar estructuras de datos (por ejemplo, struct o class) [74] ...
- ↑ Gjengset 2021 , pág. 22.
- ↑ "¿Qué tan rápido es Rust?" . Preguntas frecuentes sobre el lenguaje de programación Rust . Archivado del original el 28/10/2020 . Consultado el 11/04/2019 .
- ↑ Shankland, Stephen (12 de julio de 2016). "Firefox se renovará para intentar que vuelvas a interesarte" . CNET . Archivado del original el 14 de julio de 2022. Consultado el 14 de julio de 2022 .
- ↑ Equipo de Investigación de Seguridad (04/10/2013). "ZeroMQ: Ayudándonos a bloquear dominios maliciosos en tiempo real" . Cisco Umbrella . Archivado del original el 13/05/2023 . Consultado el 13/05/2023 .
- ↑ Cimpanu, Catalin (15 de octubre de 2019). "AWS patrocinará el proyecto Rust" . ZDNET . Consultado el 17 de julio de 2024 .
- ↑ Nichols, Shaun (27 de junio de 2018). "¿El próximo truco de Microsoft? Trasladar cosas de la nube a Azure IoT Edge" . The Register . Archivado del original el 27 de septiembre de 2019. Consultado el 27 de septiembre de 2019 .
- ↑ Tung, Liam (30 de abril de 2020). "Microsoft: Por qué usamos el lenguaje de programación Rust en lugar de Go para WebAssembly en una aplicación de Kubernetes" . ZDNET . Archivado del original el 21 de abril de 2022. Consultado el 21 de abril de 2022 .
- ↑ Claburn, Thomas (2022-09-20). "En Rust confiamos: el CTO de Microsoft Azure rechaza C y C++" . The Register . Consultado el 7 de julio de 2024 .
- ↑ Simone, Sergio De (10 de marzo de 2019). "NPM adoptó Rust para eliminar cuellos de botella de rendimiento" . InfoQ . Archivado del original el 19 de noviembre de 2023. Consultado el 20 de noviembre de 2023 .
- ↑ Lyu, Shing (2020). «Bienvenido al mundo de Rust» . En Lyu, Shing (ed.). Proyectos prácticos en Rust: Creación de juegos, computación física y aplicaciones de aprendizaje automático . Berkeley, CA: Apress. pp. 1–8 . doi : 10.1007/978-1-4842-5599-5_1 . ISBN 978-1-4842-5599-5. Consultado el 29 de noviembre de 2023 .
- ↑ Lyu, Shing (2021). "Rust en el mundo web" . En Lyu, Shing (ed.). Proyectos web prácticos con Rust: Creación de aplicaciones web y en la nube . Berkeley, CA: Apress. pp. 1–7 . doi : 10.1007/978-1-4842-6589-5_1 . ISBN 978-1-4842-6589-5. Consultado el 29 de noviembre de 2023 .
- 12 Li , Hongyu; Guo, Liwei; Yang, Yexuan; Wang, Shangguang; Xu, Mengwei (30 de junio de 2024). "Un estudio empírico de Rust-for-Linux: el éxito, la insatisfacción y el compromiso" . USENIX . Consultado el 28 de noviembre de 2024 .
- ↑ Corbet, Jonathan (13 de octubre de 2022). "Un primer vistazo a Rust en el kernel 6.1" . LWN.net . Archivado del original el 17 de noviembre de 2023. Consultado el 11 de noviembre de 2023 .
- ↑ Vaughan-Nichols, Steven (7 de diciembre de 2021). "Rust da un gran paso adelante como segundo lenguaje oficial de Linux" . ZDNET . Consultado el 27 de noviembre de 2024 .
- ↑ Corbet, Jonathan (10 de diciembre de 2025). "El final (exitoso) del experimento del kernel Rust" . LWN.net . Consultado el 10 de diciembre de 2025 .
- ↑ Amadeo, Ron (07/04/2021). "Google ahora escribe código Android de bajo nivel en Rust" . Ars Technica . Archivado del original el 08/04/2021 . Recuperado el 21/04/2022 .
- ↑ Darkcrizt (2 de abril de 2021). "Google desarrolla una nueva pila Bluetooth para Android, escrita en Rust" . Desde Linux . Archivado del original el 25 de agosto de 2021. Consultado el 31 de agosto de 2024 .
- ↑ Claburn, Thomas (27 de abril de 2023). "Microsoft está reescribiendo las bibliotecas principales de Windows en Rust" . The Register . Archivado del original el 13 de mayo de 2023. Consultado el 13 de mayo de 2023 .
- ↑ Proven, Liam (1 de diciembre de 2023). "Pequeño pero poderoso, 'Humanbiologics' de 9Front está aquí para los verdaderamente curiosos" . The Register . Consultado el 7 de marzo de 2024 .
- ↑ Yegulalp, Serdar (21 de marzo de 2016). "El sistema operativo Redox de Rust podría mostrarle a Linux algunos trucos nuevos" . InfoWorld . Archivado del original el 21 de marzo de 2016. Recuperado el 21 de marzo de 2016 .
- ↑ Anderson, Tim (14 de enero de 2021). "Otro sistema operativo oxidado: Theseus se une a Redox en la búsqueda de sistemas más seguros y resilientes" . The Register . Archivado del original el 14 de julio de 2022. Consultado el 14 de julio de 2022 .
- ↑ Boos, Kevin; Liyanage, Namitha; Ijaz, Ramla; Zhong, Lin (2020). Theseus: un experimento en la estructura y gestión del estado de los sistemas operativos . págs. 1–19 . ISBN 978-1-939133-19-9Archivado del original el 13 de mayo de 2023. Consultado el 13 de mayo de 2023 .
- ↑ Zhang, HanDong (31 de enero de 2023). "Revisión de 2022 | La adopción de Rust en los negocios" . Rust Magazine . Consultado el 7 de febrero de 2023 .
- ↑ Sei, Mark (10 de octubre de 2018). "Nuevas características de Fedora 29: Startis ahora oficialmente en Fedora" . Marksei, Weekly sysadmin pills . Archivado del original el 13 de abril de 2019. Recuperado el 13 de mayo de 2019 .
- ↑ Proven, Liam (12 de julio de 2022). "Oracle Linux 9 lanzado, con algunas adiciones interesantes" . The Register . Archivado del original el 14 de julio de 2022. Recuperado el 14 de julio de 2022 .
- ↑ Proven, Liam (2023-02-02). "System76 adelanta características de su entorno de escritorio COSMIC, basado en Rust" . The Register . Archivado del original el 17 de julio de 2024. Consultado el 17 de julio de 2024 .
- ↑ Hu, Vivian (12 de junio de 2020). "Deno está listo para producción" . InfoQ . Archivado del original el 1 de julio de 2020. Consultado el 14 de julio de 2022 .
- ↑ Abrams, Lawrence (6 de febrero de 2021). "Este emulador de Flash Player te permite jugar de forma segura a tus juegos antiguos" . Bleeping Computer . Archivado del original el 25 de diciembre de 2021. Consultado el 25 de diciembre de 2021 .
- ↑ Kharif, Olga (17 de octubre de 2020). "El asesino de la cadena de bloques de Ethereum se llama Polkadot" . Bloomberg News . Bloomberg LP . Archivado del original el 17 de octubre de 2020. Consultado el 14 de julio de 2021 .
- ↑ Keizer, Gregg (31 de octubre de 2016). "Mozilla planea rejuvenecer Firefox en 2017" . Computerworld . Archivado del original el 13 de mayo de 2023. Consultado el 13 de mayo de 2023 .
- ↑ Claburn, Thomas (12 de enero de 2023). "Google pule el código de Chromium con una capa de Rust" . The Register . Consultado el 17 de julio de 2024 .
- ↑ Jansens, Dana (12 de enero de 2023). "Apoyo al uso de Rust en el proyecto Chromium" . Blog de seguridad en línea de Google . Archivado del original el 13 de enero de 2023. Consultado el 12 de noviembre de 2023 .
- 1 2 3 "Encuesta de desarrolladores de Stack Overflow 2025 – Tecnología" . Stack Overflow . Consultado el 09-08-2025 .
- ↑ Claburn, Thomas (23 de junio de 2022). "Linus Torvalds dice que Rust llegará al kernel de Linux" . The Register . Archivado del original el 28 de julio de 2022. Consultado el 15 de julio de 2022 .
- ↑ Jung, Ralf; Jourdan, Jacques-Henri; Krebbers, Robbert; Dreyer, Derek (27 de diciembre de 2017). "RustBelt: asegurando los fundamentos del lenguaje de programación Rust" . Actas de la ACM sobre lenguajes de programación . 2 (POPL): 1–34 . doi : 10.1145/3158154 . hdl : 21.11116/0000-0003-34C6-3 . ISSN 2475-1421 .
- ↑ Popescu, Natalie; Xu, Ziyang; Apostolakis, Sotiris; August, David I.; Levy, Amit (2021-10-20). "Más seguro a cualquier velocidad: mejora automática de la seguridad sensible al contexto para Rust" . Actas de la ACM sobre lenguajes de programación . 5 (OOPSLA): 1–23 . doi : 10.1145/3485480 . ISSN 2475-1421 .
- ↑ Blanco-Cuaresma, Sergi; Bolmont, Emeline (30 de mayo de 2017). "¿Qué puede hacer el lenguaje de programación Rust por la astrofísica?" . Actas de la Unión Astronómica Internacional . 12 (S325): 341– 344. arXiv : 1702.02951 . Bibcode : 2017IAUS..325..341B . doi : 10.1017/S1743921316013168 . ISSN 1743-9213 . S2CID 7857871 . Archivado del original el 25 de junio de 2022 . Recuperado el 25 de junio de 2022 .
- ↑ Wallach, Dan. "TRACTOR: Traduciendo todo C a Rust" . DARPA . Consultado el 3 de agosto de 2025 .
- ↑ Klabnik y Nichols 2019 , pág. 4.
- ↑ "Primeros pasos" . El lenguaje de programación Rust . Archivado del original el 1 de noviembre de 2020. Consultado el 11 de octubre de 2020 .
- ↑ El equipo de la encuesta de Rust (13 de febrero de 2025). "Resultados de la encuesta sobre el estado de Rust de 2024" . El lenguaje de programación Rust . Consultado el 7 de septiembre de 2025 .
- ↑ "Política contra el soborno y la corrupción" . Rust Foundation . Consultado el 3 de junio de 2026 .
- ↑ Tung, Liam (8 de febrero de 2021). "El lenguaje de programación Rust acaba de dar un gran paso adelante" . ZDNET . Archivado del original el 14 de julio de 2022. Consultado el 14 de julio de 2022 .
- ↑ Krill, Paul (09/02/2021). "El lenguaje Rust pasa a ser una fundación independiente" . InfoWorld . Archivado del original el 10/04/2021 . Recuperado el 10/04/2021 .
- ↑ Vaughan-Nichols, Steven J. (09/04/2021). "Shane Miller de AWS dirigirá la recién creada Fundación Rust" . ZDNET . Archivado del original el 10/04/2021 . Consultado el 10/04/2021 .
- ↑ Vaughan-Nichols, Steven J. (17 de noviembre de 2021). "La Fundación Rust nombra a Rebecca Rumbul como directora ejecutiva" . ZDNET . Archivado del original el 18 de noviembre de 2021. Consultado el 18 de noviembre de 2021 .
- ↑ "Gobernanza" . El lenguaje de programación Rust . Archivado del original el 2 de octubre de 2025. Consultado el 19 de noviembre de 2025 .
- ↑ "Presentación del Consejo de Liderazgo de Rust" . Blog de Rust . 2023-06-20 . Consultado el 2024-01-12 .
Enlaces externos
- Sitio web oficial

- Código fuente en GitHub
- Documentación
- Rust (lenguaje de programación)
- Lenguajes de programación compilados
- Lenguajes de programación concurrentes
- Compiladores libres y de código abierto
- Proyectos de software libre
- Lenguajes funcionales
- Mozilla
- Lenguajes de programación multiparadigma
- Lenguajes de programación que coinciden con patrones
- Lenguajes de programación procedimental
- Lenguajes de programación creados en 2015
- Software que utiliza la licencia Apache.
- Software que utiliza la licencia MIT.
- Lenguajes de programación de tipado estático
- lenguajes de programación de sistemas