Rust | |
Rust logo | |
Extensii fișiere | .rs, .rlib |
---|---|
Paradigmă | Multi-paradigm, calcul simultan, funcțional, generic, imperativă, structurată |
Apărut în | 7 iulie 2010 |
Proiectat de | Graydon Hoare |
Dezvoltator | Mozilla |
Ultima versiune | 1.78.0[1] |
Tipare | inference typing[*] nominative typing[*] static typing[*] strong typing[*] linear typing[*] Hindley–Milner[*] |
Influențat de | Alef,[2] C#,[2] C++,[2] Cyclone,[2][3] Erlang,[2] Haskell,[2] Limbo,[2] Newsqueak,[2] OCaml,[2] Ruby,[2] Scheme,[2] Standard ML,[2] Swift[2][4] |
Influențe | Crystal, Elm,[5] Idris,[6] Spark,[7] Swift,[8] Project Verona[9] |
Platformă | ARM, IA-32, x86-64, MIPS, PowerPC, SPARC, RISC-V[10][11] |
Sistem de operare | Linux, macOS, Windows, FreeBSD, OpenBSD,[12] Redox, Android, iOS[13] |
Licență | MIT or Apache 2.0[14] |
Tip MIME | text/x-rust[15] text/rust[15][16] |
Prezență online | www.rust-lang.org |
Modifică date / text |
Rust este un limbaj de programare[17] axat pe siguranță, în special concurența sigură.[18][19] Rust este similar sintactic cu C++,[20] dar este conceput pentru a oferi o mai bună siguranță a memoriei, menținând în același timp performanțe ridicate.
Rust a fost proiectat inițial de Graydon Hoare la Mozilla Research, cu contribuții de la Dave Herman, Brendan Eich și alții.[21][22] Designerii au perfecționat limbajul în timp ce scriau macheta Servo sau motorul browserului,[23] și compilatorul Rust. Compilatorul este un software gratuit și open-source cu licență dublă sub Licența MIT și Licența Apache 2.0.
Rust a fost „cel mai îndrăgit limbaj de programare” de la Stack Overflow Developer Survey în fiecare an începând cu 2016.[24][25][26][27]
Rustul este destinat să fie un limbaj pentru sisteme foarte concurente și extrem de sigure,[28] și programarea în mare, adică crearea și menținerea de limite care păstrează integritatea sistemului mare.[29] Acest lucru a dus la un set de caracteristici cu accent pe siguranță, controlul dispunerii memoriei și concurență.
Performanța Rust idiomatic este comparabilă cu performanța idiomatică C ++.[30][31]
Sintaxa concretă a Rust este similară cu C și C++, cu blocuri de cod delimitate de paranteze cretate și cuvinte cheie de control, cum ar fi if
, else
, while
, și for
. Nu toate cuvintele cheie C sau C ++ sunt implementate, însă unele funcții Rust (cum ar fi utilizarea potrivirii cuvintelor cheie pentru potrivirea modelului) vor fi mai puțin familiare cu cele versate în aceste limbi. În ciuda asemănării superficiale cu C și C ++, sintaxa Rust în sens mai profund este mai aproape de cea a familiei ML de limbi și a limbii Haskell. Aproape fiecare parte a unui corp de funcții este o expresie,[32] controlează chiar și operatorii de flux. De exemplu, expresia obișnuită dacă if
și locul condiționatului ternar al lui C. O funcție nu trebuie să se termine cu o expresie return
: în acest caz, dacă punctul virgulă este omis, ultima expresie din funcție creează valoarea returnare.
Rust-ul este proiectat să fie în siguranță pentru memorie și, prin urmare, nu permite indicatoarele nule, indicatoarele sau cursele de date în cod sigur.[33][34][35][36] Valorile datelor pot fi inițializate doar printr-un set fix de formulare, care necesită deja inițializarea intrărilor lor.[37] Pentru a reproduce funcția în alte limbi de pointeri, fie valabilă sau NULL
, cum ar fi în structurile de date de listă legată sau în arborele binar, biblioteca de bază Rust oferă un tip de opțiune, care poate fi utilizat pentru a testa dacă un pointer are Some
valoari sau None
. De asemenea, Rust introduce sintaxa suplimentară pentru a gestiona viața de viață, iar compilatorul motivează acest lucru prin intermediul verificatorului său de împrumut.
Rust nu utilizează un sistem automat de colectare a gunoiului precum cele utilizate de Go, Java sau .NET Framework. În schimb, memoria și alte resurse sunt gestionate prin convenția de achiziție a resurselor este inițializarea (RAII), cu numărarea de referință opțională. Rust asigură gestionarea deterministă a resurselor, cu cheltuieli generale foarte scăzute. Rugul favorizează, de asemenea, alocarea stivei de valori și nu realizează implicit box.
Există, de asemenea, un concept de referințe (folosind simbolul &), care nu implică numărarea de referințe în timp de rulare. Siguranța utilizării acestor indicatoare este verificată la timp de compilare de către verificatorul împrumutului, prevenind indicatoarele și alte forme de comportament nedefinit.
Rust are un sistem de proprietate în care toate valorile au un proprietar unic, iar sfera valorii este aceeași cu sfera proprietarului.[38][39] Valorile pot fi transmise prin referință imuabilă, folosind &T
, prin referință mutabilă, folosind &mut T
, sau prin valoare, folosind T
. În orice moment, pot fi fie mai multe referințe imuabile, fie o referință mutabilă (o blocare implicită pentru cititori-scriitori). Compilatorul Rust aplică aceste reguli la timp de compilare și, de asemenea, verifică dacă toate referințele sunt valide.
Iată un simplu „Program Hello, world!” program scris în Rust. println!
macro imprimă mesajul la ieșire standard.
fn main() {
println!("Hello World!");
}
fn factorial(i: u64) -> u64 {
match i {
0 => 1,
n => n * factorial(n-1)
}
}
fn factorial(i: u64) -> u64 {
let mut acc = 1;
for num in 2..=i {
acc *= num;
}
acc
}
fn factorial(i: u64) -> u64 {
(1..=i).product()
}
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# [...]
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
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.
Microsoft recently created a stir after revealing it was taking some ideas from the popular Rust programming language to create a new language for 'safe infrastructure programming' under the banner Project Verona.
|title=
(ajutor)
Rust is syntactically similar to C++, but it provides increased speed and better memory safety
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.
It's impossible to be 'as fast as C' in all cases while remaining safe ... C++ allows all sorts of low-level tricks, mostly involving circumventing the type system, that offer practically unlimited avenues for optimization. In practice, though, C++ programmers restrict themselves to a few tools for the vast majority of the code they write, including stack-allocated variables owned by one function and passed by alias, uniquely owned objects (often used withauto_ptr
or the C++0xunique_ptr
), and reference counting viashared_ptr
or COM. One of the goals of Rust's type system is to support these patterns exactly as C++ does, but to enforce their safe usage. In this way, the goal is to be competitive with the vast majority of idiomatic C++ in performance, while remaining memory-safe ...
[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.
... 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.