Rust (lenguaje de programación)


Rust es un lenguaje de programación de múltiples paradigmas diseñado para el rendimiento y la seguridad , especialmente la concurrencia segura . [17] [18] Rust es sintácticamente similar a C ++ , [19] pero puede garantizar la seguridad de la memoria usando un verificador de préstamo para validar referencias . [20] Rust logra la seguridad de la memoria sin recolección de basura y el recuento de referencias es opcional. [21] [22]

Rust fue diseñado originalmente por Graydon Hoare en Mozilla Research, con contribuciones de Dave Herman, Brendan Eich y otros. [23] [24] Los diseñadores refinaron el lenguaje mientras escribían el diseño Servo o el motor del navegador , [25] y el compilador Rust . Ha ganado un uso cada vez mayor en la industria y Microsoft ha estado experimentando con el lenguaje para componentes de software seguros y críticos para la seguridad. [26] [27]

Rust ha sido votado como el "lenguaje de programación más querido" en la Encuesta para desarrolladores de Stack Overflow cada año desde 2016. [28]

Un ejemplo de compilación de un programa de Rust

El lenguaje surgió de un proyecto personal iniciado en 2006 por el empleado de Mozilla, Graydon Hoare, [18] quien afirmó que el proyecto posiblemente recibió el nombre de la familia de hongos de la roya . [29] Mozilla comenzó a patrocinar el proyecto en el año 2009 [18] y anunció que en el año 2010. [30] [31] El mismo año, el trabajo pasó de la inicial del compilador (escrito en OCaml ) a la LLVM basado compilador autoalojamiento escrita en óxido. [32] Denominado rustc , se compiló con éxito en 2011. [33]

La primera versión pre-alfa numerada del compilador de Rust se produjo en enero de 2012. [34] Rust 1.0, la primera versión estable, se lanzó el 15 de mayo de 2015. [35] [36] Después de 1.0, las versiones de puntos estables se entregan cada seis semanas, mientras que las características se desarrollan en Rust todas las noches con lanzamientos diarios, luego se prueban con lanzamientos beta que duran seis semanas. [37] [38] Cada 2 o 3 años, se produce una nueva "Edición" de Rust. Esto es para proporcionar un punto de referencia fácil para los cambios debido a la naturaleza frecuente del cronograma de lanzamiento de trenes de Rust , así como para proporcionar una ventana para realizar cambios importantes. Las ediciones son en gran parte compatibles. [39]

Junto con la escritura estática convencional , antes de la versión 0.4, Rust también admitía estados de tipo . El sistema typestate modeló las afirmaciones antes y después de las declaraciones del programa, mediante el uso de una checkdeclaración especial . Las discrepancias se pueden descubrir en tiempo de compilación , en lugar de en tiempo de ejecución , como podría ser el caso de las aserciones en código C o C ++. El concepto typestate no era exclusivo de Rust, ya que se introdujo por primera vez en el lenguaje NIL . [40] Los estados de tipo se eliminaron porque en la práctica se usaban poco, [41] aunque se puede lograr la misma funcionalidad aprovechando la semántica de movimiento de Rust . [42]

El estilo del sistema de objetos cambió considerablemente en las versiones 0.2, 0.3 y 0.4 de Rust. La versión 0.2 introdujo clases por primera vez y la versión 0.3 agregó varias características, incluidos destructores y polimorfismo mediante el uso de interfaces. En Rust 0.4, se agregaron rasgos como un medio para proporcionar herencia ; las interfaces se unificaron con rasgos y se eliminaron como una característica separada. Las clases también fueron eliminadas y reemplazadas por una combinación de implementaciones y tipos estructurados . [ cita requerida ]

Comenzando en Rust 0.9 y terminando en Rust 0.11, Rust tenía dos tipos de punteros incorporados : ~y @, simplificando el modelo de memoria central . Reimplementó esos tipos de puntero en la biblioteca estándar como Boxy (ahora eliminado) Gc.

En enero de 2014, antes de la primera versión estable, Rust 1.0, el editor en jefe de Dr. Dobb's , Andrew Binstock, comentó sobre las posibilidades de Rust de convertirse en un competidor de C ++ y de los otros lenguajes emergentes D , Go y Nim (luego Nimrod). Según Binstock, aunque Rust era "ampliamente visto como un lenguaje notablemente elegante", la adopción se ralentizó porque cambiaba repetidamente entre versiones. [43]

Rust tiene una interfaz de función externa (FFI) a la que se puede llamar, por ejemplo, desde el lenguaje C, y puede llamar a C. Si bien llamar a C ++ ha sido históricamente problemático (desde cualquier idioma), Rust tiene una biblioteca, CXX, para permitir la llamada ao desde C ++ y "CXX tiene una sobrecarga nula o insignificante". [44]

En agosto de 2020, Mozilla despidió a 250 de sus 1,000 empleados en todo el mundo como parte de una reestructuración corporativa causada por el impacto a largo plazo de la pandemia COVID-19 . [45] [46] Entre los despedidos estaban la mayoría del equipo de Rust, [47] [se necesita una mejor fuente ] mientras que el equipo Servo se disolvió por completo. [48] [Se necesita una mejor fuente ] El evento generó preocupaciones sobre el futuro de Rust. [49]

