De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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]

Historia [ editar ]

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. [29]
Un ejemplo de compilación del programa 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 . [30] Mozilla comenzó a patrocinar el proyecto en el año 2009 [18] y anunció que en el año 2010. [31] [32] El mismo año, el trabajo pasó de la inicial del compilador (escrito en OCaml ) a la LLVM basado compilador autoalojamiento escrita en óxido. [33] Denominado rustc , se compiló con éxito en 2011. [34]

La primera versión pre-alfa numerada del compilador de Rust se produjo en enero de 2012. [35] Rust 1.0, la primera versión estable, se lanzó el 15 de mayo de 2015. [36] [37] Después de 1.0, las versiones de puntos estables se entregan cada seis semanas, mientras que las funciones se desarrollan en Rust todas las noches y luego se prueban con versiones beta que duran seis semanas. [38]

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 . [39] Los estados de tipo se eliminaron porque en la práctica se usaban poco, [40] aunque se puede lograr la misma funcionalidad aprovechando la semántica de movimiento de Rust. [41]

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. [42]

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". [43]

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 . [44] [45] Entre los despedidos estaban la mayoría del equipo Rust, [46] [se necesita una mejor fuente ] mientras que el equipo Servo se disolvió por completo. [47] [Se necesita una mejor fuente ] El evento generó preocupaciones sobre el futuro de Rust. [48]

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. [49]

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). [50] [51]

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 ++. [52]

Sintaxis [ editar ]

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 está más cerca de la de la familia de lenguajes ML y laLenguaje Haskell . Casi todas las partes del cuerpo de una función son expresiones , [53] incluso los 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 ()}

Funciones [ editar ]

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 , [54] y para programación en general , es decir, crear y mantener límites que preserven la integridad del sistema grande. [55] 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 [ editar ]

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. [56] [57] [58] 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. [59] 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 . [57]SomeNone Rust también introduce una sintaxis agregada para administrar la vida útil , y el compilador razona sobre esto a través de su comprobador de préstamos . El código inseguro que puede subvertir algunas de estas restricciones puede escribirse utilizando la unsafepalabra clave del idioma . [20]

Gestión de la memoria [ editar ]

Rust no utiliza un sistema de recolección de basura automatizado . En cambio, la memoria y otros recursos se gestionan mediante la convención de adquisición de recursos es inicialización (RAII), [60] 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 [ editar ]

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. [61] [62] 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 [ editar ]

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. [63] 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 .

Extensiones de idioma [ editar ]

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

Las macros de procedimiento utilizan funciones 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[65] 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 . [66]

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 ); }

Rendimiento [ editar ]

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

Adopción [ editar ]

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

Navegador web [ editar ]

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

Sistemas operativos [ editar ]

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 [75]
  • Stratis : un administrador de sistema de archivos para Fedora [76] y RHEL 8 [77]
  • Google Fuchsia : un sistema operativo

Otro [ editar ]

  • 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 [78]
  • OpenDNS usa Rust en dos de sus componentes [79] [80] [81]
  • Tor , una red de anonimato , escrita originalmente en C, está experimentando con la migración a Rust por sus características de seguridad [82] [83]
  • Deno , un tiempo de ejecución seguro para JavaScript y TypeScript , está construido con V8 , Rust y Tokio [84]
  • Prisma , un ORM para JavaScript , TypeScript y Go , recientemente portó su motor de consultas a Rust para su versión 2. [85]
  • 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 [86].
  • TerminusDB , una base de datos de gráficos de código abierto diseñada para la creación y conservación de gráficos de conocimiento en colaboración [87]
  • Ruffle , un emulador SWF de código abierto escrito en Rust [88]
  • Wasmer , un tiempo de ejecución seguro del lado del servidor para WebAssembly , está construido con LLVM y Rust [89]

Gobernanza [ editar ]

Fundación Rust [ editar ]

La Fundación Rust es una organización 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 administrar 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). [90]

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

Desarrollo [ editar ]

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 ). [92]
  • Rust Belt Rust: una conferencia #rustlang en Rust Belt [93]
  • RustFest: la conferencia europea @rustlang [94]
  • RustCon Asia
  • Óxido LATAM
  • Oxidize Global [95]

