0% encontró este documento útil (0 votos)
56 vistas12 páginas

Informe de Rust V.2 2024-1

Cargado por

El Brayan :v
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
56 vistas12 páginas

Informe de Rust V.2 2024-1

Cargado por

El Brayan :v
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD DE TARAPACÁ

FACULTAD DE INGENIERÍA

DEPARTAMENTO DE INGENIERÍA EN
COMPUTACIÓN E INFORMÁTICA

TÍTULO
“RUST (Lenguaje de Programación)”

Alumno(s): Joaquin Augusto Ortiz Diaz


Constanza Soledad Quispe Garay
Benjamín Alonso Lineros Emparán
Brian Pablo Lanyon Rivero
Asignatura: Fundamentos de Lenguajes de
Programación
Profesor: Humberto Manuel Urrutia Lopez

1.- Introducción

MES – AÑO 2024


UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

1.1.- Rust (Lenguaje de Programación)

Rust es un lenguaje de programación de sistemas que se enfoca en la seguridad, la


concurrencia y la velocidad. Desarrollado por Mozilla Research y lanzado en 2010, Rust ha
ganado una gran popularidad en la comunidad de desarrollo de software debido a sus
características innovadoras y su robusta filosofía de diseño.

A diferencia de muchos otros lenguajes de programación, Rust está diseñado desde cero
con el objetivo de proporcionar seguridad y control sin comprometer el rendimiento. Su
sistema de tipos estáticos y su modelo de propiedad únicos permiten detectar y prevenir
errores de memoria, como desreferenciación nula y corrupción de memoria, durante la
compilación, lo que ayuda a evitar numerosos errores comunes que plagan otros lenguajes
de programación, como C y C++.

La concurrencia es otra área en la que Rust brilla. Su modelo de concurrencia basado en


actores y su sistema de tipos garantizan la seguridad en entornos concurrentes, lo que
facilita el desarrollo de aplicaciones concurrentes y paralelas sin temor a errores de
concurrencia, como las condiciones de carrera y el acceso a datos compartidos de forma
insegura.

Además, Rust se destaca por su rendimiento excepcional. Al aprovechar al máximo las


características de la programación de bajo nivel y la optimización del compilador, Rust
ofrece un rendimiento comparable al de lenguajes como C y C++, pero con menos riesgos
de seguridad y errores.

Icono de Rust

1.2. Historia

Asig
natura 2
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

El origen de Rust se remonta a 2006, cuando Graydon Hoare, un ingeniero de Mozilla,


comenzó a trabajar en el proyecto como un esfuerzo personal. Hoare se sintió inspirado por
la frustración que experimentó al programar en C++ y buscaba un lenguaje que ofreciera la
misma potencia y rendimiento, pero con menos errores y con una mayor seguridad.

El desarrollo de Rust se llevó a cabo en un contexto en el que los lenguajes de


programación existentes presentaban desafíos significativos en términos de seguridad y
confiabilidad. En particular, las vulnerabilidades relacionadas con la gestión de memoria en
lenguajes como C y C++ eran una preocupación importante, ya que podían conducir a
errores críticos, como desbordamientos de búfer y corrupción de memoria, que a menudo
resultaban en fallas de software y vulnerabilidades de seguridad.

Graydon Hoare y su equipo se propusieron diseñar un lenguaje que abordara estos


problemas de manera efectiva, mientras mantenía un alto nivel de rendimiento y flexibilidad.
Después de varios años de desarrollo, Rust se presentó públicamente en 2010 como un
proyecto de código abierto respaldado por Mozilla Research.

A lo largo de los años, Rust ha experimentado un crecimiento significativo en términos de


adopción y madurez. Se han lanzado múltiples versiones, cada una introduciendo nuevas
características, mejoras de rendimiento y correcciones de errores. La comunidad de
desarrolladores ha desempeñado un papel fundamental en el éxito continuo de Rust,
contribuyendo con código, proporcionando retroalimentación y promoviendo su uso en una
variedad de dominios y aplicaciones.

Motivos de su creación

1.3. Características

Asig
natura 3
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

Rust se distingue por una serie de características innovadoras que lo hacen único en el
panorama de los lenguajes de programación modernos. Estas características están
diseñadas para abordar desafíos comunes en el desarrollo de software, como la seguridad,
la concurrencia y el rendimiento. A continuación, se detallan algunas de las características
más destacadas de Rust:

Sistema de Tipos Estáticos: Rust te ayuda a detectar errores en tu código antes de que
siquiera lo ejecutes. Esto es útil para evitar problemas como cuando intentas acceder a un
lugar en la memoria que no deberías.