En la semana siguiente, el Rust Core Team reconoció el severo impacto de los despidos y anunció que los planes para una fundación Rust estaban en marcha. El primer objetivo de la fundación sería asumir la propiedad de todas las marcas comerciales y nombres de dominio , y también asumir la responsabilidad financiera de sus costos. [50]

El 8 de febrero de 2021 la formación de la Fundación Rust fue anunciada oficialmente por sus cinco empresas fundadoras ( AWS , Huawei , Google , Microsoft y Mozilla). [51] [52]

El 6 de abril de 2021, Google anunció la compatibilidad con Rust dentro del proyecto de código abierto de Android como alternativa a C / C ++. [53]

Aquí hay un simple "¡Hola, mundo!" programa escrito en Rust. La println! macro imprime el mensaje en la salida estándar .

fn  main () {  println! ( "¡Hola, mundo!" );}

El hormigón sintaxis de Rust es similar a C y C ++ , con bloques de código delimitado por corchetes , y el control de flujo palabras clave tales como if, else, while, y for, aunque la sintaxis específica para definir funciones es más similar a Pascal . Sin embargo, no todas las palabras clave de C o C ++ están implementadas y algunas funciones de Rust (como el uso de la palabra clave matchpara la coincidencia de patrones ) serán menos familiares para aquellos versados ​​en estos lenguajes. A pesar del parecido superficial con C y C ++, la sintaxis de Rust en un sentido más profundo se acerca más a la de la familia de lenguajes ML y al lenguaje Haskell . Casi todas las partes del cuerpo de una función son expresiones , [54] incluso operadores de flujo de control. Por ejemplo, la ifexpresión ordinaria también ocupa el lugar del condicional ternario de C , un modismo utilizado por ALGOL 60 . Como en Lisp , una función no necesita terminar con una returnexpresión: en este caso, si se omite el punto y coma, la última expresión de la función crea el valor de retorno , como se ve en la siguiente implementación recursiva de la función factorial :

fn  factorial ( i : u64 )  -> u64  { coincidir i {   0 => 1 ,   n => n * factorial ( n - 1 )     }}

La siguiente implementación iterativa utiliza el ..=operador para crear un rango inclusivo:

fn  factorial ( i : u64 )  -> u64  { ( 2 .. = i ). producto ()}

"> Reproducir medios
Una presentación sobre Rust por Emily Dunham del equipo Rust de Mozilla ( conferencia linux.conf.au , Hobart, 2017)

Rust está destinado a ser un lenguaje para sistemas altamente concurrentes y altamente seguros , [55] y para programación en general , es decir, crear y mantener límites que preserven la integridad del sistema grande. [56] Esto ha llevado a un conjunto de características con énfasis en la seguridad, el control del diseño de la memoria y la concurrencia .

Seguridad de la memoria

Rust está diseñado para ser seguro para la memoria y no permite punteros nulos , punteros colgantes o carreras de datos en código seguro. [57] [58] [59] Los valores de datos se pueden inicializar solo a través de un conjunto fijo de formularios, todos los cuales requieren que sus entradas ya estén inicializadas. [60] Para replicar la función en otros lenguajes de punteros que son válidos o NULL, como en listas vinculadas o estructuras de datos de árbol binario , la biblioteca principal de Rust proporciona un tipo de opción , que se puede usar para probar si un puntero tiene valor o . [58] Rust también introduce una sintaxis añadida para gestionar la vida útil , y el compilador las explica a través de su comprobador de préstamos . El código inseguro que puede subvertir algunas de estas restricciones puede escribirse utilizando la palabra clave del idioma . [20]SomeNoneunsafe

Gestión de la memoria

Rust no utiliza un sistema de recolección de basura automatizado . En su lugar, la memoria y otros recursos se gestionan mediante la convención de adquisición de recursos es inicialización (RAII), [61] con recuento de referencias opcional . Rust proporciona una gestión determinista de los recursos, con una sobrecarga muy baja . [ cita requerida ] Rust también favorece la asignación de valores por pila y no realiza el boxeo implícito .

Existe el concepto de referencias (utilizando el &símbolo), que no implica el recuento de referencias en tiempo de ejecución. El verificador de préstamos verifica la seguridad de usar tales punteros en el momento de la compilación, lo que evita que los punteros cuelguen y otras formas de comportamiento indefinido . Además, el sistema de tipos de Rust separa los indicadores compartidos e inmutables del formulario &Tde los indicadores únicos y mutables del formulario &mut T. Sin embargo, un puntero mutable se puede convertir en un puntero inmutable, pero no al revés.

Propiedad

Rust tiene un sistema de propiedad en el que todos los valores tienen un propietario único y el alcance del valor es el mismo que el alcance del propietario. [62] [63] Los valores se pueden pasar por referencia inmutable, usando &T, por referencia mutable, usando &mut T, o por valor, usando T. En todo momento, puede haber múltiples referencias inmutables o una referencia mutable (un bloqueo implícito de lector-escritor ). El compilador de Rust hace cumplir estas reglas en tiempo de compilación y también verifica que todas las referencias sean válidas.

Tipos y polimorfismo

