Rust (programovací jazyk)

Rust
Paradigma multiparadigmatický: objektově orientovaný, aspektově orientovaný, imperativní, funkcionální, generický, paralelní
Vznik 2006
Vývojář Graydon Hoare,
Mozilla (od roku 2010)
Rust Foundation (od roku 2015)[1]
Poslední verze 1.27.0[2] (11. března 2024)
Poslední nestabilní verze 1.76.0[3][4] (8. února 2024)
Typová kontrola statická, silná, nominativní, inferentní
Hlavní implementace rustc
Ovlivněn jazyky C++, C#, Haskell, OCaml, Scheme
Ovlivnil jazyky C# 7, Elm, Idris, Swift
OS Linux, FreeBSD, Windows NT, macOS
Licence MIT a Apache verze 2
Web The Rust Homepage
The Rust Blog
Přípona souboru .rs, .rlib

Rust je svobodný víceúčelový, multiparadigmatický, kompilovaný programovací jazyk, vyvinutý organizací Mozilla Research.[5] Je navržen jako „bezpečný, paralelní, praktický programovací jazyk“,[6][7] podporující čistě funkcionální, imperativně-procedurální, strukturované a objektově orientované programovací styly.

Tento programovací jazyk pochází z osobního projektu zaměstnance Mozilly jménem Graydon Hoare. Mozilla začala sponzorovat tento projekt v roce 2009[8] a zveřejnila ho v roce 2010.[9] Ten samý rok se práce posunuly z počátečního překladače (naprogramovaného v OCaml) do sebe-hostujícího překladače napsaného v Rustu.[10] Tento, známý jako rustc, úspěšně přeložil sám sebe v roce 2011.[11]rustc používá LLVM jako svůj back-end.[12]

Prvně číslovaná před alfa vydání překladače Rust přišla v lednu 2012.[13] Rust 1.0, první stabilní verze, byla vydána 15. května 2015.[14]

Třebaže byl vývoj sponzorován Mozillou, jde od počátku o projekt otevřeného software. Design tohoto jazyka byl vyladěn na základě zkušeností z programování jádra webového prohlížeče Servo[15] a kompilátoru jazyka Rust. Velké množství příspěvků k designu pochází od členů komunity.[16]

Design

Cílem tvůrců Rustu je vytvořit jazyk vhodný pro vytváření vysoce paralelních a vysoce bezpečných systémů.[17] Tento záměr byl základem pro návrh souboru vlastností, s důrazem na bezpečnost, kontrolu rozvržení paměti, a paralelizmu. Výkon Rustu je srovnatelný s výkonem C++.[18][19]

Syntaxe Rustu je podobná syntaxi C a C++, s bloky kódu ohraničenými složenými závorkami, a řídícími klíčovými slovy programu jako if, else, while, a for. Ne všechna klíčová slova jazyků C a C++ jsou přítomna, zatímco některá další (jako například match pro vícenásobné skoky, podobné switch v jiných jazycích) byla zaměněna nebo přidána. Přes syntaktickou podobnost je Rust sémanticky velmi odlišný od C a C++.

Tento systém je navržen jako paměťově bezpečný, nepovolující ukazatele NULL a znemožňující neplatné ukazatele.[20][21] Datové hodnoty mohou být inicializovány pouze několika pevnými způsoby, avšak všechny tyto způsoby vyžadují inicializovaný vstup.[22] Životní cyklus ukazatelů a jejich neměnnost umožňuje kompilátoru předejít mnohým typům chyb, které jsou možné v C++, a to i při použití jeho inteligentního ukazatele.

Tento typový systém podporuje typ jménem trait, který je podobný typu třída. Trait je přímo inspirován jazykem Haskell. Jedná se o nástroj pro ad-hoc polymorfismus, čehož bylo dosaženo zákazem psaní deklarace proměnných. Další vlastnosti z jazyka Haskell, jako jsou higher-kinded polymorfismus (parametrický a podtypový polymorfismus), zatím nejsou podporovány.