Modelo de Propiedad y Préstamo: En Rust, cada pieza de datos solo puede tener un
dueño a la vez. Esto suena extraño al principio, pero ayuda a prevenir errores que pueden
ocurrir con la memoria en otros lenguajes.

Concurrencia Segura: La concurrencia se trata de hacer múltiples cosas al mismo tiempo


en tu programa. Rust te ayuda a hacerlo de manera segura, evitando que cosas malas
sucedan cuando varias partes de tu programa intentan trabajar juntas.

Rendimiento Optimizado: Aunque Rust es seguro, aún puede ser muy rápido. Esto es
genial porque significa que puedes escribir programas seguros que aún se ejecutan
rápidamente. Esto se logra mediante la optimización del compilador y el acceso directo a las
características de bajo nivel de la plataforma subyacente, lo que permite escribir código
rápido y eficiente sin comprometer la seguridad.

Patrones de Concisión y Expresividad: En Rust, intentamos escribir código que sea fácil
de entender. Esto significa que usamos una sintaxis que hace que el código se vea limpio y
claro.

Compatibilidad con C y C++: Rust puede trabajar muy bien con otros lenguajes como C y
C++. Esto significa que puedes usar bibliotecas de esos lenguajes en tu código Rust, lo que
hace que sea más fácil reutilizar el código existente.

1.4. Patrocinadores

Asig
natura 4
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

Los patrocinadores de Rust son organizaciones e individuos que respaldan el desarrollo y la


adopción del lenguaje de programación Rust. Algunas de las principales entidades que
apoyan el proyecto Rust incluyen:

Mozilla: Mozilla es una organización sin fines de lucro conocida por desarrollar el popular
navegador web Firefox. Rust fue inicialmente desarrollado por Graydon Hoare, un ingeniero
de Mozilla, y el proyecto ha recibido un fuerte apoyo financiero y de recursos por parte de
Mozilla Research.

Microsoft: Microsoft ha demostrado un interés significativo en Rust y ha invertido en su


desarrollo. La empresa ha contribuido activamente al ecosistema de Rust, desarrollando
herramientas y bibliotecas compatibles con Rust, así como ofreciendo soporte para el
desarrollo de aplicaciones en Rust en sus plataformas, como Azure.

Google: Google también ha respaldado el desarrollo de Rust y ha contribuido al ecosistema


de Rust mediante el desarrollo de herramientas y bibliotecas compatibles. La compañía ha
mostrado interés en Rust debido a su potencial para mejorar la seguridad y el rendimiento
en una variedad de aplicaciones.

Amazon Web Services (AWS): AWS, uno de los principales proveedores de servicios de
computación en la nube, ha mostrado interés en Rust y ha comenzado a ofrecer soporte
para el desarrollo de aplicaciones en Rust en su plataforma. AWS ve a Rust como una
opción atractiva para desarrollar aplicaciones seguras y eficientes que se ejecuten en la
nube.

Huawei: Huawei, una empresa líder en tecnología de comunicaciones y electrónica de


consumo, también ha mostrado interés en Rust y ha respaldado su desarrollo. Huawei
reconoce el potencial de Rust para mejorar la seguridad y la confiabilidad en una variedad
de aplicaciones y sistemas, y ha contribuido al ecosistema de Rust mediante el desarrollo
de herramientas y recursos compatibles.

Red Hat: Red Hat, una empresa de software de código abierto conocida por su distribución
de Linux, también ha respaldado el desarrollo de Rust. La empresa ha demostrado interés
en Rust debido a su potencial para mejorar la seguridad y la confiabilidad de los sistemas y
aplicaciones basados en Linux.

Estos son solo algunos ejemplos de las organizaciones que patrocinan el desarrollo de
Rust. Además de estas grandes empresas, Rust también cuenta con el apoyo de una activa
comunidad de desarrolladores individuales y organizaciones más pequeñas que contribuyen
al proyecto de diversas maneras.

1.5. Historial de versiones e influencias

Asig
natura 5
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

Rust ha experimentado un desarrollo iterativo desde su concepción, con cada versión


introduciendo nuevas características, mejoras y correcciones de errores. A continuación, se
presenta un resumen del historial de versiones más destacado de Rust:

 Rust 0.1 (2012): Esta fue la primera versión pública de Rust, que presentaba un
subconjunto básico del lenguaje con énfasis en la seguridad y el rendimiento.

 Rust 0.7 (2012): Esta versión marcó la adopción del modelo de propiedad y
préstamo, que es una característica distintiva de Rust. También introdujo el sistema
de macros, permitiendo una mayor flexibilidad en la escritura de código.

 Rust 1.0 (2015): Este lanzamiento marcó un hito importante para Rust al estabilizar