El sistema de tipos admite un mecanismo similar a las clases de tipos , llamado " rasgos ", inspirado directamente en el lenguaje Haskell . Esta es una función para el polimorfismo ad hoc , que se logra agregando restricciones a las declaraciones de variables de tipo. Otras características de Haskell, como el polimorfismo de tipo superior , aún no son compatibles.

Rust presenta la inferencia de tipos para las variables declaradas con la palabra clave let . Estas variables no requieren la asignación inicial de un valor para determinar su tipo. Se produce un error de tiempo de compilación si alguna rama del código deja la variable sin una asignación. [64] Las variables asignadas varias veces deben marcarse con la palabra clave mut.

A las funciones se les pueden dar parámetros genéricos , que generalmente requieren el tipo genérico para implementar un rasgo o rasgos determinados. Dentro de dicha función, el valor genérico solo se puede usar a través de esos rasgos. Esto significa que se puede verificar el tipo de una función genérica tan pronto como se defina. Esto contrasta con las plantillas de C ++ , que se escriben fundamentalmente en pato y no se pueden verificar hasta que se instancian con tipos concretos. Los conceptos de C ++ abordan el mismo problema y son parte de C ++ 20 , aunque todavía no permiten que el compilador de C ++ verifique una plantilla sin una instancia concreta.

Sin embargo, la implementación de los genéricos de Rust es similar a la implementación típica de las plantillas de C ++: se genera una copia separada del código para cada instanciación. Esto se llama monomorfización y contrasta con el esquema de borrado de tipos que se usa normalmente en Java y Haskell. El borrado de tipo también está disponible en Rust mediante el uso de la palabra clave dyn. El beneficio de la monomorfización es el código optimizado para cada caso de uso específico; el inconveniente es un mayor tiempo de compilación y tamaño de los binarios resultantes.

El sistema de objetos dentro de Rust se basa en implementaciones, rasgos y tipos estructurados. Las implementaciones cumplen un rol similar al de las clases dentro de otros lenguajes y se definen con la palabra clave impl. La herencia y el polimorfismo son proporcionados por rasgos; permiten definir métodos y mezclarlos con las implementaciones. Los tipos estructurados se utilizan para definir campos. Las implementaciones y los rasgos no pueden definir los campos por sí mismos, y solo los rasgos pueden proporcionar herencia. Entre otros beneficios, esto evita el problema del diamante de la herencia múltiple , como en C ++. En otras palabras, Rust admite la herencia de interfaz, pero reemplaza la herencia de implementación con composición ; ver composición sobre herencia .

Rust presenta una gran cantidad de componentes que amplían el conjunto de características de Rust y facilitan el desarrollo de Rust. La instalación de componentes generalmente es administrada por rustup, un instalador de cadena de herramientas de Rust desarrollado por el proyecto Rust. [sesenta y cinco]

Carga

Cargo es el sistema de construcción y el administrador de paquetes de Rust . Cargo maneja (entre otras cosas) el código de construcción, la descarga de dependencias y la construcción de dependencias.

Las dependencias de un paquete Rust se especifican en Cargo. toml junto con los requisitos de versión , indicando a Cargo qué versiones de la dependencia son compatibles con el paquete. De forma predeterminada, Cargo obtiene sus dependencias del registro crates.io aportado por el usuario, pero los repositorios y paquetes de Git en el sistema de archivos local también se pueden especificar como dependencias. [66]

Cargo también actúa como un envoltorio para clippy y otros componentes de Rust para facilitar la invocación de estas herramientas. Requiere que los proyectos sigan una determinada estructura de directorios "para facilitar el trabajo con los paquetes de Rust". [67]

Rustfmt

Rustfmt es un formateador de código para Rust. Toma el código fuente de Rust como entrada y cambia el espacio en blanco y la sangría para producir código formateado de acuerdo con la guía de estilo de Rust . [68] Rustfmt también puede verificar si la entrada está formateada correctamente. [69]

Clippy

Clippy es la herramienta de pelusa incorporada de Rust para mejorar la corrección, el rendimiento y la legibilidad del código de Rust. A partir de 2021, Clippy tiene más de 450 reglas, [70] que se pueden explorar en línea y filtrar por categoría. [71] Algunas reglas están deshabilitadas de forma predeterminada.

SPI

RLS es un servidor de idiomas que proporciona a los IDE y editores de texto más información sobre un proyecto de Rust. Proporciona verificaciones de pelusa a través de Clippy , formateo a través de Rustfmt, finalización automática de código a través de Racer , entre otras funciones. [72] El desarrollo de Racer se ralentizó a favor del analizador de óxido . [73]

Es posible extender el lenguaje Rust usando el mecanismo de macro de procedimiento. [74]

Las macros de procedimiento utilizan funciones de Rust que se ejecutan en tiempo de compilación para modificar el flujo de tokens que procesa el compilador. Esto complementa el mecanismo macro definido por el usuario que utiliza la coincidencia de patrones para lograr objetivos similares.

Las macros de procedimiento vienen en tres sabores:

  • Macros de función custom!(...)
  • Derivar macros #[derive(CustomDerive)]
  • Macros de atributos #[CustomAttribute]

La println!macro es un ejemplo de una macro de función y serde_derive[75] es una biblioteca de uso común para generar código para leer y escribir datos en muchos formatos como JSON . Macros de atributos se utilizan comúnmente para enlaces de lenguaje tales como la extendrbiblioteca para los enlaces de Rust a R . [76]

