Rust

Allikas: Vikipeedia
Mine navigeerimisribale Mine otsikasti
Rust
Rust programming language black logo.svg
Rust logo
Faililaiend .rs, .rlib
Paradigma Funktsionaalne, imperatiivne, struktureeritud, üldine, mitmeparadigmaline
Väljalaskeaeg 7. juuli 2010
Looja Graydon Hoare
Arendaja The Rust Project
Viimane väljalase 1.52.1 (10. mai 2021) Muuda Vikiandmetes
Tüüpimine lineaarne, nominaalne, staatiline, tugev
Implementatsioonid Rust
Mõjutatud keeltest Alef,[1] C sharp,[1] C++,[1] Cyclone,[1][2] Erlang,[1] Haskell,[1] Limbo,[1] Newsqueak,[1] OCaml,[1] Ruby,[1] Scheme,[1] Standard ML,[1] Swift[1][3]
Mõjutanud keeli Crystal, Elm,[4] Idris,[5] Spark,[6] Swift[7]
OS Linux, macOS, Windows, FreeBSD, OpenBSD, Redox, Android, iOS[8]
Litsents MIT või Apache 2.0[9]
Veebileht www.rust-lang.org

Rust on mitmeparadigmaline süsteemi programmeerimiskeel[10], mis keskendub peamiselt turvalisusele, eriti turvalisele samaaegsusele.[11][12] Rust on süntaksi poolest sarnane C++ga[13], kuid on disainitud, et tagada parem mälu turvalisus hoides kõrget sooritustaset.

Algselt oli Rust disainitud Graydon Hoare'i poolt Mozilla uurimisasutuses, kaasa aitasid ka Dave Herman, Brendan Eich ja teised.[14][15] Disainerid arendasid keelt samal ajal kui nad kirjutasid koodi Servo paigutuse või brauserimootori[16] ja Rust kompileerija jaoks.

Rust on alates 2016. aastast olnud igal aastal Stack Overflow arendajate küsitluses olnud "kõige rohkem armastatud programmeerimiskeel".[17][18][19][20]

Disain[muuda | muuda lähteteksti]

Rust on ette nähtud väga tihedalt koos töötavate ja väga turvaliste süsteemide[21] jaoks ning suurte programmide loomiseks.

Süntaks[muuda | muuda lähteteksti]

Rusti süntaks on sarnane keeltega C ja C++, kus koodiblokid on eraldatud loogeliste sulgude ja käsuvoo märksõnadega nagu näiteks if, else, while ja for.Siiski pole kõik C ja C++ märksõnad rakendatud ning mõned Rust funktsioonid (nagu näiteks match mustrite sobitamiseks) näivad võõratena nendele, kes on neid keeli õppinud. Vaatamata Rusti pealiskaudsele sarnasusele C ja C++ga on Rusti süntaks sügavamas mõistes sarnane ML perekonda kuuluvate keeltega ja Haskell keelega. Peaaegu iga osa funktsioonist on väljend[22], isegi käsuvoo operaator. Näiteks tavaline if lause toimub C keele kolmepoolses tingimuslikus operaatoris. Funktsioon ei pea lõppema return väljendiga, mis juhul loob viimane väljend funktsioonis tagastusväärtuse kui semikoolon on ära jäetud.

Mälu ohutus[muuda | muuda lähteteksti]

Süsteem on disainitud olema ohutu mälule ning ei luba kasutada null viitajaid, rippuvaid viitajaid, ega andmete võidujooksu ohutus koodis.[23][24][25][26] Andmete väärtuseid võib lähtestada vaid läbi kindlate blankettide, kus kõikide sisendid peavad olema juba lähtestatud.[27]

Ajalugu[muuda | muuda lähteteksti]

Keel kasvas välja Graydon Hoare'i 2006. aastal alguse saanud isiklikust projektist.[12] Mozilla alustas projekti sponsoreerimist 2009. aastal[12] ning kuulutas selle välja aastal 2010.[28][29] Samal aastal liikus töö algsest kompileerijast (kirjutatud OCaml keeles) iseseisvale kompileerijale, mis oli kirjutatud Rust keeles.[30]

Kõige esimene nummerdatud alfaeelne versioon anti välja 2012 aasta jaanuaris.[31][32] Rust 1.0, kõige esimene stabiilne versioon, anti välja 15 mai 2015. Pärast seda antakse välja uus stabiilne versioon iga kuue nädala tagant.[33]

Näited[muuda | muuda lähteteksti]

Tere maailm[muuda | muuda lähteteksti]

Lihtne "Tere maailm!" programm kirjutatud Rust keeles.

fn main() {
    println!("Tere maailm!");
}

Faktoriaalne funktsioon[muuda | muuda lähteteksti]

Rekursiivne[muuda | muuda lähteteksti]

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

Iteratiivne[muuda | muuda lähteteksti]

fn factorial(i: u64) -> u64 {
    let mut acc = 1;
    for num in 2..=i {
        acc *= num;
    }
    acc
}

Iteraatoreid kasutades[muuda | muuda lähteteksti]

fn factorial(i: u64) -> u64 {
    (1..=i).product()
}