Ver también [ editar ]

  • Comparación de lenguajes de programación

Referencias [ editar ]

  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.52.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 de 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 i j k l m "La referencia de Rust: Apéndice: Influencias" . Archivado desde el original el 26 de enero de 2019 . Consultado el 11 de noviembre de 2018 .
  8. ^ "Investigación de nota: sistema de tipos" . 2015-02-01. Archivado desde el original el 17 de febrero de 2019 . Consultado el 25 de marzo de 2015 .
  9. ^ "RFC para 'if let' expresión" . Archivado desde el original el 4 de marzo de 2016 . Consultado el 4 de diciembre de 2014 .
  10. ^ "¿Optimizaciones de comandos?" . 2014-06-26. Archivado desde el original el 10 de julio de 2019 . Consultado el 10 de diciembre de 2014 .
  11. ^ "Idris - tipos de singularidad" . 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 Bib : 2017arXiv171007047J . Cite journal requires |journal= (help)
  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" . 2020-06-03. 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 mayormente 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 - The Rust Project" . Rust-lang.org . Archivado desde el original el 9 de junio de 2016 . Consultado el 27 de junio de 2019 .
  18. ^ "Comparación de óxido frente a 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 intrépida: seguridad de la memoria" . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 4 de noviembre de 2020 .
  21. ^ "Rc <T>, 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 de la herrumbre" . 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" . 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. ^ "Introducción" . rust-lang.org . Archivado desde el original el 1 de noviembre de 2020 . Consultado el 11 de octubre de 2020 .
  29. 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 .
  30. ^ "Tiempo futuro" . 2011-04-29. Archivado desde el original el 18 de septiembre de 2012 . Consultado el 6 de febrero de 2012 .
  31. ^ 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 .
  32. 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 .
  33. 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 .
  34. 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 .
  35. ^ "Historial de versiones" . Archivado desde el original el 15 de mayo de 2015 . Consultado el 1 de enero de 2017 .
  36. ^ 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 .
  37. ^ "Scheduling the Trains". Archived from the original on 2017-01-02. Retrieved 2017-01-01.
  38. ^ Strom, Robert E.; Yemini, Shaula (1986). "Typestate: A Programming Language Concept for Enhancing Software Reliability" (PDF). IEEE Transactions on Software Engineering: 157–171. doi:10.1109/TSE.1986.6312929. ISSN 0098-5589. S2CID 15575346. Archived (PDF) from the original on 2010-07-14. Retrieved 2010-11-14.
  39. ^ Walton, Patrick (2012-12-26). "Typestate Is Dead, Long Live Typestate!". GitHub. Archived from the original on 2018-02-23. Retrieved 2016-11-03.
  40. ^ Biffle, Cliff (2019-06-05). "The Typestate Pattern in Rust". Archived from the original on 2021-02-06. Retrieved 2021-02-01.
  41. ^ Binstock, Andrew. "The Rise And Fall of Languages in 2013". Dr Dobb's. Archived from the original on 2016-08-07. Retrieved 2015-12-11.
  42. ^ "Safe Interoperability between Rust and C++ with CXX". InfoQ. 2020-12-06. Retrieved 2021-01-03.
  43. ^ Cimpanu, Catalin (2020-08-11). "Mozilla lays off 250 employees while it refocuses on commercial products". ZDNet. Retrieved 2020-12-02.
  44. ^ Cooper, Daniel (2020-08-11). "Mozilla lays off 250 employees due to the pandemic". Engadget. Archived from the original on 2020-12-13. Retrieved 2020-12-02.
  45. ^ @tschneidereit (2020-08-12). "Much of the team I used to manage was part of the Mozilla layoffs on Tuesday. That team was Mozilla's Rust team, and Mozilla's Wasmtime team. I thought I'd know how to talk about it by now, but I don't. It's heartbreaking, incomprehensible, and staggering in its impact" (Tweet). Retrieved 2020-12-02 – via Twitter.
  46. ^ @asajeffrey (2020-08-11). "Mozilla is closing down the team I'm on, so I am one of the many folks now wondering what the next gig will be. It's been a wild ride!" (Tweet). Retrieved 2020-12-02 – via Twitter.
  47. ^ Kolakowski, Nick (2020-08-27). "Is Rust in Trouble After Big Mozilla Layoffs?". Dice. Archived from the original on 2020-11-24. Retrieved 2020-12-02.
  48. ^ "Laying the foundation for Rust's future". Rust Blog. 2020-08-18. Archived from the original on 2020-12-02. Retrieved 2020-12-02.
  49. ^ "Rust Foundation". foundation.rust-lang.org. 2021-02-08. Archived from the original on 2021-02-09. Retrieved 2021-02-09.
  50. ^ "Mozilla Welcomes the Rust Foundation". Mozilla Blog. 2021-02-09. Archived from the original on 2021-02-08. Retrieved 2021-02-09.
  51. ^ Amadeo, Ron (2021-04-07). "Google is now writing low-level Android code in Rust". Ars Technica. Archived from the original on 2021-04-08. Retrieved 2021-04-08.
  52. ^ "rust/src/grammar/parser-lalr.y". 2017-05-23. Retrieved 2017-05-23.
  53. ^ Avram, Abel (2012-08-03). "Interview on Rust, a Systems Programming Language Developed by Mozilla". InfoQ. Archived from the original on 2013-07-24. Retrieved 2013-08-17.
  54. ^ "Debian -- Details of package rustc in sid". packages.debian.org. Archived from the original on 2017-02-22. Retrieved 2017-02-21.
  55. ^ Rosenblatt, Seth (2013-04-03). "Samsung joins Mozilla's quest for Rust". Archived from the original on 2013-04-04. Retrieved 2013-04-05.
  56. ^ a b Brown, Neil (2013-04-17). "A taste of Rust". Archived from the original on 2013-04-26. Retrieved 2013-04-25.
  57. ^ "Races - The Rustonomicon". doc.rust-lang.org. Archived from the original on 2017-07-10. Retrieved 2017-07-03.
  58. ^ "The Rust Language FAQ". static.rust-lang.org. 2015. Archived from the original on 2015-04-20. Retrieved 2017-04-24.
  59. ^ "RAII – Rust By Example". doc.rust-lang.org. Archived from the original on 2019-04-21. Retrieved 2020-11-22.
  60. ^ Klabnik, Steve; Nichols, Carol (June 2018). "Chapter 4: Understanding Ownership". The Rust Programming Language. San Francisco, California: No Starch Press. p. 44. ISBN 978-1-593-27828-1. Archived from the original on 2019-05-03. Retrieved 2019-05-14.
  61. ^ "The Rust Programming Language: What is Ownership". Rust-lang.org. Archived from the original on 2019-05-19. Retrieved 2019-05-14.
  62. ^ Walton, Patrick (2010-10-01). "Rust Features I: Type Inference". Archived from the original on 2011-07-08. Retrieved 2011-01-21.
  63. ^ "Procedural Macros". The Rust Programming Language Reference. Archived from the original on 7 November 2020. Retrieved 23 Mar 2021.
  64. ^ "Serde Derive". Serde Derive documentation. Archived from the original on 17 April 2021. Retrieved 23 Mar 2021.
  65. ^ "extendr_api - Rust". Extendr Api Documentation. Retrieved 23 Mar 2021.
  66. ^ Walton, Patrick (2010-12-05). "C++ Design Goals in the Context of Rust". Archived from the original on 2010-12-09. Retrieved 2011-01-21.
  67. ^ "How Fast Is Rust?". The Rust Programming Language FAQ. Archived from the original on 28 October 2020. Retrieved 11 April 2019.
  68. ^ "Stack Overflow Developer Survey 2015". Stackoverflow.com. Archived from the original on 2016-12-31. Retrieved 2016-11-03.
  69. ^ "Stack Overflow Developer Survey 2019". Stack Overflow. Archived from the original on 2020-10-08. Retrieved 2021-03-31.
  70. ^ Herman, Dave (2016-07-12). "Shipping Rust in Firefox * Mozilla Hacks: the Web developer blog". Hacks.mozilla.org. Archived from the original on 2020-11-08. Retrieved 2016-11-03.
  71. ^ Yegulalp, Serdar (2015-04-03). "Mozilla's Rust-based Servo browser engine inches forward". InfoWorld. Archived from the original on 2016-03-16. Retrieved 2016-03-15.
  72. ^ Lardinois, Frederic (2015-04-03). "Mozilla And Samsung Team Up To Develop Servo, Mozilla's Next-Gen Browser Engine For Multicore Processors". TechCrunch. Archived from the original on 2016-09-10. Retrieved 2017-06-25.
  73. ^ Bryant, David (27 October 2016). "A Quantum Leap for the web". Medium. Archived from the original on 9 December 2020. Retrieved 27 October 2016.
  74. ^ Yegulalp, Serdar. "Rust's Redox OS could show Linux a few new tricks". infoworld. Archived from the original on 21 March 2016. Retrieved 21 March 2016.
  75. ^ Sei, Mark (10 October 2018). "Fedora 29 new features: Startis now officially in Fedora". Marksei, Weekly sysadmin pills. Archived from the original on 2019-04-13. Retrieved 2019-05-13.
  76. ^ "RHEL 8: Chapter 8. Managing layered local storage with Stratis". 10 October 2018. Archived from the original on 13 April 2019. Retrieved 13 April 2019.
  77. ^ Nichols, Shaun (27 June 2018). "Microsoft's next trick? Kicking things out of the cloud to Azure IoT Edge". The Register. Archived from the original on 2019-09-27. Retrieved 2019-09-27.
  78. ^ Balbaert, Ivo (27 May 2015). Rust Essentials. Packt Publishing. p. 6. ISBN 978-1785285769. Retrieved 21 March 2016.
  79. ^ Frank, Denis (5 December 2013). "Using HyperLogLog to Detect Malware Faster Than Ever". OpenDNS Security Labs. Archived from the original on 14 August 2017. Retrieved 19 March 2016.
  80. ^ Denis, Frank (4 October 2013). "ZeroMQ: Helping us Block Malicious Domains in Real Time". OpenDNS Security Labs. Archived from the original on 14 August 2017. Retrieved 19 March 2016.
  81. ^ Hahn, Sebastian (2017-03-31). "[tor-dev] Tor in a safer language: Network team update from Amsterdam". Archived from the original on 2020-11-12. Retrieved 2017-04-01.
  82. ^ asn (2017-07-05). "The Wilmington Watch: A Tor Network Team Hackfest". Tor Blog. Archived from the original on 2018-01-04. Retrieved 2018-01-03.
  83. ^ Garbutt, James (27 January 2019). "First thoughts on Deno, the JavaScript/TypeScript run-time". 43081j.com. Archived from the original on 2020-11-07. Retrieved 2019-09-27.
  84. ^ "Prisma 2 is Coming Soon (Update)". Prisma. Archived from the original on 2020-12-05. Retrieved 2021-03-30.
  85. ^ Howarth, Jesse (2020-02-04). "Why Discord is switching from Go to Rust". Archived from the original on 2020-06-30. Retrieved 2020-04-14.
  86. ^ terminusdb/terminusdb-store, TerminusDB, 2020-12-14, archived from the original on 2020-12-15, retrieved 2020-12-14
  87. ^ "Ruffle". Ruffle. Archived from the original on 2021-01-26. Retrieved 2021-04-14.
  88. ^ "wasmerio/wasmer". Wasmer on Github. Archived from the original on 2021-04-10. Retrieved 2021-05-08.
  89. ^ Krill, Paul. "Rust language moves to independent foundation". InfoWorld. Archived from the original on 10 April 2021. Retrieved 10 April 2021.
  90. ^ Vaughan-Nichols, Steven J. (9 April 2021). "AWS's Shane Miller to head the newly created Rust Foundation". ZDNet. Archived from the original on 10 April 2021. Retrieved 10 April 2021.
  91. ^ "RustConf 2020 - Thursday, August 20". rustconf.com. Archived from the original on 2019-08-25. Retrieved 2019-08-25.
  92. ^ Rust Belt Rust. Dayton, Ohio. 2019-10-18. Archived from the original on 2019-05-14. Retrieved 2019-05-14.
  93. ^ RustFest. Barcelona, Spain: asquera Event UG. 2019. Archived from the original on 2019-04-24. Retrieved 2019-05-14.
  94. ^ "Oxidize Global". Oxidize Berlin Conference. Retrieved 2021-02-01.

External links[edit]

  • Official website
  • Rust-lang on GitHub