El siguiente código muestra el uso de la Serialize, Deserializey Debugse derivan las macros de procedimiento para implementar JSON lectura y la escritura, así como la capacidad para dar formato a una estructura para la depuración.

use serde :: { Serializar , Deserializar };  # [derivar (serializar, deserializar, depurar)] punto de estructura {  x : i32 , y : i32 ,}fn  main () {  deje punto = Punto { x : 1 , y : 2 };        let serialized = serde_json :: to_string ( & point ). desenvolver ();    println! ( "serializado = {}" , serializado );  dejar deserializado : Point = serde_json :: from_str ( & serializado ). desenvolver ();    println! ( "deserializado = {:?}" , deserializado ); }

Rust tiene como objetivo "ser tan eficiente y portátil como el idiomático C ++, sin sacrificar la seguridad". [77] Dado que Rust utiliza LLVM, cualquier mejora de rendimiento en LLVM también se transfiere a Rust. [78]

A bright orange crab icon
Algunos usuarios de Rust se refieren a sí mismos como rustáceos (un juego de palabras con " crustáceos ") y usan a Ferris como su mascota no oficial. [79]

Rust fue el tercer lenguaje de programación más querido en la encuesta anual de Stack Overflow de 2015 [80] y ocupó el primer lugar en 2016-2020. [81]

navegador web

Se están escribiendo en Rust un navegador web y varios componentes relacionados. Firefox , [82] por ejemplo, tiene dos proyectos escritos en Rust, incluido Servo , un motor de navegador web paralelo [83] desarrollado por Mozilla en colaboración con Samsung [84] y Quantum , que se compone de varios subproyectos, para mejorar el motor de navegador web Gecko , que también es desarrollado por Mozilla. [85]

Sistemas operativos

Los sistemas operativos y los componentes a nivel de SO escritos en Rust incluyen:

  • Redox : un "sistema operativo completo similar a Unix" que incluye un micronúcleo [86]
  • Stratis : un administrador de sistema de archivos para Fedora [87] y RHEL 8 [88]
  • Google Fuchsia : un sistema operativo basado en capacidades

Otro

  • exa , un "reemplazo moderno de ls "
  • Microsoft Azure IoT Edge, una plataforma utilizada para ejecutar servicios de Azure e inteligencia artificial en dispositivos de IoT, tiene componentes implementados en Rust [89]
  • OpenDNS utiliza Rust en dos de sus componentes [90] [91] [92]
  • Tor , una red de anonimato , escrita originalmente en C, está experimentando con la migración a Rust por sus características de seguridad [93] [94]
  • Deno , un tiempo de ejecución seguro para JavaScript y TypeScript , está construido con V8 , Rust y Tokio [95]
  • Prisma , un ORM para JavaScript , TypeScript y Go , recientemente portó su motor de consultas a Rust para su versión 2. [96]
  • Discord , un servicio de chat dirigido a jugadores, usa Rust para partes de su backend, así como para la codificación de video del lado del cliente [97].
  • TerminusDB , una base de datos de gráficos de código abierto diseñada para crear y seleccionar gráficos de conocimiento en colaboración [98]
  • Ruffle , un emulador SWF de código abierto escrito en Rust [99]

La Fundación Rust es una organización de membresía sin fines de lucro incorporada en Delaware , Estados Unidos , con el propósito principal de apoyar el mantenimiento y desarrollo del idioma, cultivar a los miembros del equipo del proyecto Rust y las comunidades de usuarios, administrar la infraestructura técnica subyacente al desarrollo de Rust. y gestionar y custodiar la marca Rust.

Se estableció el 8 de febrero de 2021, con cinco miembros corporativos fundadores (Amazon Web Services, Huawei, Google, Microsoft y Mozilla). [100]

La junta de la fundación está presidida por Shane Miller. [101] Su directora ejecutiva interina es Ashley Williams.