la sintaxis y las características principales del lenguaje. Con Rust 1.0, se garantizó la
compatibilidad hacia adelante, lo que significa que el código escrito en esta versión
debería funcionar con futuras versiones de Rust sin cambios significativos.

 Rust 2018 (2018): Esta versión trajo consigo importantes mejoras en la ergonomía
del lenguaje y la experiencia del desarrollador. Se introdujeron características como
la sintaxis de "impl Trait", mejoras en la gestión de errores y una mayor coherencia
en la biblioteca estándar.

 Rust 1.50 (2021): Esta versión presentó mejoras significativas en la usabilidad y la


seguridad del lenguaje, incluida la capacidad de utilizar la palabra clave "const" en
expresiones de tipo y la introducción de reglas más estrictas para el manejo de
punteros nulos.

 Rust 1.55 (2021): Esta versión introdujo importantes mejoras en el rendimiento del
compilador, así como la capacidad de realizar referencias a funciones estáticas en
Rust, lo que mejoró la flexibilidad del lenguaje en ciertos casos de uso.

Influencias: Rust ha sido influenciado por una variedad de lenguajes de programación, cada
uno aportando ideas y conceptos que han ayudado a dar forma a su diseño y evolución.
Algunos de los lenguajes que han influido en Rust incluyen:

 C y C++: Rust hereda conceptos y prácticas de programación de bajo nivel de C y


C++, pero aborda muchas de las debilidades de estos lenguajes, como la gestión
manual de memoria y la falta de seguridad en tiempo de compilación.

 Haskell: Rust ha adoptado ideas de programación funcional de Haskell, como el


concepto de funciones puras y el uso de tipos de datos algebraicos para modelar
datos de manera más expresiva.

 ML y OCaml: Rust se ha inspirado en los lenguajes ML y OCaml en términos de su


sistema de tipos estáticos y su enfoque en la inferencia de tipos.

 Ada: Rust ha tomado prestadas algunas ideas de Ada en términos de seguridad y


robustez del lenguaje, especialmente en lo que respecta al manejo de errores y
excepciones.

Estas influencias han ayudado a Rust a establecerse como un lenguaje único con una
combinación de características y prácticas de programación que lo hacen adecuado para
una amplia gama de aplicaciones y casos de uso.

Asig
natura 6
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

1.6. Traducción del lenguaje de programación


La traducción del lenguaje de programación Rust se ha adaptado a varios idiomas en un
esfuerzo colaborativo destinado para hacer que el lenguaje sea más accesible y usable para
una audiencia global. Esta iniciativa abarca diversos aspectos del ecosistema de Rust,
incluyendo:

Documentación Oficial: La documentación oficial de Rust, que incluye el libro oficial de


Rust y otros recursos educativos, se ha traducido a varios idiomas, como español, francés,
alemán, chino, japonés, entre otros. Estas traducciones permiten a los desarrolladores de
todo el mundo acceder a información vital sobre Rust en su idioma nativo, facilitando el
aprendizaje y la adopción del lenguaje.

Sitio Web y Recursos en Línea: El sitio web oficial de Rust, así como otros recursos en
línea como blogs, tutoriales y guías de referencia, también se han traducido a varios
idiomas. Esto garantiza que los desarrolladores puedan acceder a información actualizada
sobre Rust y sus comunidades en su idioma preferido, lo que promueve una mayor
participación y colaboración en la comunidad global de Rust.

Comunidad y Foros: La comunidad de Rust es muy diversa y global, con miembros de


diferentes partes del mundo contribuyendo activamente al desarrollo y la promoción del
lenguaje. Muchos foros de discusión, grupos de usuarios y comunidades en línea
relacionadas con Rust ofrecen secciones o subforos dedicados a diferentes idiomas. Esto
permite a los usuarios interactuar, compartir conocimientos y obtener ayuda en su idioma
nativo, lo que fortalece la comunidad global de Rust.

Herramientas de Desarrollo: Además de la documentación y los recursos en línea,


algunas herramientas de desarrollo para Rust, como editores de código y entornos
integrados de desarrollo (IDE), también ofrecen soporte multilingüe. Esto significa que los
desarrolladores pueden trabajar con Rust en su idioma preferido, lo que mejora la
experiencia de desarrollo y facilita la adopción del lenguaje en diferentes regiones del
mundo.

1.7. Modelos

Asig
natura 7
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

En Rust, los modelos son estructuras conceptuales que definen cómo se organizan y
comportan los elementos del lenguaje. Estos modelos proporcionan una base teórica y
práctica para comprender cómo funciona el lenguaje y cómo se pueden utilizar sus
características de manera efectiva.

