Rust (lenguaje de programación)


De Wikipedia, la enciclopedia libre
  (Redirigido desde Graydon Hoare )
Saltar a navegación Saltar a búsqueda

Rust es un multi-paradigma , lenguaje de programación de propósito general diseñada para el rendimiento y la seguridad , sobre todo segura de concurrencia . [12] [13] Rust es sintácticamente similar a C ++ , [14] pero puede garantizar la seguridad de la memoria usando un verificador de préstamo para validar referencias . [15] Rust logra la seguridad de la memoria sin recolección de basura y el recuento de referencias es opcional. [16] [17] El óxido ha sido llamadolenguaje de programación de sistemas y, además de características de alto nivel como la programación funcional , también ofrece mecanismos para la gestión de memoria de bajo nivel .

Rust fue diseñado originalmente por Graydon Hoare en Mozilla Research, [18] con contribuciones de Dave Herman, Brendan Eich y otros. [19] [20] Los diseñadores refinaron el lenguaje mientras escribían el motor del navegador experimental Servo , [21] 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. [22] [23]

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, aunque solo lo usa el 7% de los encuestados en la encuesta de 2021. [24]

Historia

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. [13] Hoare ha declarado que el proyecto posiblemente recibió su nombre de hongos de la roya y que el nombre también es una subcadena de "robusto". [25] Mozilla comenzó a patrocinar el proyecto en el año 2009 [13] y anunció que en el año 2010. [26] [27] El mismo año, el trabajo pasó de la inicial del compilador (escrito en OCaml ) a la LLVM basado compilador autoalojamiento escrita en óxido. [28] Denominado rustc , se compiló con éxito en 2011. [29]

La primera versión pre-alfa numerada del compilador de Rust se produjo en enero de 2012. [30] Rust 1.0, la primera versión estable, se publicó el 15 de mayo de 2015. [31] [32] 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. [33] [34] 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. [35]

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 . [36] Se eliminaron los estados de tipo porque en la práctica se usaban poco, [37] aunque se puede lograr la misma funcionalidad aprovechando la semántica de movimiento de Rust. [38]

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

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

Rust tiene una interfaz de función extranjera (FFI) que se puede llamar desde, por ejemplo, lenguaje C, y puede llamar a C. Si bien llamar a C ++ ha sido históricamente un desafío (desde cualquier idioma), Rust tiene una biblioteca, CXX, para permitir llamadas a o de C ++, y "CXX tiene una sobrecarga nula o insignificante". [41]

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

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

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

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

Sintaxis

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

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

La 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 . A pesar del parecido con C y C ++, la sintaxis de Rust 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 , [51] incluso los operadores de flujo de control. Por ejemplo, la ifexpresión ordinaria también ocupa el lugar deCondicional 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 ()}

Características

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 , [52] y para programación en general , es decir, crear y mantener límites que preserven la integridad del sistema grande. [53] 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 proteger la memoria . No permite punteros nulos , punteros colgantes o carreras de datos . [54] [55] [56] 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. [57] Para replicar punteros que son válidos o NULL, como en una lista enlazada 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 . [55] Rust ha agregado sintaxis para administrar la vida útilSomeNone, que el verificador de préstamos comprueba en el momento de la compilación . El código inseguro puede subvertir algunas de estas restricciones usando la unsafepalabra clave. [15]

Gestión de la memoria

Rust no utiliza la recolección de basura automatizada . La memoria y otros recursos se gestionan mediante la adquisición de recursos según la convención de inicialización , [58] con recuento de referencias opcional . Rust proporciona una gestión determinista de los recursos, con una sobrecarga muy baja . [59] Rust 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. La seguridad de dichos punteros se verifica en el momento de la compilación, lo que evita que los punteros cuelguen y otras formas de comportamiento indefinido . El sistema de tipos de Rust separa los indicadores compartidos e inmutables del formulario &Tde los indicadores únicos y mutables del formulario &mut T. 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. [60] [61] 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 , llamados rasgos , inspirados en el lenguaje Haskell . Esta función es para polimorfismo ad hoc , que se logra agregando restricciones a las declaraciones de variables de tipo.

Rust usa 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. [62] Las variables asignadas varias veces deben marcarse con la palabra clave mut(abreviatura de mutable).