Las conferencias de Rust incluyen:

  • RustConf: una conferencia anual en Portland, Oregon . Se realiza anualmente desde 2016 (excepto en 2020 debido a la pandemia de COVID-19 ). [102]
  • Rust Belt Rust: una conferencia #rustlang en Rust Belt [103]
  • RustFest: la conferencia europea @rustlang [104]
  • RustCon Asia
  • Óxido LATAM
  • Oxidize Global [105]

  • Comparación de lenguajes de programación

  1. ^ "Lenguaje de óxido" . Archivado desde el original el 6 de septiembre de 2020 . Consultado el 9 de septiembre de 2020 . Mozilla fue el primer inversor de Rust y continúa patrocinando el trabajo del proyecto de código abierto. Mozilla también utiliza Rust en muchas de sus iniciativas principales, incluido Servo y partes clave de Firefox.
  2. ^ "Anunciando Rust 1.53.0" .
  3. ^ "Soporte de plataforma Rust" . Forja de óxido . Archivado desde el original el 13 de febrero de 2018 . Consultado el 19 de mayo de 2019 .
  4. ^ "Preguntas frecuentes" . Óxido incrustado . Archivado desde el original el 6 de agosto de 2020 . Consultado el 14 de mayo de 2019 .
  5. ^ "Puertos OpenBSD" . Archivado desde el original el 11 de abril de 2019 . Consultado el 3 de abril de 2018 .
  6. ^ "Construcción e implementación de una biblioteca Rust en iOS" . 6 de septiembre de 2017. Archivado desde el original el 11 de enero de 2019 . Consultado el 11 de enero de 2019 .
  7. ^ a b c d e f g h yo j k l m "The Rust Reference: Apéndice: influencias" . Archivado desde el original el 26 de enero de 2019 . Consultado el 11 de noviembre de 2018 .
  8. ^ "Note Research: Type System" . 1 de febrero de 2015. Archivado desde el original el 17 de febrero de 2019 . Consultado el 25 de marzo de 2015 .
  9. ^ "RFC para expresión 'if let'" . Archivado desde el original el 4 de marzo de 2016 . Consultado el 4 de diciembre de 2014 .
  10. ^ "¿Optimizaciones de comandos?" . 26 de junio de 2014. Archivado desde el original el 10 de julio de 2019 . Consultado el 10 de diciembre de 2014 .
  11. ^ "Idris - Tipos de unicidad" . Archivado desde el original el 21 de noviembre de 2018 . Consultado el 20 de noviembre de 2018 .
  12. ^ Jaloyan, Georges-Axel (19 de octubre de 2017). "Punteros seguros en SPARK 2014". arXiv : 1710.07047 . Código bibliográfico : 2017arXiv171007047J . Cite journal requiere |journal=( ayuda )
  13. ^ Lattner, Chris. "Página de inicio de Chris Lattner" . Nondot.org . Archivado desde el original el 25 de diciembre de 2018 . Consultado el 14 de mayo de 2019 .
  14. ^ "Microsoft abre el lenguaje de programación Project Verona inspirado en Rust en GitHub" . Archivado desde el original el 17 de enero de 2020 . Consultado el 17 de enero de 2020 .
  15. ^ "PHP RFC: sintaxis de atributo más corta" . 3 de junio de 2020. Archivado desde el original el 7 de marzo de 2021 . Consultado el 17 de marzo de 2021 .
  16. ^ Hoare, Graydon (28 de diciembre de 2016). "El óxido es sobre todo seguridad" . Graydon2 . Estudios Dreamwidth. Archivado desde el original el 2 de mayo de 2019 . Consultado el 13 de mayo de 2019 .
  17. ^ a b c "Preguntas frecuentes - El proyecto Rust" . Rust-lang.org . Archivado desde el original el 9 de junio de 2016 . Consultado el 27 de junio de 2019 .
  18. ^ "Comparación de Rust vs. C ++" . Archivado desde el original el 20 de noviembre de 2018 . Consultado el 20 de noviembre de 2018 .
  19. ^ a b "Óxido inseguro" . Archivado desde el original el 14 de octubre de 2020 . Consultado el 17 de octubre de 2020 .
  20. ^ "Seguridad sin miedo: seguridad de la memoria" . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 4 de noviembre de 2020 .
  21. ^ "Rc , el puntero inteligente contado de referencia" . Archivado desde el original el 11 de noviembre de 2020 . Consultado el 4 de noviembre de 2020 .
  22. ^ Noel (8 de julio de 2010). "El lenguaje del óxido" . Lambda the Ultimate. Archivado desde el original el 23 de noviembre de 2012 . Consultado el 30 de octubre de 2010 .
  23. ^ "Contribuyentes a rust-lang / rust" . GitHub . Archivado desde el original el 26 de mayo de 2020 . Consultado el 12 de octubre de 2018 .
  24. ^ Bright, Peter (3 de abril de 2013). "Samsung se asocia con Mozilla para construir un motor de navegador para máquinas multinúcleo" . Ars Technica . Archivado desde el original el 16 de diciembre de 2016 . Consultado el 4 de abril de 2013 .
  25. ^ "Por qué Rust para la programación de sistemas seguros" . Archivado desde el original el 22 de julio de 2019 . Consultado el 22 de julio de 2019 .
  26. ^ "Cómo Microsoft está adoptando Rust" . 6 de agosto de 2020. Archivado desde el original el 10 de agosto de 2020 . Consultado el 7 de agosto de 2020 .
  27. ^ "Encuesta de desarrolladores de desbordamiento de pila 2020" . Desbordamiento de pila . Archivado desde el original el 29 de enero de 2021 . Consultado el 31 de marzo de 2021 .
  28. ^ Hoare, Graydon (7 de junio de 2014). "Arqueología de Internet: la fuente definitiva y definitiva de por qué Rust se llama" Rust " " . Reddit.com . Archivado desde el original el 14 de julio de 2016 . Consultado el 3 de noviembre de 2016 .
  29. ^ "Tiempo futuro" . 29 de abril de 2011. Archivado desde el original el 18 de septiembre de 2012 . Consultado el 6 de febrero de 2012 .
  30. ^ Hoare, Graydon (7 de julio de 2010). Proyecto Servo (PDF) . Cumbre anual de Mozilla 2010. Whistler, Canadá. Archivado (PDF) desde el original el 11 de julio de 2017 . Consultado el 22 de febrero de 2017 .
  31. ^ Hoare, Graydon (2 de octubre de 2010). "Progreso del óxido" . Archivado desde el original el 15 de agosto de 2014 . Consultado el 30 de octubre de 2010 .
  32. ^ Hoare, Graydon (20 de abril de 2011). "[rust-dev] stage1 / rustc compila" . Archivado desde el original el 20 de julio de 2011 . Consultado el 20 de abril de 2011 .
  33. ^ catamorfismo (20 de enero de 2012). "Mozilla y la comunidad de Rust lanzan Rust 0.1 (un lenguaje de programación de sistemas fuertemente tipado con un enfoque en la seguridad de la memoria y la concurrencia)" . Archivado desde el original el 24 de enero de 2012 . Consultado el 6 de febrero de 2012 .
  34. ^ "Historial de versiones" . Archivado desde el original el 15 de mayo de 2015 . Consultado el 1 de enero de 2017 .
  35. ^ The Rust Core Team (15 de mayo de 2015). "Anunciando Rust 1.0" . Archivado desde el original el 15 de mayo de 2015 . Consultado el 11 de diciembre de 2015 .
  36. ^ "Programación de los trenes" . Archivado desde el original el 2 de enero de 2017 . Consultado el 1 de enero de 2017 .
  37. ^ "G - Cómo se hace el óxido y" Nightly Rust "- El lenguaje de programación de Rust" . doc.rust-lang.org . Consultado el 22 de mayo de 2021 .
  38. ^ "¿Qué son las ediciones? - La guía de edición" . doc.rust-lang.org . Consultado el 22 de mayo de 2021 .
  39. ^ Strom, Robert E .; Yemini, Shaula (1986). "Typestate: un concepto de lenguaje de programación para mejorar la confiabilidad del software" (PDF) . Transacciones IEEE sobre ingeniería de software : 157-171. doi : 10.1109 / TSE.1986.6312929 . ISSN  0098-5589 . S2CID  15575346 . Archivado (PDF) desde el original el 14 de julio de 2010 . Consultado el 14 de noviembre de 2010 .
  40. ^ Walton, Patrick (26 de diciembre de 2012). "¡Typestate ha muerto, larga vida a Typestate!" . GitHub . Archivado desde el original el 23 de febrero de 2018 . Consultado el 3 de noviembre de 2016 .
  41. ^ Biffle, Cliff (5 de junio de 2019). "El patrón Typestate en Rust" . Archivado desde el original el 6 de febrero de 2021 . Consultado el 1 de febrero de 2021 .
  42. ^ Binstock, Andrew. "El auge y la caída de las lenguas en 2013" . Dr. Dobb's . Archivado desde el original el 7 de agosto de 2016 . Consultado el 11 de diciembre de 2015 .
  43. ^ "Interoperabilidad segura entre Rust y C ++ con CXX" . InfoQ . 6 de diciembre de 2020 . Consultado el 3 de enero de 2021 .
  44. ^ Cimpanu, Catalin (11 de agosto de 2020). "Mozilla despide a 250 empleados mientras se centra en productos comerciales" . ZDNet . Consultado el 2 de diciembre de 2020 .
  45. ^ Cooper, Daniel (11 de agosto de 2020). "Mozilla despide a 250 empleados debido a la pandemia" . Engadget . Archivado desde el original el 13 de diciembre de 2020 . Consultado el 2 de diciembre de 2020 .
  46. ^ @tschneidereit (12 de agosto de 2020). "Gran parte del equipo que solía administrar era parte de los despidos de Mozilla el martes. Ese equipo era el equipo Rust de Mozilla y el equipo Wasmtime de Mozilla. Pensé que ya sabría cómo hablar de eso, pero no es así. Es desgarrador, incomprensible y asombroso en su impacto " (Tweet) . Consultado el 2 de diciembre de 2020 , a través de Twitter .
  47. ^ @asajeffrey (11 de agosto de 2020). "Mozilla está cerrando el equipo en el que estoy, así que soy una de las muchas personas que ahora se preguntan cuál será el próximo concierto. ¡Ha sido un viaje salvaje!" (Tweet) . Consultado el 2 de diciembre de 2020 , a través de Twitter .
  48. ^ Kolakowski, Nick (27 de agosto de 2020). "¿Rust está en problemas después de los grandes despidos de Mozilla?" . Dados . Archivado desde el original el 24 de noviembre de 2020 . Consultado el 2 de diciembre de 2020 .
  49. ^ "Sentando las bases para el futuro de Rust" . Blog de óxido . 18 de agosto de 2020. Archivado desde el original el 2 de diciembre de 2020 . Consultado el 2 de diciembre de 2020 .
  50. ^ "Fundación Rust" . foundation.rust-lang.org . 8 de febrero de 2021. Archivado desde el original el 9 de febrero de 2021 . Consultado el 9 de febrero de 2021 .
  51. ^ "Mozilla da la bienvenida a la Fundación Rust" . Blog de Mozilla . 9 de febrero de 2021. Archivado desde el original el 8 de febrero de 2021 . Consultado el 9 de febrero de 2021 .
  52. ^ Amadeo, Ron (7 de abril de 2021). "Google ahora está escribiendo código de Android de bajo nivel en Rust" . Ars Technica . Archivado desde el original el 8 de abril de 2021 . Consultado el 8 de abril de 2021 .
  53. ^ "rust / src / grammar / parser-lalr.y" . 23 de mayo de 2017 . Consultado el 23 de mayo de 2017 .
  54. ^ Avram, Abel (3 de agosto de 2012). "Entrevista sobre Rust, un lenguaje de programación de sistemas desarrollado por Mozilla" . InfoQ. Archivado desde el original el 24 de julio de 2013 . Consultado el 17 de agosto de 2013 .
  55. ^ "Debian - Detalles del paquete rustc en sid" . packages.debian.org . Archivado desde el original el 22 de febrero de 2017 . Consultado el 21 de febrero de 2017 .
  56. ^ Rosenblatt, Seth (3 de abril de 2013). "Samsung se une a la búsqueda de Mozilla por Rust" . Archivado desde el original el 4 de abril de 2013 . Consultado el 5 de abril de 2013 .
  57. ^ a b Brown, Neil (17 de abril de 2013). "Una probada de óxido" . Archivado desde el original el 26 de abril de 2013 . Consultado el 25 de abril de 2013 .
  58. ^ "Razas - El Rustonomicon" . doc.rust-lang.org . Archivado desde el original el 10 de julio de 2017 . Consultado el 3 de julio de 2017 .
  59. ^ "Preguntas frecuentes sobre el lenguaje Rust" . static.rust-lang.org . 2015. Archivado desde el original el 20 de abril de 2015 . Consultado el 24 de abril de 2017 .
  60. ^ "RAII - Rust por ejemplo" . doc.rust-lang.org . Archivado desde el original el 21 de abril de 2019 . Consultado el 22 de noviembre de 2020 .
  61. ^ Klabnik, Steve; Nichols, Carol (junio de 2018). "Capítulo 4: Comprensión de la propiedad". El lenguaje de programación Rust . San Francisco, California: No Starch Press. pag. 44. ISBN 978-1-593-27828-1. Archivado desde el original el 3 de mayo de 2019 . Consultado el 14 de mayo de 2019 .
  62. ^ "El lenguaje de programación Rust: qué es la propiedad" . Rust-lang.org . Archivado desde el original el 19 de mayo de 2019 . Consultado el 14 de mayo de 2019 .
  63. ^ Walton, Patrick (1 de octubre de 2010). "Características de Rust I: Inferencia de tipos" . Archivado desde el original el 8 de julio de 2011 . Consultado el 21 de enero de 2011 .
  64. ^ rust-lang / rustup , The Rust Programming Language, 17 de mayo de 2021 , consultado el 17 de mayo de 2021
  65. ^ "Especificación de dependencias - El libro de carga" . doc.rust-lang.org . Consultado el 17 de mayo de 2021 .
  66. ^ "Por qué existe la carga" . El libro de carga . Consultado el 18 de mayo de 2021 .
  67. ^ "rust-dev-tools / fmt-rfcs" . GitHub . Consultado el 19 de mayo de 2021 .
  68. ^ "rustfmt" . GitHub . Consultado el 19 de mayo de 2021 .
  69. ^ "rust-lang / rust-clippy" . GitHub . Consultado el 21 de mayo de 2021 .
  70. ^ "TODOS los Clippy Lints" . Consultado el 22 de mayo de 2021 .
  71. ^ "rust-lang / rls" . GitHub . Consultado el 26 de mayo de 2021 .
  72. ^ "corredor-óxido / corredor" . GitHub . Consultado el 26 de mayo de 2021 .
  73. ^ "Macros de procedimiento" . La referencia del lenguaje de programación Rust . Archivado desde el original el 7 de noviembre de 2020 . Consultado el 23 de marzo de 2021 .
  74. ^ "Serde Derive" . Documentación de Serde Derive . Archivado desde el original el 17 de abril de 2021 . Consultado el 23 de marzo de 2021 .
  75. ^ "extendr_api - Óxido" . Documentación de Extendr Api . Consultado el 23 de marzo de 2021 .
  76. ^ Walton, Patrick (5 de diciembre de 2010). "Objetivos de diseño de C ++ en el contexto de Rust" . Archivado desde el original el 9 de diciembre de 2010 . Consultado el 21 de enero de 2011 .
  77. ^ "¿Qué tan rápido es el óxido?" . Preguntas frecuentes sobre el lenguaje de programación Rust . Archivado desde el original el 28 de octubre de 2020 . Consultado el 11 de abril de 2019 .
  78. ^ "Comenzando" . rust-lang.org . Archivado desde el original el 1 de noviembre de 2020 . Consultado el 11 de octubre de 2020 .
  79. ^ "Encuesta de desarrolladores de desbordamiento de pila 2015" . Stackoverflow.com . Archivado desde el original el 31 de diciembre de 2016 . Consultado el 3 de noviembre de 2016 .
  80. ^ "Encuesta de desarrolladores de desbordamiento de pila 2019" . Desbordamiento de pila . Archivado desde el original el 8 de octubre de 2020 . Consultado el 31 de marzo de 2021 .
  81. ^ Herman, Dave (12 de julio de 2016). "Envío de Rust en Firefox * Mozilla Hacks: el blog del desarrollador web" . Hacks.mozilla.org . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 3 de noviembre de 2016 .
  82. ^ Yegulalp, Serdar (3 de abril de 2015). "El motor de navegador Servo basado en Rust de Mozilla avanza poco a poco" . InfoWorld . Archivado desde el original el 16 de marzo de 2016 . Consultado el 15 de marzo de 2016 .
  83. ^ Lardinois, Frederic (3 de abril de 2015). "Mozilla y Samsung se unen para desarrollar Servo, el motor de navegador de próxima generación de Mozilla para procesadores multinúcleo" . TechCrunch . Archivado desde el original el 10 de septiembre de 2016 . Consultado el 25 de junio de 2017 .
  84. ^ Bryant, David (27 de octubre de 2016). "Un salto cuántico para la web" . Medio . Archivado desde el original el 9 de diciembre de 2020 . Consultado el 27 de octubre de 2016 .
  85. ^ Yegulalp, Serdar. "El sistema operativo Redox de Rust podría mostrarle a Linux algunos trucos nuevos" . infoworld. Archivado desde el original el 21 de marzo de 2016 . Consultado el 21 de marzo de 2016 .
  86. ^ Sei, Mark (10 de octubre de 2018). "Nuevas características de Fedora 29: Startis ahora oficialmente en Fedora" . Marksei, píldoras de administrador de sistemas semanales . Archivado desde el original el 13 de abril de 2019 . Consultado el 13 de mayo de 2019 .
  87. ^ "RHEL 8: Capítulo 8. Gestión de almacenamiento local en capas con Stratis" . 10 de octubre de 2018. Archivado desde el original el 13 de abril de 2019 . Consultado el 13 de abril de 2019 .
  88. ^ Nichols, Shaun (27 de junio de 2018). "¿El próximo truco de Microsoft? Sacar cosas de la nube a Azure IoT Edge" . El registro . Archivado desde el original el 27 de septiembre de 2019 . Consultado el 27 de septiembre de 2019 .
  89. ^ Balbaert, Ivo (27 de mayo de 2015). Rust Essentials . Packt Publishing. pag. 6. ISBN 978-1785285769. Consultado el 21 de marzo de 2016 .
  90. ^ Frank, Denis (5 de diciembre de 2013). "Uso de HyperLogLog para detectar malware más rápido que nunca" . Laboratorios de seguridad OpenDNS . Archivado desde el original el 14 de agosto de 2017 . Consultado el 19 de marzo de 2016 .
  91. ^ Denis, Frank (4 de octubre de 2013). "ZeroMQ: ayudándonos a bloquear dominios maliciosos en tiempo real" . Laboratorios de seguridad OpenDNS . Archivado desde el original el 14 de agosto de 2017 . Consultado el 19 de marzo de 2016 .
  92. ^ Hahn, Sebastian (31 de marzo de 2017). "[tor-dev] Tor en un idioma más seguro: actualización del equipo de red desde Amsterdam" . Archivado desde el original el 12 de noviembre de 2020 . Consultado el 1 de abril de 2017 .
  93. ^ asn (5 de julio de 2017). "El reloj de Wilmington: un Hackfest del equipo de la red Tor" . Tor Blog . Archivado desde el original el 4 de enero de 2018 . Consultado el 3 de enero de 2018 .
  94. ^ Garbutt, James (27 de enero de 2019). "Primeros pensamientos sobre Deno, el tiempo de ejecución de JavaScript / TypeScript" . 43081j.com . Archivado desde el original el 7 de noviembre de 2020 . Consultado el 27 de septiembre de 2019 .
  95. ^ "Prisma 2 viene pronto (actualización)" . Prisma . Archivado desde el original el 5 de diciembre de 2020 . Consultado el 30 de marzo de 2021 .
  96. ^ Howarth, Jesse (4 de febrero de 2020). "Por qué Discord está cambiando de Go a Rust" . Archivado desde el original el 30 de junio de 2020 . Consultado el 14 de abril de 2020 .
  97. ^ terminusdb / terminusdb-store , TerminusDB, 14 de diciembre de 2020, archivado desde el original el 15 de diciembre de 2020 , recuperado el 14 de diciembre de 2020
  98. ^ "Volante" . Ruffle . Archivado desde el original el 26 de enero de 2021 . Consultado el 14 de abril de 2021 .
  99. ^ Krill, Paul. "El lenguaje de Rust se mueve a una base independiente" . InfoWorld . Archivado desde el original el 10 de abril de 2021 . Consultado el 10 de abril de 2021 .
  100. ^ Vaughan-Nichols, Steven J. (9 de abril de 2021). "Shane Miller de AWS para dirigir la recién creada Fundación Rust" . ZDNet . Archivado desde el original el 10 de abril de 2021 . Consultado el 10 de abril de 2021 .
  101. ^ "RustConf 2020 - Jueves 20 de agosto" . rustconf.com . Archivado desde el original el 25 de agosto de 2019 . Consultado el 25 de agosto de 2019 .
  102. ^ Óxido de cinturón de óxido . Dayton, Ohio. 18 de octubre de 2019. Archivado desde el original el 14 de mayo de 2019 . Consultado el 14 de mayo de 2019 .
  103. ^ RustFest . Barcelona, ​​España: asquera Event UG. 2019. Archivado desde el original el 24 de abril de 2019 . Consultado el 14 de mayo de 2019 .
  104. ^ "Oxidize Global" . Conferencia Oxidize Berlin . Consultado el 1 de febrero de 2021 .

  • Página web oficial Edit this at Wikidata
  • Rust-lang en GitHub