Estos modelos proporcionan una base sólida para comprender cómo funciona Rust y cómo
se pueden utilizar sus características de manera efectiva en el desarrollo de software. Al
comprender estos modelos, los desarrolladores pueden escribir código más seguro,
eficiente y mantenible en Rust. A continuación, se destacan algunos modelos importantes
en Rust:

Modelo de Propiedad y Préstamo: Este modelo es fundamental en Rust y define cómo se


gestionan los recursos de memoria. En Rust, cada valor tiene un único propietario en un
momento dado, y la propiedad puede transferirse o prestarse a otras partes del código. Esto
ayuda a prevenir problemas como fugas de memoria y corrupción de datos al garantizar que
los recursos se liberen correctamente cuando ya no sean necesarios.

Modelo de Concurrencia: Rust ofrece un modelo de concurrencia seguro que facilita la


escritura de código concurrente sin introducir errores como condiciones de carrera o
bloqueos. Este modelo se basa en el concepto de actores, donde los actores son unidades
de ejecución independientes que se comunican entre sí a través de canales. Al garantizar
que los datos compartidos estén protegidos mediante reglas de propiedad y préstamo, Rust
ayuda a evitar errores comunes en la programación concurrente.

Modelo de Tipos Estáticos: Rust es un lenguaje de tipos estáticos, lo que significa que el
tipo de cada variable debe ser conocido en tiempo de compilación. Este modelo permite al
compilador realizar verificaciones estáticas de tipos, lo que ayuda a prevenir errores de
programación y mejorar la seguridad del código.

Modelo de Expresiones y Patrones: En Rust, las expresiones y patrones se utilizan para


definir y manipular datos de manera concisa y expresiva. El modelo de expresiones y
patrones en Rust permite la coincidencia de patrones exhaustiva, lo que facilita la escritura
de código robusto y seguro.

Modelo de Módulos y Crates: Rust organiza el código en módulos y crates, lo que permite
una estructura modular y reutilizable en los proyectos de Rust. Este modelo fomenta las
buenas prácticas de diseño de software, como la separación de preocupaciones y la
reutilización de código, lo que facilita el mantenimiento y la escalabilidad de los proyectos de
Rust.

1.8. Paradigmas

Asig
natura 8
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

Los paradigmas de programación son enfoques fundamentales que guían la organización y


la estructura del código en un lenguaje de programación. Rust es un lenguaje versátil que
admite varios paradigmas de programación, lo que permite a los desarrolladores elegir el
enfoque que mejor se adapte a sus necesidades y preferencias. A continuación, se
describen los principales paradigmas de programación admitidos por Rust:

Programación Imperativa: La programación imperativa es un enfoque en el que se


describen los pasos específicos que debe seguir un programa para lograr un resultado
deseado. En Rust, los desarrolladores pueden escribir código imperativo utilizando
estructuras de control como bucles, condicionales y funciones.

Programación Orientada a Objetos (POO): Aunque Rust no es un lenguaje orientado a


objetos en el sentido tradicional, admite ciertos conceptos de la programación orientada a
objetos, como la encapsulación, el polimorfismo y la herencia. Los desarrolladores pueden
definir estructuras y métodos asociados para modelar objetos y comportamientos en Rust.

Programación Funcional: La programación funcional es un paradigma en el que los


programas se construyen utilizando funciones puras y evitando el estado mutable. En Rust,
los desarrolladores pueden escribir código funcional utilizando funciones de orden superior,
expresiones lambda y combinadores de datos.

Programación Genérica: Rust es conocido por su soporte para la programación genérica,


que permite escribir código que funciona de manera eficiente con tipos de datos de varios
tipos. Los desarrolladores pueden utilizar tipos genéricos y funciones genéricas para escribir
código reutilizable y flexible en Rust.

Programación Concurrente y Paralela: Rust tiene un fuerte soporte para la programación


concurrente y paralela, lo que permite a los desarrolladores escribir código que aproveche la
potencia de los sistemas multiproceso y multinúcleo. Los desarrolladores pueden utilizar
constructores como hilos y canales para crear programas concurrentes y paralelos en Rust.

Al admitir una variedad de paradigmas de programación, Rust proporciona a los


desarrolladores la flexibilidad necesaria para abordar una amplia gama de problemas y
escenarios de desarrollo. Al comprender y utilizar estos paradigmas de manera efectiva, los
desarrolladores pueden escribir código claro, modular y eficiente en Rust.

1.9. Aplicaciones y casos de éxito

Asig
natura 9
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

Rust ha ganado una considerable tracción en la industria del desarrollo de software y ha


