Rust (llenguatge de programació)

De Viquipèdia
Salta a la navegació Salta a la cerca
Infotaula de llenguatge de programacióRust
Rust programming language black logo.svg
Rustc building paru with cargo screenshot.png
Tipusllenguatge de programació procedural, llenguatge de programació funcional, llenguatge de programació multiparadigma, llenguatge de programació imperatiu, llenguatge de programació de sistemes, programari lliure i de codi obert, compiled language (en) Tradueix i llenguatge de programació Modifica el valor a Wikidata
Data de creació7 juliol 2010 i 2006 Modifica el valor a Wikidata
DissenyGraydon Hoare Modifica el valor a Wikidata
DesenvolupadorMozilla, Graydon Hoare i Rust Foundation (en) Tradueix Modifica el valor a Wikidata
EpònimUredinal Modifica el valor a Wikidata
Paradigma de programaciócompiled language (en) Tradueix, programació funcional, computació concurrent, programació genèrica, llenguatge imperatiu i programació orientada a objectes Modifica el valor a Wikidata
Darrera versió estable1.52.1 () Modifica el valor a Wikidata
Llenguatge de programacióRust Modifica el valor a Wikidata
Influenciat perAlef, C++, C#, Cyclone, Erlang, Haskell, Limbo, Newsqueak, OCaml, Scheme, ML Estàndard i Swift Modifica el valor a Wikidata
Sistema operatiumultiplataforma, Linux, macOS, Microsoft Windows, FreeBSD, iOS, Android i WebAssembly Modifica el valor a Wikidata
Extensió dels fitxersrs i rlib Modifica el valor a Wikidata
Codi fontCodi font Modifica el valor a Wikidata
LlicènciaLlicència Apache, versió 2.0 i Llicència MIT Modifica el valor a Wikidata
Etiqueta d'Stack ExchangeEtiqueta Modifica el valor a Wikidata
Pàgina webWeb oficial, Web oficial, Web oficial, Web oficial, Web oficial, Web oficial, Web oficial, Web oficial i Web oficial Modifica el valor a Wikidata

Rust és un llenguatge de programació de sistemes[1] multi-paradigma estàtic. Està dissenyat amb garanties de seguretat, això ho aconsegueix gràcies a un seguit de regles que el compilador comprova amb el borrow checker, gràcies a aquestes garanties[2] es pot escriure codi segur i concurrent sense por.[3]

Igual que C++, no fa servir recollida de memòria brossa.

Rust és software de codi obert[4] amb doble llicència[5] (Apache License 2.0 i MIT).

A més de ser segur, també és molt ràpid, comparable amb C i C++.[6][7]

Rust ha estat el llenguatge de programació "més estimat" segons l'enquesta de Stack Overflow des del 2016.[8]

Història[modifica]

Rust va ser concebut per Graydon Hoare amb el suport de l'empresa Mozilla l'any 2006.[9][10][11] L'any 2019 va ser el primer any de pèrdues econòmiques per a la Fundació Mozilla, comportant l'abandó de molts dels seus projectes i el 2020 gran quantitat de treballadors foren acomiadats, entre ells, molts desenvolupadors de Rust.[12] El febrer de 2021 va nàixer la Rust Fundation entitat sense ànim de lucre però, que porta per lema "el bon programari és creat per persones felices i ben remunerades". Entre les companyies que donen suport econòmic a la Rust Fundation hi ha la pròpia Mozilla, Amazon Web Services, Google, Huawei o Microsoft.[13]

Característiques[modifica]

Seguretat en la gestió de memòria[modifica]

Rust està dissenyat per ser segur quant a la gestió de memòria, no permet valors nuls, punters que apunten a memòria retornada al sistema, data races.

  • Sintaxi similar a  C i C++.
  • Tipus i polimorfisme.

Aquest petit programa pinta la tira "Hello, world!" a la sortida estàndard:

fn main() {
    // El signe '!' afegit a un identificador indica crida a una macro
    println!("Hello, world!");
}

Operacions amb vectors (arrays) :

use std::mem;