A las funciones se les pueden dar parámetros genéricos , que generalmente restringen el tipo genérico para implementar un rasgo o rasgos particulares. 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.

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 de Rust también está disponible 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.

En Rust, los tipos definidos por el usuario se crean con la structpalabra clave. Estos tipos suelen contener campos de datos como objetos o clases en otros idiomas. La implpalabra clave puede definir métodos para la estructura (los datos y la función se definen por separado en una estructura) o implementar un rasgo para la estructura. Un rasgo es un contrato en el que una estructura tiene ciertos métodos requeridos implementados. Los rasgos se utilizan para restringir parámetros genéricos y porque los rasgos pueden proporcionar una estructura con más métodos que los definidos por el usuario. Por ejemplo, el rasgo Iteratorrequiere que el nextmétodo se defina para el tipo. Una vez nextque se define el método, el rasgo proporciona métodos auxiliares funcionales comunes sobre el iterador como mapa o filtro.

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. Los rasgos proporcionan herencia y polimorfismo; permiten que los métodos se definan y mezclen 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 ; vercomposición sobre herencia .

Componentes

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

Carga

Cargo es el sistema de construcción y el administrador de paquetes de Rust . Cargo maneja la descarga de dependencias y la construcción de dependencias. Cargo también actúa como envoltorio para clippy y otros componentes Rust. Requiere que los proyectos sigan una determinada estructura de directorios. [64]

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. [sesenta y cinco]

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 o las reglas especificadas en un archivo rustfmt.toml. Rustfmt se puede invocar como un programa independiente o en un proyecto de Rust a través de Cargo. [66] [67]

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. Fue creado en 2014 [68] y lleva el nombre de la característica homónima de Microsoft Office [69] . 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 comprobaciones 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]

Extensiones de idioma

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 del compilador. Esto complementa el mecanismo de macro declarativo (también conocido como macros por ejemplo ), 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 #[custom_attribute]

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_json :: { Serialize , Deserialize };  # [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

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]

Adopción

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-2021. [81] [82]

navegadores web

Firefox tiene dos proyectos escritos en Rust: el motor de navegador paralelo Servo [83] desarrollado por Mozilla en colaboración con Samsung ; [84] y Quantum , que se compone de varios subproyectos para mejorar el motor del navegador Gecko de Mozilla . [85]

Sistemas operativos experimentales

  • Redox , un "sistema operativo completo similar a Unix" que incluye un micronúcleo [86]
  • Theseus, SO con "diseño intralingüístico" y una arquitectura fundamental que encarna los conceptos de Rust [87]

Motores de juego

  • Bevy , un motor de juego ECS basado en datos integrado en Rust.
  • Amethyst , un motor de juego basado en datos y orientado a datos.

Otro

  • Deno , un tiempo de ejecución seguro para JavaScript y TypeScript , está construido con V8 , Rust y Tokio [88]
  • Discord usa Rust para partes de su backend, así como para la codificación de video del lado del cliente, [89] para aumentar la infraestructura central escrita en Elixir . [90]
  • exa , un "reemplazo moderno de ls "
  • El sistema operativo basado en la capacidad de Google Fuchsia tiene algunas herramientas [ vagas ] escritas en Rust [91]
  • Microsoft Azure IoT Edge, una plataforma utilizada para ejecutar servicios de Azure e inteligencia artificial en dispositivos de IoT, tiene componentes implementados en Rust [92]
  • OpenDNS utiliza Rust en dos de sus componentes [93] [94] [95]
  • Polkadot (criptomoneda) , una Internet interconectada de cadenas de bloques , está escrito en Rust
  • Ruffle , un emulador SWF de código abierto escrito en Rust [96]
  • Stratis : un administrador de sistema de archivos para Fedora [97] y RHEL 8 [98]
  • TerminusDB , una base de datos de gráficos de código abierto diseñada para crear y seleccionar gráficos de conocimiento de forma colaborativa [99]
  • Aplicaciones como Figma y Dropbox están escritas en Rust, así como algunos componentes para Amazon , Facebook y Discord [100].

Gobernancia

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). [101] La junta de la fundación está presidida por Shane Miller. [102] A partir de finales de 2021, su directora ejecutiva y directora ejecutiva es Rebecca Rumbul. [103] Antes de esto, Ashley Williams fue directora ejecutiva interina. [104]