sido adoptado con éxito en una variedad de aplicaciones y proyectos. A continuación, se
presentan algunos ejemplos destacados de aplicaciones y casos de éxito de Rust:

Servidores Web y Backend: Rust se ha utilizado con éxito en el desarrollo de servidores


web y backend de alto rendimiento. Empresas como Cloudflare han adoptado Rust para
construir sistemas de red confiables y escalables que manejan grandes volúmenes de
tráfico de manera eficiente.

Herramientas de Desarrollo de Software: Rust se ha convertido en una opción popular


para desarrollar herramientas de desarrollo de software, como compiladores, analizadores
estáticos y herramientas de gestión de paquetes. Ejemplos destacados incluyen el
compilador de Rust (rustc) y el administrador de paquetes Cargo.

Sistemas Operativos: Rust se ha utilizado en el desarrollo de sistemas operativos


modernos debido a su combinación de seguridad y rendimiento. Proyectos como Redox OS
exploran el uso de Rust para construir un sistema operativo completamente nuevo y seguro
desde cero.

Bases de Datos: Rust ha ganado tracción en el desarrollo de bases de datos y sistemas de


almacenamiento de datos debido a su seguridad y eficiencia. Ejemplos incluyen proyectos
como Sled, una base de datos de clave-valor en memoria, y TiKV, un almacenamiento
distribuido de clave-valor inspirado en Google's Bigtable.

Aplicaciones de Blockchain y Criptomoneda: Rust se ha utilizado en el desarrollo de


aplicaciones y protocolos de blockchain debido a su seguridad y rendimiento. Proyectos
como Parity Ethereum, una implementación de Ethereum en Rust, demuestran el potencial
de Rust en este espacio.

Aplicaciones de Sistema Embebido: Rust ha demostrado ser una opción viable para el
desarrollo de aplicaciones en sistemas embebidos y de IoT debido a su seguridad y bajo
consumo de recursos. Proyectos como Tock OS utilizan Rust para construir sistemas
operativos para microcontroladores y dispositivos embebidos.

Estos son solo algunos ejemplos de cómo Rust se ha utilizado con éxito en una variedad de
aplicaciones y casos de uso en la industria del desarrollo de software. Con su énfasis en la
seguridad, la concurrencia y el rendimiento, Rust continúa ganando popularidad y
demostrando su valía en una amplia gama de escenarios de desarrollo.

2. Sintaxis y Semántica

Asig
natura 10
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

2.1 Sintaxis
La sintaxis en Rust se caracteriza por su claridad y precisión, lo que facilita la escritura de
código legible y mantenible. Aquí se detallan algunos elementos destacados de la sintaxis
en Rust:

Declaración de Variables: Las variables se declaran utilizando la palabra clave let, seguida
del nombre de la variable y su tipo opcional, seguido de un signo igual y el valor asignado.

Funciones: Las funciones se definen con la palabra clave fn, seguida del nombre de la
función, parámetros entre paréntesis y el tipo de retorno opcional.

Estructuras de Control: Rust soporta estructuras de control como if, else if, else, match,
loop, while y for.

Tipos de Datos: Rust es fuertemente tipado y cuenta con tipos de datos como enteros,
flotantes, booleanos, caracteres, tuplas, arreglos, y tipos compuestos como estructuras y
enumeraciones.

2.2 Semántica

Asig
natura 11
UNIVERSIDAD DE TARAPACÁ
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA

La semántica en Rust está diseñada para proporcionar seguridad y confiabilidad en la


ejecución del programa. Aquí se resumen algunos aspectos clave de la semántica en Rust:

Propiedad de la Exclusión Mútua (Ownership): Rust utiliza un sistema de propiedad para


gestionar la asignación y liberación de memoria de manera segura, eliminando problemas
como las fugas de memoria y los punteros nulos.

Manejo de Errores: Rust ofrece un manejo de errores robusto a través de tipos de retorno y
la palabra clave Result, permitiendo gestionar posibles errores de manera efectiva.

Concurrencia y Paralelismo: Rust proporciona herramientas poderosas para la


concurrencia y el paralelismo, como el sistema de concurrencia basado en actores (async-
await) y el sistema de paralelismo basado en hilos seguros (std::thread).

Seguridad y Confiabilidad: La combinación de la propiedad de la exclusión mutua, el


manejo de errores y la ausencia de punteros nulos hace que Rust sea un lenguaje
altamente seguro y confiable, adecuado para aplicaciones críticas y de alto rendimiento

Fuente: https://goyox86.gitbooks.io/el-libro-de-rust/content/syntax-and-semantics.html

Asig
natura 12

También podría gustarte