// Aquesta és una funció sobre una subseqüència (ang: slice)

fn analyze_slice(slice: &[i32]) {
    println!("first element of the slice: {}", slice[0]);
    println!("the slice has {} elements", slice.len());
}

fn main() {
    // Vector de mida fixa; la signatura és supèrflua
    let xs: [i32; 5] = [1, 2, 3, 4, 5];
    // Tots els elements inicialitzats al mateix valor
    let ys: [i32; 500] = [0; 500];

    // L'indexació comença pel zero.
    println!("first element of the array: {}", xs[0]);
    println!("second element of the array: {}", xs[1]);

    // `len` retorna la mida del vector
    println!("array size: {}", xs.len());

    // Els vectors del tipus Array són allotjats a la pila
    println!("array occupies {} bytes", mem::size_of_val( &xs));

    // Els vectors (Array) poden ser prestats com a subseqüència

    println!("borrow the whole array as a slice");
    analyze_slice( &xs);

    // Les subseqüències (Slices) apunten a una secció d'un vector
    println!("borrow a section of the array as a slice");

    analyze_slice( &ys[1 .. 4]);

    // La indexació fora de marges dispara l'error 'pànic'
    println!("{}", xs[5]);
}


Exemple dels lifetimes en Rust:

// Declarem el lifetime 'a, qualsevol referencia continguda al struct 
// que utilitza aquest lifetime ha de viure fins que MyStruct es destrueix.
struct MyStruct<'a> {
    pub valor: &'a str,
}

fn main() {
    // Aquí 'a' té un lifetime 'static, aquest significa que viurà fins al final del programa.
    let a = "hello world";

    // Vàlid
    let b = MyStruct {
        valor: a
    };

    let c;
    {
        let d = String::from("hello world");
        c = &d;
    }

    // Error al compilar: El valor que c referencia 
    // ja s'ha destruït perquè ha sortit de la scope.
    let d = MyStruct {
        valor: c
    };
}

/*
Al compilar:

error[E0597]: `d` does not live long enough
  --> src/main.rs:19:13
   |
19 |         c = &d;
   |             ^^ borrowed value does not live long enough
20 |     }
   |     - `d` dropped here while still borrowed
...
23 |         valor: c
   |                - borrow later used here

error: aborting due to previous error; 2 warnings emitted

For more information about this error, try `rustc --explain E0597`.
error: could not compile `playground`
*/

Referències[modifica]

  1. «Foreword - The Rust Programming Language». [Consulta: 1r febrer 2021].
  2. «What is Ownership? - The Rust Programming Language». [Consulta: 1r febrer 2021].
  3. «Fearless Concurrency - The Rust Programming Language». [Consulta: 1r febrer 2021].
  4. «rust-lang/rust», 01-02-2021. [Consulta: 1r febrer 2021].
  5. «rust-lang/rust» (en anglès). [Consulta: 1r febrer 2021].
  6. «Rust vs C gcc - Which programs are fastest? | Computer Language Benchmarks Game». [Consulta: 1r febrer 2021].
  7. «Rust vs C++ g++ - Which programs are fastest? | Computer Language Benchmarks Game». [Consulta: 1r febrer 2021].
  8. «Stack Overflow Developer Survey 2020». [Consulta: 1r febrer 2021].
  9. «Rust Documentation · The Rust Programming Language» (en anglès). https://www.rust-lang.org.+[Consulta: 9 octubre 2017].
  10. «The Rust programming language» (en anglès). https://developer.mozilla.org.+[Consulta: 9 octubre 2017].
  11. «How Rust Compares to Other Programming Languages - The New Stack» (en anglès). The New Stack, 02-05-2016.
  12. Pomeyrol, J. «Mozilla se deshace de Servo, le pasa el muerto a The Linux Foundation» (en castellà). Muy Linux, 17-11-2020. [Consulta: 24 febrer 2021].
  13. Pomeyrol, J. «La Rust Foundation toma forma y recaba sus primeros patrocinadores» (en castellà). Muy Linux, 18-02-2021. [Consulta: 24 febrer 2021].