Rust (programifo-linguo)

Rust esas programifo-linguo kompilata, di generala uzo e multaparadigmala (malgre ke ol ne suportas la traiti di ca paradigmi en lua totaleso) qua developesas da Fonduro Rust. Ol esas multaparadigmala programifo-linguo qua suportas pura funcionala, procedurala, imperativala e objekt-orientizita programifo.
Segun la politiko di Mozilla,[1] Rust developesas komplete aperte e serchas la opiniono e kontributo dil komunitato. La desegno dil linguo perfektigesis per la experienci en la developo dil navigilo-motoro Servo,[2] e la propra kompililo di Rust. Malgre ke ol developesas e patrocinatesas da Mozilla e Samsung, ol esas komunal projeto. Granda parto dil kontributi venas de la membri dil komunitato.[3]
En 2020 ol esas un ek la maxim uzata programifo-lingui por laborar kun kriptovaluti e krear nodi por minar kripto-aktivi.[4] En 2022, Rust divenis la triesma programifo-linguo uzata en la kerno di Linux, pos C e asemblilo.[5] Rust priorigas la sekureso, la fidebleso, la alta performo e la efikanta uzo di resursi, quo facas ol kreskante adoptata en feldi quale industriala automatigo, automobila industrio, aerospacala industrio e developo di kritika sistemi.[6]
Deskripto
[redaktar | redaktar fonto]La skopo di Rust esas esar bona linguo por la kreado di granda programi dil kliento-flanko e servilo-flanko qui exekutesas en Interreto. To duktis a aro di traiti kun emfazo ye la sekureso, la kontrolo di memoro-distributo e la konkurenteso. On expektas ke la performo di sekura kodexo esos plu lenta kam C++, se la performo esas la sola konsidero, ma se on komparas ol kun C++-kodexo facita por prenar precaucioni komparebla a ti di Rust, ca lasta povas esar mem plu rapida.[7]
La sintaxo di Rust esas simila a ta di C e C++, kun kodexo-bloki limitizita per kuniganta parentezi e fluo-kontrolo-strukturi quale if, else, do, while e for. Ne omna strukturi di C e C++ esas prezenta; adicione, altri (exemple la klefovorto match por plurdirekcionala bifurko) esos min familiara por programisti qui venas de ca lingui.
La sistemo esas desegnita por havar sekura memoro-aceso, e ne permisas nula pointeri o pendanta pointeri.[8][9] La valori di datumi povas inicializesar nur per fixa aro di formi, qui postulas ke lia eniri ja esez inicializita.[10]
La tipo-sistemo suportas mekanismo simila a la tipi-interfacii, nomizita "traiti", inspirita direte da la linguo Haskell. To esas faciligo por polimorfismo qua suportas diversa tipi di argumenti (ad-hoc polimorfismo), atingita per la adjunto di restrikti por skribar variablo-deklari. Altra traiti di Haskell, quale la diversa-tipa polimorfismo (higher-kinded), ne esas suportata.
Rust havas tipo-infero, por la variabili deklarita per la klefovorto let. Tala variabili ne bezonas esar inicializita kun asignita valoro por determinar lia tipo. Ye kompilo-tempo ol produktas eroro se irga kodexo-brancho falas asignar valoro a la variablo.[11] La funcioni povas recevar generika parametri, ma li devas esar exprese limitizita per la traiti; ne esas maniero lasar exter tipo-deklari sen cesar uzar la metodi ed operanti dil parametri.
La konkurenteso esas suportata per simpla taski, simila a ti trovata en Erlang e altra lingui bazita sur aktori. En tala sistemi, la taski komunikas per la paso di mesaji, vice direktar partigar la datumi. Por motivi di performo, esas posibla sendar datumi sen kopiar, uzante unika buxi. La unika buxi esas la garantio havar un sola posedanto, e povas esar liberigita da la sendanta tasko por uzo da la recevanto.
La objeto-sistemo di Rust bazesas sur realigi, traiti e strukturala tipi. La realigi plenumas funciono simila a ta di la klasi en altra lingui, e definesas per la klefovorto impl. Heredo e polimorfismo provizesas da la traiti, qui permisas ke la metodi definesez e mixeskez en la realigi. La strukturala tipi uzesas por definir la feldi. Realigi e traiti ne povas definir propra feldi, e nur la traiti provizas heredo, por evitar la diamanto-problemo di C++.
Historio
[redaktar | redaktar fonto]
La linguo naskis de personala projeto komencita en 2006 da la employato di Mozilla, Graydon Hoare,[12] qua afirmis ke la projeto posible recevis sua nomo de la familio di rusto-fungi.[13] Mozilla komencis patrocinar la projeto en 2009[12] e anuncis ol en 2010.[14][15] La sama yaro, la laboro transiris del unesma kompililo (skribita en OCaml) al self-hostanta kompililo skribita en Rust.[16] Nomizita rustc, ol kompilesis sucesoze en 2011.[17] rustc uzas LLVM kom sua back end.
La unesma pre-alfa numerizita versiono dil kompililo di Rust produktesis en januaro 2012.[18] Rust 1.0, la unesma stabila versiono, publikigesis ye la 15ma di mayo 2015.[19][20] Pos 1.0, la stabila versioni publikigesas singla sis semani, dum ke la nova funcioni developesas en la diala versioni (en l'Angla, nightly) e pose probesas per alfa e beta versioni qui duras sis semani.[21]
Kun la konvencionala statika skribado, ante la versiono 0.4, Rust anke suportis typestates. La typestate-sistemo modelis aserti ante e pos la programo-deklari, per uzado di speciala check-deklaro. La diskrepanti povas deskovresar ye kompilo-tempo, vice kande programo exekutesas, quale povus esar la kazo di aserti en C o C++-kodexo. La typestate-koncepto ne esis exkluziva di Rust, nam ol introduktesis unesme en la linguo NIL.[22] La typestates eliminesis pro ke en la praktiko li uzesis poka, malgre ke la sama funciono ankore povas esar atingita per markizo-modelo.[23]
La stilo dil objeto-sistemo chanjesis konsiderinde en la versioni 0.2, 0.3 e 0.4 di Rust. La versiono 0.2 introduktis klasi unesmafoye, e la versiono 0.3 adjuntis plura traiti, inkluzante destruktanti e polimorfismo per uzado di interfacii. En Rust 0.4, traiti adjuntesis kom moyeno por provizar heredo; la interfacii unigesis kun traiti e eliminesis kom aparta traito. La klasi anke eliminesis, remplasita per kombino di realigi e strukturala tipi.
Komencante en Rust 0.9 e finante en Rust 0.11, Rust havis du tipi di integrita pointeri: ~ e @, simpligante la centra memoro-modelo. Ol riimplementis ca pointer-tipi en la standarda biblioteko kom Box e (nun eliminata) Gc.
En januaro 2014, ante la unesma stabila versiono Rust 1.0, la redaktisto-en-chefo di Dr. Dobb's, Andrew Binstock, komentis pri la posiblesi di Rust divenar konkurencanto di C++ e di altra proxima lingui D, Go e Nim (tande Nimrod). Segun Binstock, dum ke Rust esis "larje regardata kom notinde eleganta linguo", la adopto lentis pro ke ol chanjesis repetite inter versioni.[24]
Rust esis la triesma maxim amata programifo-linguo en la yarala inquesto di Stack Overflow di 2015[25] e okupis la unesma loko en 2016–2020.[26][27][28][29][30]
La linguo mencionesas en La Libro di Mozilla kom "rustoza metalo".[31]
Kreado dil Fonduro Rust
[redaktar | redaktar fonto]En agosto 2020, Mozilla desengajis 250 de sua 1000 employati en tota la mondo kom parto di korporacala ristruturigo kauzita da la longatempa efekto dil pandemio di COVID-19. La equipo dop Servo, navigilo-motoro skribita en Rust, dissolvesis komplete. La evento generis sucii pri la futuro di Rust, nam kelka membri dil equipo esis aktiva kontribueri di Rust.
En la sequanta semano, la centra equipo di Rust agnoskis la grava efekto dil desengaji e anuncis ke la plani por fonduro di Rust esis en progreso. La unesma skopo dil fonduro esus prenar la posedo di omna marko-nomi e domeno-nomi, e asumir la financala responso por lia kusti.[32]
Ye la 8ma di februaro 2021, lua kin fondinta entraprezi (AWS, Huawei, Google, Microsoft e Mozilla) anuncis la formaco dil Fonduro Rust.[33][34]
Ye la 6ma di aprilo 2021, Google anuncis la kongrueso kun Rust en la Aperta Fonto Projeto di Android kom alternativo a C/C++.[35]
Exempli
[redaktar | redaktar fonto]La sequanta kodexo esas valida por Rust 1.86.0. En posa versioni la sintaxo o la funcioni povas chanjesar.
Programo qua montras la frazo "Saluto, mondo!":
fn main() {
println!("Saluto, mondo!");
}
Tri versioni dil faktorialo-funciono, en rekursiva, iterativa e funcionala stilo:
// La branchoi en ca funciono montras la opciona implicita retrodoni
// di Rust, qui povas uzesar kande on preferas plu "funcionala" stilo.
// Kontraste kun C++ e altra simila lingui, la fluo-kontrolo-strukturo
// `if` esas expreso vice deklaro, do ol havas propra retrodono-valoro.
fn recursive_factorial(n: i32) -> i32 {
if n == 0 {
1
} else {
n * recursive_factorial(n - 1)
}
}
fn iterative_factorial(n: i32) -> i32 {
// La variabili deklaresas per `let`.
// La vorto `mut` permisas ke la variabili esez mutebla.
let mut i = 1;
let mut result = 1;
while i <= n {
result *= i;
i += 1;
}
return result; // Explicata retrodono, kontraste kun la antea funciono.
}
// Kalkulas la faktorialo di pozitiva integro per funkcionala programifo.
// Kontraste kun bukli o explicata rekurso, ca realigo uzas
// deklarativala stilo apoyita sur iterili. La intervalo `(1..=n)` produktas
// inkluziva sequenco de 1 til `n`. La metodo `fold` akumulas la rezulto
// aplikante la sequanta multipliko-operaco a singla elemento dil intervalo,
// komencante de la komenca valoro 1.
fn functional_factorial(n: u64) -> u64 {
(1..=n).into_iter().fold(1, |acc, x| acc * x)
}
fn main() {
println!("Rekursiva rezulto: {}", recursive_factorial(10));
println!("Iterativa rezulto: {}", iterative_factorial(10));
println!("Funcionala rezulto: {}", functional_factorial(10));
}
Simpla demonstro dil kapableso di lejera konkurenteso di Rust:
/* Ca funciono kreas dek "taski" qui povas exekutesar konkurente.
Exekutez ol plura foyi e observez la neuniforma evoquo obtenata
pro ke singla tasko vokas la stdout, nam singla tasko povas eventar
inter la sucesoza voki a `println` e interne dil funciono `println` ipsa. */
use std::thread;
fn main() {
// Ca kateno esas nemutebla, por ke ol povas esar acesata sekure
// da plura taski.
let message = "Spektez me, me esas lejera proceso!";
// La `for`-bukli funcionas kun irga tipo qua realigas la traito
// `Iterator`.
for num in 0..10 {
// Esas tre probabla ke ol ne montros la 10 mesaji, nam se la "tasko"
// precipua finas ante, la produktita "taski" ne plus exekutesas.
thread::spawn (move || {
println!("{}", message);
// `println!` esas makroo qua verifikas statike formato-kateno.
// La makroi esas strukturala (quale en Scheme) vice
// esar textuala (quale en C).
println!("Ca mesajo ofresis da la tasko {}.", num);
});
}
}
Evoluo dil linguo
[redaktar | redaktar fonto]Preter la konvencionala statika tipi, Rust anke inkluzis typestates til sua versiono 0.4. La typestate-sistemo modelas aserti ante e pos la programo-deklari, per uzado di speciala verifiko-deklaro. La diskrepanti povas deskovresar dum la kompilo, vice unfoye kande la programo exekutesas, quale povus esar la kazo di la aserti en C o C++-kodexo. La typestate-koncepto ne esas exkluziva di Rust, nam ol introduktesis unesme en la programifo-linguo NIL.[22] La typestates retretesis pro ke en la praktiko li trovesis poka uzata, tamen la sama funcioneso ankore povas esar atingita per la modeli dil sama linguo.[36]
La stilo dil objeto-sistemo chanjesis konsiderinde en la versioni 0.2, 0.3 e 0.4 di Rust. La versiono 0.2 introduktis klasi unesmafoye, e la versiono 0.3 adjuntis nombro de traiti inkluzante destruktanti e polimorfismo per uzado di interfacii. En Rust 0.4, traiti adjuntesis kom moyeno por provizar heredo; la interfacii unigesis kun la traiti e eliminesis kom aparta traito. Anke la klasi eliminesis, remplasita per kombino di la realigi e strukturala tipi.
Grafika interfacii (GUI)
[redaktar | redaktar fonto]Rust permisas la kreado di grafika interfacii per la nativa API di la gastiganta platformo, to danke ke ol havas traiti di basa-nivela linguo. Tamen, ca developo-voyo povas generar dificultesi en projeti qui postulas la admito di plura platformi.[37]
Nuntempe existas plura developi por krear GUI en Rust; kelki permisas la kreado dil interfacio kun Electron o per uzado di HTML; kelka altra provizas nativa biblioteki por la linguo, ma li ankore esas en nematura developo-stadio. Fine esas la projeti qui ligas sat konocata biblioteki kun plu granda matureso en sua developo, quale GTK o Qt, qui permisas multiplatforma developi.[38] Kelka populara projeti esas la sequanta:
gtk-rs
[redaktar | redaktar fonto]
Ol esas realigo dil biblioteki di GTK por uzo kun la linguo Rust. Por to, ol kreas funcioni di Rust superpozita a la funcioni dil biblioteki di GTK en C, uzante la Foreign Function Interface quan Rust ofras.
conrod
[redaktar | redaktar fonto]Basa-nivela biblioteko qua uzas OpenGL o Vulkan.
Projeti
[redaktar | redaktar fonto]Navigilo
[redaktar | redaktar fonto]Skribesas en Rust navigilo e plura relatanta komponenti, qui inkluzas:
- Firefox
- Servo: paralela navigilo-motoro di Mozilla developita en kunlaboro kun Samsung
- Quantum: projeto, kompozita de plura subprojeti, por plibonigar la navigilo-motoro Gecko di Firefox, developita da Mozilla
- Oxidation: projeto por integrar kodexo skribita en la programifo-linguo Rust en Gecko e Firefox, impulsita da Mozilla
- Brave
- Brave Shields (adblock-rust): Nativa anonco-blokilo dil navigilo Brave, qua integras la sintaxo di uBlock Origin e qua ofras granda performo kompare kun sua antea realigo bazita sur JavaScript, segun lua developisti
Operacala sistemi
[redaktar | redaktar fonto]Multa operacala sistemi (OS) e relatanta komponenti skribesas en Rust. De januaro 2019, la operacala sistemi inkluzis: BlogOS, intermezzOS, QuiltOS, Redox, RustOS, Rux, Tefflin e Tock.
- Redox: Mikrokerno
- Stratis: Dosiero-sistemo por Fedora e RHEL 8.
Rust por Linux
[redaktar | redaktar fonto]Shablono:Precipua artiklo De sua versiono 6.1, la kerno di Linux integras Rust kom duesma programifo-linguo.[39]
Altra
[redaktar | redaktar fonto]- eza — moderna remplaso por ls.
- Microsoft Azure IoT Edge: platformo uzata por exekutigar servadi di Azure ed artifical inteligenteso en IoT-aparati havas komponenti realigita en Rust
- OpenDNS: uzata en du de sua komponenti
- Tor: anonimeso-reto, originale skribita en C, experimentas pri la migrado a Rust kun Arti pro sua sekureso-traiti[40]
- TiKV: distributita klefo-valoro datumbazo unesme developita da PingCAP, nun membro-projeto di Cloud Native Computing Foundation
- Xi: texto-redaktilo da Raph Levien, uzata interne dil operacala sistemo Fuchsia.
- Deno: sekura exekuto-tempo por JavaScript e TypeScript kreita kun V8, Rust e Tokio
- Linkerd 2.x: "servo-mesho"-instrumento por la surveyado di mikroservadi esas skribita grande en Rust.
- TerminusDB — desegno e dispono dil datumo-strukturo
- Discord: chat-servo direcionita a luderi qua uzas Rust por parti di sua backend, e anke kliento-flanka video-kodexigo.[41]
- rav1e: experimentala AV1 video-formato kodexilo.
- Zed: kodexo-redaktilo skribita de nulo en Rust da la kreeri di Atom.
- Thunderbird: La kodexo responsiva pri ofrar suporto por Exchange esas skribita en Rust.[42]
- Zola: Motoro por servar statika reto-pagini, quale Hugo. Kontraste kun Hugo, Zola esas skribita en Rust.[43]
Videz anke
[redaktar | redaktar fonto]Referi
[redaktar | redaktar fonto]Extera ligili
[redaktar | redaktar fonto]- ↑ The Mozilla Manifesto.
- ↑ (3 di aprilo 2013) Samsung teams up with Mozilla to build browser engine for multicore machines.
- ↑ Rust Contributors.
- ↑ Lenguajes de programacion para Bitcoins: Hablan los desarrolladores..
- ↑ (2021-12-09) Rust avanza para convertirse en el segundo lenguaje del kernel Linux - MuyLinux (es).
- ↑ (15 di februaro 2026) Rust vs Go: ¿cuál elegir? (es).
- ↑ (5 di decembro 2010) C++ Design Goals in the Context of Rust.
- ↑ (3 di aprilo 2013) Samsung joins Mozilla's quest for Rust.
- ↑ (17 di aprilo 2013) A taste of Rust.
- ↑ (14 di septembro 2010) Doc language FAQ.
- ↑ (1 di oktobro 2010) Rust Features I: Type Inference.
- 1 2 Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rust faq" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rust name reddit" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "future tense" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "project servo" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rust progress" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "stage1 rustc" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rust release reddit" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rust releases github" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "announcing rust 1" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rust 1 scheduling" - 1 2 Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "typestate" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "typestate is dead" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rise and fall" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "developer survey 2015" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "most loved 2016" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "most loved 2017" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "developer survey 2018" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "most loved 2019" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "developer survey 2020" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "mozilla book" - ↑ (2020-08-18) Laying the foundation for Rust's future.
- ↑ (2020-02-08) Hello World! (en).
- ↑ (2021-02-09) Mozilla Welcomes the Rust Foundation (en-US).
- ↑ Amadeo, Ron (2021-04-07). Google is now writing low-level Android code in Rust (en-us).
- ↑ (26 di decembro 2012) Typestate Is Dead, Long Live Typestate!.
- ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rust gui" - ↑ Citala eroro: Nevalida etiketo
<ref>; nula texto furniseis por la referi nomizita "rust gui medium" - ↑ Linux 6.1: Rust to hit mainline kernel.
- ↑ Announcing Arti, a pure-Rust Tor implementation.
- ↑ Why Discord is switching from Go to Rust.
- ↑ Adventures In Rust: Bringing Exchange Support To Thunderbird.
- ↑ A fast static site generator in a single binary with everything built-in..