Rust nepoužívá automatickou správu dat (garbage collection), jako je použita na platformách Java a .NET (mj. jazyky Java a C#), přesto je však jeho správa paměti bezpečná, snadná a nevyžadující přerušování běhu programu a sledování odkazů.[23]

Rust umožňuje odvození typu ('type-inference') pro proměnné deklarované použitím klíčového slova let. Tyto proměnné, původně inicializované s cílem určit jejich typ, nevyžadují zachovat původně přidělenu hodnotu. Pokud kompilátor nenalezne na příslušné větvi proměnné přesnou hodnotu, kompilace končí chybou.

Funkce mohou používat generické parametry, ale ty musí být vázány traity. Neexistuje způsob, jak obejít signatury typů a přitom ve funkcích a operátorech využívat generické proměnné.[24]

Objektový systém v Rustu je založen okolo implementací traitů a struktur. Jejich použití nahrazuje roli tříd v jiných (objektových) jazycích, a je definována klíčovým slovem impl. Dědičnost a polymorfizmus jsou poskytovány traity; umožňují je metody, které jsou definovány v mixinech k implementaci. Strukturované typy jsou použity pro definici členských proměnných. Implementace a traity nemohou definovat členské proměnné samy, a pouze traity mohou poskytovat dědičnost, aby nenastal diamantový problém jazyka C++.

Projekty v jazyce Rust

Operační systémy v Rustu

Windows

Mezi nejdůležitější projekty naprogramované v jazyce Rust nově patří operační systém Microsoft Windows, jehož části začala firma Microsoft přepisovat do Rustu, zejména z důvodu větší paměťové bezpečnosti výsledného kódu. Dalším pozitivním důsledkem tohoto přepisování do Rustu je větší rychlost běhu výsledného kódu. Parser fontů napsaný v Rustu zrychlil oproti verzi naprogramované v jazyce C++ o 5 až 15 procent. Rust se také dostal do jádra tohoto systému. Některé knihovny Windows naprogramované v Rustu byly začleněny do programu Windows Insider, a po odladění budou distribuovány uživatelům Windows.[25][26] Dne 10. května 2023 vyšla zpráva, že kód generovaný za pomoci jazyka Rust je obsažen v systému Windows, v programu Windows Insider.[27][28]

Linux

Počínaje verzí jádra 6.1[29] a dále ve verzi 6.3[30] a 6.4[31]operačního systému Linux, je zaváděna podpora používání jazyka Rust ve vývoji Linuxu.[32][33]

FreeBSD

Dne 23. ledna 2024 vyšla zpráva o počínající diskuzi o použití programovacího jazyka Rust pro vývoj unixového operačního systému FreeBSD, což by přineslo pozitiva jazyka Rust do vývoje FreeBSD.[34] Problém je zejména delší doba kompilace systému, ale na tom se také pracuje.[35]

KataOS

Dne 14. října 2022 Google oznámil vývoj operačního systému KataOS a jeho referenční implementace Sparrow na základě mikrojádra seL4. KataOS je vyvíjený v programovacím jazyce Rust a je nadstavbou mikrojádra seL4.[36][37][38]

Knihovny v Rustu

Grafická knihovna ZLUDA, umožňuje spouštět na Radeonech aplikace napsané pro CUDA. Její autor, Andrzej Janik, ji vyvinul nejdříve pro grafickou platformu Intel a později, v roce 2022, pro grafické karty AMD Radeon za použití programovacího jazyka Rust. Práce na knihovně pro AMD byla ukončena, ale knihovna byla uvolněna pod duální licencí, a to Apache 2.0 a MIT.[39]

Utility v Rustu

Dne 26. ledna 2024 vyšli nástroje Uutils verze 0.0.24, které jsou náhradou za GNU Coreutils, ale v Rustu. Tyto nástroje se mimo jiné snaží vylepšit kompatibilitu s GNU Coreutils.[40]

Webové prohlížeče v Rustu

Programovací jazyk Rust je s výhodou využíván i při vývoji internetových prohlížečů, kde pomáhá jeho bezpečnost a efektivita. Firma Google ohlásila dne 12. ledna 2023, že její webový prohlížeče Google Chrome a Chromium, budou podporovat začleňování kódu v jazyce Rust.[41][42][43][44]

Další projekt v programovacím jazyce Rust patří vykreslovací jádro pro webové prohlížeče Servo, které vyvinula Mozilla a Samsung. V roce 2014 již zvládl test Acid2 a byl výrazně rychlejší, než jádro Firefoxu napsané v C++ (Gecko).[45][46] Jeho vývoj nadále pokračuje.[47][48]

Existuje ještě několik dalších projektů napsaných v jazyce Rust. Například parser multimédií prohlížeče Firefox je také napsán v programovacím jazyce Rust.[49] Dále také existuje unixový operační systém – Redox.[50][51]

Související projekty

Existuje překladač (preprocesor) podporovaný Mozillou, který překládá zdrojový kód z jazyka C do jazyka Rust. Řeší mj. překlad konstrukcí jazyka C s příkazem goto. Je napsán v Haskellu.[52][53][54]

Ukázka kódu

Ukázka Hello world

fn main() {
    println!("Hello, world");
}

Ukázka traitů

trait MaObsah {
    fn obsah(&self) -> f64;
}

struct Kruh {
    x: f64,
    y: f64,
    polomer: f64,
}

impl MaObsah for Kruh {
    fn obsah(&self) -> f64 {
        std::f64::consts::PI * (self.polomer * self.polomer)
    }
}

struct Ctverec {
    x: f64,
    y: f64,
    strana: f64,
}

impl MaObsah for Ctverec {
    fn obsah(&self) -> f64 {
        self.strana * self.strana
    }
}

fn vypis_obsah(tvar: impl MaObsah) {
    println!("Tento utvar ma obsah {}", tvar.obsah());
}

fn main() {
    let c = Kruh {
        x: 0.0f64,
        y: 0.0f64,
        polomer: 1.0f64,
    };

    let s = Ctverec {
        x: 0.0f64,
        y: 0.0f64,
        strana: 1.0f64,
    };

    vypis_obsah(c);
    vypis_obsah(s);
}

Odkazy

Reference

V tomto článku byl použit překlad textu z článku Rust (programming language) na anglické Wikipedii.

  1. Rust Foundation. foundation.rust-lang.org [online]. 2021-02-08 [cit. 2023-09-19]. Dostupné online. (anglicky) 
  2. Announcing Rustup 1.27.0 | Rust Blog. blog.rust-lang.org [online]. [cit. 2024-03-11]. Dostupné online. (anglicky) 
  3. Rust 1.76.0. www.abclinuxu.cz [online]. [cit. 2024-02-10]. Dostupné online. 
  4. Announcing Rust 1.76.0 | Rust Blog. blog.rust-lang.org [online]. [cit. 2024-02-10]. Dostupné online. (anglicky) 
  5. Noel. The Rust Language [online]. Lambda the Ultimate, 2010-07-08 [cit. 2010-10-30]. Dostupné online. (anglicky) 
  6. The Rust Programming Language [online]. [cit. 2012-10-21]. Dostupné online. (anglicky) 
  7. Doc language FAQ [online]. [cit. 2012-10-21]. Dostupné online. (anglicky) 
  8. Project FAQ [online]. 2010-09-14 [cit. 2012-01-11]. Dostupné online. (anglicky) 
  9. Future Tense [online]. 2011-04-29 [cit. 2012-02-06]. Dostupné online. (anglicky) 
  10. HOARE, Graydon. Rust Progress [online]. 2010-10-02 [cit. 2010-10-30]. Dostupné v archivu pořízeném dne 2014-08-15. (anglicky) 
  11. HOARE, Graydon. [rust-dev] stage1/rustc builds [online]. 2011-04-20 [cit. 2011-04-20]. Dostupné online. (anglicky) 
  12. Introducing MIR - The Rust Programming Language Blog. blog.rust-lang.org [online]. [cit. 2016-06-19]. Dostupné online. 
  13. catamorphism. Mozilla and the Rust community release Rust 0.1 (a strongly-typed systems programming language with a focus on memory safety and concurrency) [online]. 2012-01-20 [cit. 2012-02-06]. Dostupné online. (anglicky) 
  14. Announcing Rust 1.0 - The Rust Programming Language Blog [online]. The Rust Core Team [cit. 2016-01-21]. Dostupné online. (anglicky) 
  15. Peter Bright. Samsung teams up with Mozilla to build browser engine for multicore machines [online]. 2013-04-03 [cit. 2013-04-04]. Dostupné online. (anglicky) 
  16. Rust Contributors [online]. Dostupné online. (anglicky) 
  17. AVRAM, Abel. Interview on Rust, a Systems Programming Language Developed by Mozilla [online]. InfoQ, 2012-08-03 [cit. 2013-08-17]. Dostupné online. (anglicky) 
  18. WALTON, Patrick. C++ Design Goals in the Context of Rust [online]. 2010-12-05 [cit. 2011-01-21]. Dostupné online. (anglicky) 
  19. How Fast Is Rust? [online]. [cit. 2016-02-08]. Dostupné v archivu pořízeném dne 2016-02-23. (anglicky) 
  20. ROSENBLATT, Seth. Samsung joins Mozilla's quest for Rust [online]. 2013-04-03 [cit. 2013-04-05]. Dostupné online. (anglicky) 
  21. BROWN, Neil. A taste of Rust [online]. 2013-04-17 [cit. 2013-04-25]. Dostupné online. (anglicky) 
  22. Doc language FAQ [online]. 2010-09-14 [cit. 2012-01-11]. Dostupné online. (anglicky) 
  23. FORSYTH, Jared. Rust vs Go [online]. [cit. 2016-09-06]. Dostupné online. 
  24. WALTON, Patrick. Rust Features I: Type Inference [online]. 2010-10-01 [cit. 2011-01-21]. Dostupné online. (anglicky) 
  25. DSL.sk - Microsoft začal prepisovať časti Windows v Ruste, chce zvýšiť bezpečnosť. DSL.sk [online]. [cit. 2023-04-29]. Dostupné online. 
  26. CALCULON. Microsoft přepisuje části Windows do Rustu. Root.cz [online]. [cit. 2023-04-27]. Dostupné online. 
  27. DSL.sk - V jadre Windows prvý kód v Ruste. DSL.sk [online]. [cit. 2023-05-12]. Dostupné online. 
  28. https://twitter.com/markrussinovich/status/1656416376125538304. Twitter [online]. [cit. 2023-05-12]. Dostupné online. 
  29. Vydanie jadra Linux 6.1 - Linux E X P R E S. www.linuxexpres.cz [online]. [cit. 2023-04-27]. Dostupné online. 
  30. Novinky v jadre Linux 6.3 - Linux E X P R E S. www.linuxexpres.cz [online]. [cit. 2023-04-27]. Dostupné online. 
  31. Novinky v jadre Linux 6.4 - Linux E X P R E S. www.linuxexpres.cz [online]. [cit. 2024-02-10]. Dostupné online. 
  32. KLOKAN. Podpora jazyka Rust je začleněna do linuxového jádra. Root.cz [online]. [cit. 2022-10-05]. Dostupné online. 
  33. The Initial Rust Infrastructure Has Been Merged Into Linux 6.1. www.phoronix.com [online]. [cit. 2022-10-05]. Dostupné online. (anglicky) 
  34. JEŽEK, David. Vývojáři FreeBSD diskutují zavedení jazyka Rust. Root.cz [online]. [cit. 2024-01-24]. Dostupné online. 
  35. Faster compilation with the parallel front-end in nightly | Rust Blog. blog.rust-lang.org [online]. [cit. 2024-01-24]. Dostupné online. (anglicky) 
  36. ZATLOUKAL, Filip. Debian 14 bude „Forky“, Google oznámil nový operační systém KataOS. Root.cz [online]. [cit. 2022-10-17]. Dostupné online. 
  37. Google oznámil vývoj operačního systému KataOS. www.abclinuxu.cz [online]. [cit. 2022-10-16]. Dostupné online. 
  38. Announcing KataOS and Sparrow [online]. [cit. 2022-10-16]. Dostupné online. 
  39. KRČMÁŘ, Petr. ZLUDA umožňuje na Radeonech provozovat aplikace napsané pro CUDA. Root.cz [online]. [cit. 2024-02-13]. Dostupné online. 
  40. FIKAR, Jan. Uutils 0.0.24 nyní podporují sparc64, OpenBSD a Redox. Root.cz [online]. [cit. 2024-01-26]. Dostupné online. 
  41. KRČMÁŘ, Petr. Chromium bude podporovat začleňování kódu v jazyce Rust. Root.cz [online]. [cit. 2023-01-13]. Dostupné online. 
  42. Supporting the Use of Rust in the Chromium Project [online]. [cit. 2023-01-13]. Dostupné online. (anglicky) 
  43. V Chromiu/Chrome přibude podpora knihoven třetích stran napsaných v Rustu. www.abclinuxu.cz [online]. [cit. 2023-01-13]. Dostupné online. 
  44. DSL.sk - Chrome začne byť programovaný v Ruste. DSL.sk [online]. [cit. 2023-01-13]. Dostupné online. 
  45. STANKE, Michal. Strategický plán na rok 2016 a dále. http://www.mozilla.cz/ [online]. 2016-01-15 [cit. 2016-02-22]. Dostupné online. 
  46. LARABEL, Michael. Mozilla's Servo Engine Is Crazy Fast Compared To Gecko. http://www.phoronix.com [online]. 2014-11-09 [cit. 2016-02-22]. Dostupné online. (anglicky) 
  47. JEŽEK, David. Mozilla předala projekt webového enginu Servo organizaci The Linux Foundation. Root.cz [online]. [cit. 2023-04-27]. Dostupné online. 
  48. DEVELOPERS, The Servo Project. Servo, the parallel browser engine. Servo [online]. [cit. 2023-04-27]. Dostupné online. (anglicky) 
  49. DSL.sk - Vydaný Firefox 48 s dôležitými novinkami. DSL.sk. Dostupné online [cit. 2016-10-22]. 
  50. LARABEL, Michael. Redox: A Rust-Written, Microkernel Open-Source OS. https://www.phoronix.com. Dostupné online [cit. 2016-07-28]. (anglicky) 
  51. Redox - Your Next(Gen) OS - Redox - Your Next(Gen) OS. www.redox-os.org [online]. [cit. 2022-01-22]. Dostupné online. 
  52. FIKAR, Jan. Corrode automaticky "zrezaví" kód z C do Rust. Root.cz [online]. [cit. 2024-03-11]. Dostupné online. 
  53. jameysharp/corrode. GitHub [online]. [cit. 2016-11-11]. Dostupné online. 
  54. Corrode update: support from Mozilla, and new features. jamey.thesharps.us [online]. [cit. 2016-11-11]. Dostupné online. 

Externí odkazy

Zdroj