Desarrollo

Las conferencias de Rust incluyen:

  • RustConf: una conferencia anual en Portland, Oregon . Se celebra anualmente desde 2016 (excepto en 2020 y 2021 debido a la pandemia COVID-19 ). [105]
  • Rust Belt Rust: una conferencia #rustlang en Rust Belt [106]
  • RustFest: la conferencia europea @rustlang [107]
  • RustCon Asia
  • Óxido LATAM
  • Oxidize Global [108]

Ver también

  • Comparación de lenguajes de programación

Notas

  1. ^ La lista está incompleta; el grado de soporte de stdlib varía

Referencias

  1. ^ "Anunciando Rust 1.56.1" .
  2. ^ 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 .
  3. ^ "Investigación de nota: sistema de tipos" . GitHub . 1 de febrero de 2015. Archivado desde el original el 17 de febrero de 2019 . Consultado el 25 de marzo de 2015 .
  4. ^ "RFC para la expresión 'if let'" . GitHub . Archivado desde el original el 4 de marzo de 2016 . Consultado el 4 de diciembre de 2014 .
  5. ^ "¿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 .
  6. ^ "Idris - tipos de unicidad" . Archivado desde el original el 21 de noviembre de 2018 . Consultado el 20 de noviembre de 2018 .
  7. ^ 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 )
  8. ^ 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 .
  9. ^ "Microsoft abre el lenguaje de programación Project Verona inspirado en Rust en GitHub" . ZDNet . Archivado desde el original el 17 de enero de 2020 . Consultado el 17 de enero de 2020 .
  10. ^ "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 .
  11. ^ 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 .
  12. ^ 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 .
  13. ^ "Comparación de óxido frente a C ++" . Archivado desde el original el 20 de noviembre de 2018 . Consultado el 20 de noviembre de 2018 .
  14. ^ a b "Óxido inseguro" . Archivado desde el original el 14 de octubre de 2020 . Consultado el 17 de octubre de 2020 .
  15. ^ "Seguridad intrépida: seguridad de la memoria" . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 4 de noviembre de 2020 .
  16. ^ "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 .
  17. ^ "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.
  18. ^ 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 .
  19. ^ "Contribuyentes a rust-lang / rust" . GitHub . Archivado desde el original el 26 de mayo de 2020 . Consultado el 12 de octubre de 2018 .
  20. ^ 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 .
  21. ^ "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 .
  22. ^ "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 .
  23. ^ "Encuesta de desarrollador de desbordamiento de pila 2021" . Desbordamiento de pila . Consultado el 3 de agosto de 2021 .
  24. ^ 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 .
  25. ^ "Tiempo futuro" . 29 de abril de 2011. Archivado desde el original el 18 de septiembre de 2012 . Consultado el 6 de febrero de 2012 .
  26. ^ 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 .
  27. ^ 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 .
  28. ^ 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 .
  29. ^ 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 .
  30. ^ "Historial de versiones" . GitHub . Archivado desde el original el 15 de mayo de 2015 . Consultado el 1 de enero de 2017 .
  31. ^ 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 .
  32. ^ "Programación de los trenes" . Archivado desde el original el 2 de enero de 2017 . Consultado el 1 de enero de 2017 .
  33. ^ "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 .
  34. ^ "¿Qué son las ediciones? - La guía de edición" . doc.rust-lang.org . Consultado el 22 de mayo de 2021 .
  35. ^ 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 .   
  36. ^ 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 .
  37. ^ 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 .
  38. ^ "[rust-dev] Rust 0.4 lanzado" . mail.mozilla.org . Consultado el 31 de octubre de 2021 .
  39. ^ 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 .
  40. ^ "Interoperabilidad segura entre Rust y C ++ con CXX" . InfoQ . 6 de diciembre de 2020 . Consultado el 3 de enero de 2021 .
  41. ^ 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 .
  42. ^ 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 .
  43. ^ @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 .
  44. ^ @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 .
  45. ^ 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 .
  46. ^ "Sentar 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 .
  47. ^ "Fundación de óxido" . 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 .
  48. ^ "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 .
  49. ^ 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 .
  50. ^ "óxido / src / grammar / parser-lalr.y" . GitHub . 23 de mayo de 2017 . Consultado el 23 de mayo de 2017 .
  51. ^ 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 .
  52. ^ "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 .
  53. ^ 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 .
  54. ↑ 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 .
  55. ^ "Razas - El Rustonomicon" . doc.rust-lang.org . Archivado desde el original el 10 de julio de 2017 . Consultado el 3 de julio de 2017 .
  56. ^ "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 .
  57. ^ "RAII - óxido por ejemplo" . doc.rust-lang.org . Archivado desde el original el 21 de abril de 2019 . Consultado el 22 de noviembre de 2020 .
  58. ^ "Abstracción sin gastos generales: rasgos en Rust" . Blog de óxido .
  59. ^ 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 .
  60. ^ "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 .
  61. ^ 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 .
  62. ^ rust-lang / rustup , The Rust Programming Language, 17 de mayo de 2021 , consultado el 17 de mayo de 2021
  63. ^ "Por qué existe la carga" . El libro de carga . Consultado el 18 de mayo de 2021 .
  64. ^ "Especificación de dependencias - el libro de carga" . doc.rust-lang.org . Consultado el 17 de mayo de 2021 .
  65. ^ "rust-dev-tools / fmt-rfcs" . GitHub . Consultado el 21 de septiembre de 2021 .
  66. ^ "rustfmt" . GitHub . Consultado el 19 de mayo de 2021 .
  67. ^ "Crear README.md · rust-lang / rust-clippy @ 507dc2b" . GitHub . Consultado el 22 de noviembre de 2021 .
  68. ^ "Día 1 - subcomandos de carga | 24 días de Rust" . zsiciarz.github.io . Consultado el 22 de noviembre de 2021 .
  69. ^ "óxido-lang / óxido-clippy" . GitHub . Consultado el 21 de mayo de 2021 .
  70. ^ "TODAS las pelusas Clippy" . 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. ^ "Introducción" . 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. ^ "Encuesta de desarrollador de desbordamiento de pila 2021" . Desbordamiento de pila . Consultado el 24 de agosto de 2021 .
  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. ^ "Introducción a Teseo" . Libro de Theseus OS . Consultado el 11 de julio de 2021 .
  87. ^ 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 .
  88. ^ 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 .
  89. ^ Vishnevskiy, Stanislav (6 de julio de 2017). "Cómo Discord escaló Elixir a 5.000.000 de usuarios simultáneos" . Blog de Discord .
  90. ^ "Código fuente de Google Fushcia" . Google Git . Consultado el 2 de julio de 2021 .
  91. ^ 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 .
  92. ^ Balbaert, Ivo (27 de mayo de 2015). Rust Essentials . Packt Publishing. pag. 6. ISBN 978-1785285769. Consultado el 21 de marzo de 2016 .
  93. ^ 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 .
  94. ^ 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 .
  95. ^ "Volante" . Ruffle . Archivado desde el original el 26 de enero de 2021 . Consultado el 14 de abril de 2021 .
  96. ^ 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 .
  97. ^ "RHEL 8: Capítulo 8. Gestión del 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 .
  98. ^ 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
  99. 9 Companies That Use Rust in Production , Serokell, 18 de noviembre de 2020 , consultado el 7 de octubre de 2021
  100. ^ 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 .
  101. ^ 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 .
  102. ^ Vaughan-Nichols, Steven J. (17 de noviembre de 2021). "La Fundación Rust nombra a Rebecca Rumbul como directora ejecutiva" . ZDNet . Consultado el 18 de noviembre de 2021 .
  103. ^ "El lenguaje de programación Rust ahora tiene su propia base independiente" . TechRepublic . 10 de febrero de 2021 . Consultado el 18 de noviembre de 2021 .
  104. ^ "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 .
  105. ^ Ó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 .
  106. ^ 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 .
  107. ^ "Oxidar global" . Conferencia Oxidize Berlin . Consultado el 1 de febrero de 2021 .

enlaces externos

  • Página web oficial
  • Rust-lang en GitHub
Obtenido de " https://en.wikipedia.org/w/index.php?title=Rust_(programming_language)&oldid=1057317542 "