Viited[muuda | muuda lähteteksti]

  1. 1,00 1,01 1,02 1,03 1,04 1,05 1,06 1,07 1,08 1,09 1,10 1,11 1,12 "The Rust Reference: Appendix: Influences". Vaadatud 6. detsember 2019. "Rust is not a particularly original language, with design elements coming from a wide range of sources. Some of these are listed below (including elements that have since been removed): SML, OCaml [...] C++ [...] ML Kit, Cyclone [...] Haskell [...] Newsqueak, Alef, Limbo [...] Erlang [...] Ruby [...] Swift [...] Scheme [...] C# [...]" 
  2. "Note Research: Type System". 1. veebruar 2005. Vaadatud 6. detsember 2019. "Papers that have had more or less influence on Rust, or which one might want to consult for inspiration or to understand Rust's background. [...] Region based memory management in Cyclone [...] Safe memory management in Cyclone" 
  3. "RFC for 'if let' expression". Vaadatud 6. detsember 2019. 
  4. "Command Optimizations?". 26. juuni 2014. Vaadatud 6. detsember 2019. "I just added the outline of a Result library that lets you use richer error messages. It's like Either except the names are more helpful. The names are inspired by Rust's Result library." 
  5. "Idris – Uniqueness Types". Vaadatud 6. detsember 2019. 
  6. Jaloyan, Georges-Axel (19. oktoober 2017). "Safe Pointers in SPARK 2014". Vaadatud 6. detsember 2019. 
  7. Lattner, Chris. "Chris Lattner's Homepage". Nondot.org. Vaadatud 6. detsember 2019. 
  8. "Building and Deploying a Rust library on iOS". 6. september 2017. Vaadatud 6. detsember 2019. 
  9. "Rust is a systems programming language". Rust-lang.org. Vaadatud 6. september 2017. 
  10. Hoare, Graydon (28. detsember 2016). "Rust is mostly safety". Graydon2. Dreamwidth Studios. Vaadatud 6. detsember 2019. 
  11. 12,0 12,1 12,2 "FAQ – The Rust Project". Rust-lang.org. Vaadatud 6. september 2017. 
  12. "Rust vs. C++ Comparison". Vaadatud 6. detsember 2019. "Rust is syntactically similar to C++, but it provides increased speed and better memory safety" 
  13. Noel (8. juuli 2010). "The Rust Language". Lambda the Ultimate. Vaadatud 6. detsember 2019. 
  14. "Contributors to rust-lang/rust". GitHub. Vaadatud 6. september 2017. 
  15. Bright, Peter (3. aprill 2012). "Samsung teams up with Mozilla to build browser engine for multicore machines". Ars Technica. Vaadatud 6. detsember 2019. 
  16. "Stack Overflow Developer Survey 2016 Results". Stack Overflow. Vaadatud 6. detsember 2019. 
  17. "Stack Overflow Developer Survey 2017". Stack Overflow. Vaadatud 6. detsember 2019. 
  18. "Stack Overflow Developer Survey 2018". Stack Overflow. Vaadatud 6. detsember 2019. 
  19. "Stack Overflow Developer Survey 2019". Stack Overflow. Vaadatud 6. detsember 2019. 
  20. Avram, Abel (3. august 2012). "Interview on Rust, a Systems Programming Language Developed by Mozilla". InfoQ. Vaadatud 6. detsember 2019. "GH: A lot of obvious good ideas, known and loved in other languages, haven't made it into widely used systems languages ... There were a lot of good competitors in the late 1970s and early 1980s in that space, and I wanted to revive some of their ideas and give them another go, on the theory that circumstances have changed: the internet is highly concurrent and highly security-conscious, so the design-tradeoffs that always favor C and C++ (for example) have been shifting." 
  21. "rust/src/grammar/parser-lalr.y". 23. mai 2017. Vaadatud 6. detsember 2019. 
  22. Rosenblatt, Seth (3. aprill 2013). "Samsung joins Mozilla's quest for Rust". Vaadatud 6. detsember 2019. "[Brendan Eich] noted that every year browsers fall victim to hacking in the annual Pwn2Own contest at the CanSecWest conference. "There's no free memory reads" in Rust, he said, but there are in C++. Those problems "lead to a lot of browser vulnerabilities" and would be solved by Rust, which is a self-compiling language." 
  23. Brown, Neil (17. aprill 2013). "A taste of Rust". Vaadatud 6. detsember 2019. "... Other more complex data structures could clearly be implemented to allow greater levels of sharing, while making sure the interface is composed only of owned and managed references, and thus is safe from unplanned concurrent access and from dangling pointer errors." 
  24. "'unsafe' – The Rust Programming Language". 
  25. "Data Races and Race Conditions". 
  26. "The Rust Language FAQ". static.rust-lang.org. 2015. Originaali arhiivikoopia seisuga 20. aprill 2015. Vaadatud 6. detsember 2019. 
  27. "Future Tense". 29. aprill 2011. Vaadatud 6. detsember 2019. "At Mozilla Summit 2010, we launched Rust, a new programming language motivated by safety and concurrency for parallel hardware, the “manycore” future which is upon us." 
  28. Hoare, Graydon (7. juuli 2010). "Project Servo" (pdf). Mozilla Annual Summit 2010. Whistler, Canada. Vaadatud 6. detsember 2019. 
  29. Hoare, Graydon (2. oktoober 2010). "Rust Progress". Originaali arhiivikoopia seisuga 6. detsember 2019. Vaadatud 6. detsember 2019. 
  30. catamorphism (20. jaanuar 2012). "Mozilla and the Rust community release Rust 0.1 (a strongly-typed systems programming language with a focus on memory safety and concurrency)". Vaadatud 6. detsember 2019. 
  31. The Rust Core Team (15. mai 2015). "Announcing Rust 1.0". Vaadatud 6. detsember 2019. 
  32. "Scheduling the Trains". Vaadatud 6. detsember 2019.