7 důvodů, proč použít Rust pro váš další developerský projekt

Jste vývojář, který se chce naučit Rust? Abychom vám usnadnili rozhodování, tento článek představuje některé funkce Rustu, jednoho z nejpopulárnějších systémových programovacích jazyků.

V tomto článku prozkoumáme programovací jazyk Rust a jeho funkce, jako je typový systém, bezpečnost paměti a vlastnictví. Projdeme si také seznam zdrojů, které vám mohou pomoci naučit se Rust.

Pojďme začít!

Co je Rust?

Rust je systémový programovací jazyk. Začalo to jako osobní projekt Graydona Hoarea, vývojáře, v roce 2006. Za méně než deset let se rozrostlo na oblíbenou volbu pro systémové programování a příbuzné aplikace. Průměrný plat programátora Rust je asi 120 tisíc dolarů.

Pokud tedy chcete přejít z C++ na Rust nebo si chcete osvojit nový jazyk, učit se Rust může být skvělou volbou! Podle průzkumu StackOverflow Developer byl Rust zvolen nejoblíbenějším programovacím jazykem – sedm let v řadě.

Zdroj obrázku: StackOverflow

Rust nabízí rychlost programovacích jazyků nižší úrovně, jako je C a C++, a bezpečnost programovacích jazyků na vysoké úrovni, jako je Python.

Od významných projektů, jako jsou Dropbox a Firefox až po WebAssembly a vestavěné programování, je Rust široce používán ve všech oblastech vývoje softwaru. Rust nabízí přímou podporu správy balíčků prostřednictvím Cargo.

Cargo: Správce balíčků pro Rust

Cargo je správce balíčků pro Rust. Cargo můžete použít k instalaci balíčků z beden, registru balíčků Rust. Kromě toho, že je správcem balíčků, který vám umožňuje vyhledávat, instalovat a spravovat balíčky, slouží cargo také jako testovací běh, generátor dokumentů a systém sestavení.

Nyní, když máte přehled o Rustu, pojďme se blíže podívat na některé funkce Rustu, díky kterým vyniká jako systémový programovací jazyk s širokým přijetím.

Užitečné chybové zprávy

Jako začínající programátor narazíte na chyby a strávíte značné množství času laděním kódu. K vyřešení těchto problémů použijete chybové zprávy a varování poskytnutá kompilátorem. A užitečné zprávy vám mohou pomoci rychleji ladit.

Příklad chybové zprávy

Když se váš kód nezkompiluje úspěšně, Rust poskytuje užitečné chybové zprávy, které poskytují vysvětlení toho, co je třeba ve vašem kódu opravit a kde.

V tomto příkladu je proměnná num2 definována uvnitř funkce inner(). Je tedy omezena na rozsah funkce. Pokud se k němu pokusíte přistupovat mimo funkci, kompilátor vyvolá chybu:

fn main() {
    let num1 = 10;
    fn inner(){
        let num2 = 9; 
    }
    println!("The value of num2 is: {}", num2);
}

A chybová zpráva poskytuje informace o tom, co je třeba opravit.

error[E0425]: cannot find value `num2` in this scope
 --> src/main.rs:6:42
  |
6 |     println!("The value of num2 is: {}", num2);
  |                                          ^^^^ help: a local variable with a similar name exists: `num1`

Varování během kompilace

Kompilátor také poskytuje užitečná varování týkající se problémů ve vašem kódu. Když definujete proměnné, ale nikdy je nepoužíváte ve zbytku programu, Rust vám zobrazí varovnou zprávu, jak je znázorněno.

fn main() {
    let num1 = 10;
    let num2 = 9;
    println!("The value of num1 is: {}", num1);
}

Zde je proměnná num2 deklarována, ale nikdy není použita.

warning: unused variable: `num2`
 --> src/main.rs:3:9
  |
3 |     let num2 = 9;
  |         ^^^^ help: if this is intentional, prefix it with an underscore: `_num2`
  |

Silně zadaný jazyk

Dalším důvodem, proč byste měli používat Rust pro své vývojové projekty, je jeho typový systém. Rust je silně typizovaný jazyk, což znamená, že nepodporuje typové donucování. Typové donucení je, když jazyk může implicitně převést hodnotu v datovém typu na jiný.

  Převeďte soubory MP4 na MP3 snadno pomocí těchto 10 nástrojů

Například kód Pythonu v následující buňce kódu poběží bez chyb. Je to proto, že v Pythonu má nenulové číslo pravdivostní hodnotu True, a proto příkaz if běží bez chyb – i když číslo 10 je celé číslo – a ne booleovské.

num1 = 10
if num1:
    num2 = 9
print(f"num2 is {num2}")

# Output: num2 is 9

Na druhou stranu Rust typy nevnucuje. Následující kód tedy vyvolá chybu:

fn main() {
    let num1 = 10;
    if num1{
        let num2 = 9; 
    }
}

Chyba hlásí nesoulad typu, kde byla očekávána logická hodnota a bylo nalezeno celé číslo.

error[E0308]: mismatched types
 --> src/main.rs:3:8
  |
3 |     if num1{
  |        ^^^^ expected `bool`, found integer

Bezpečnost paměti

Bezpečnost paměti je další funkcí Rustu, díky které je pro programátory přitažlivý. Pokusíme se poskytnout zběžný přehled, jak to funguje.

Proměnné musí být před použitím inicializovány

V Rustu musí být všechny proměnné před použitím inicializovány. V jazycích, jako je C, se následující kód, kde num není inicializován, zkompiluje a spustí bez chyb. Hodnota neinicializované proměnné je nějaká nesmyslná hodnota.

#include <stdio.h>

int main(void) {
    int num;
	printf("The value of num is %d", num);
	return 0;
}
// Output: The value of num is 0

Pokud se pokusíte udělat něco podobného v Rustu, narazíte na chybu při kompilaci. Rust proto nemá ponětí o sběru odpadků.

fn main() {
    let num:i32;
    println!("The value of num is: {}",num);
}
error[E0381]: used binding `num` isn't initialized
 --> src/main.rs:3:40
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     println!("The value of num is: {}",num);
  |                                        ^^^ `num` used here but it isn't initialized
  |

Bezpečnost paměti v době kompilace

Rust zajišťuje bezpečnost paměti v době kompilace. Vezměme si jednoduchý příklad. Zde, i když má podmíněný příkaz if booleovskou hodnotu true, což znamená, že hodnota num bude vždy 100, dostaneme chybu, když se pokusíme vytisknout hodnotu num.

fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    println!("The value of num is: {}", num);
}

Důvodem je podmíněné vyhodnocení za běhu a kompilátor nebude schopen zaručit, že num má hodnotu v době kompilace.

error[E0381]: used binding `num` is possibly-uninitialized
 --> src/main.rs:6:41
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     if true{
  |        ---- if this `if` condition is `false`, `num` is not initialized
4 |         num = 100;
5 |     }
  |      - an `else` arm might be missing here, initializing `num`
6 |     println!("The value of num is: {}", num);
  |                                         ^^^ `num` used here but it is possibly-uninitialized

Pokud se blíže podíváte na chybovou zprávu, uvidíte, že pomocí příkazu else můžeme zajistit, že num bude mít hodnotu. Následující kód tedy poběží bez chyb. Protože tímto způsobem může kompilátor určit, že num bude mít hodnotu – v době kompilace – takže nedochází k žádným chybám.

fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    else{
        num = 50;
    }
    println!("The value of num is: {}", num);
}
The value of num is: 100

Neměnnost proměnných

Je také užitečné poznamenat, že proměnné v Rustu jsou ve výchozím nastavení neměnné. To znamená, že jako vývojář se nemusíte obávat náhodného přepsání hodnoty konkrétní proměnné. Zde je příklad:

fn main() {
    let num1 = 10;
    num1 = 5;
    println!("The value of num1 is: {}", num1);
}

Protože číslo1 je inicializováno na 10, když se mu pokusíte přiřadit hodnotu 5, zobrazí se chybová zpráva „nelze přiřadit dvakrát k neměnné proměnné num1“.

error[E0384]: cannot assign twice to immutable variable `num1`
 --> src/main.rs:3:5
  |
2 |     let num1 = 10;
  |         ----
  |         |
  |         first assignment to `num1`
  |         help: consider making this binding mutable: `mut num1`
3 |     num1 = 5;
  |     ^^^^^^^^ cannot assign twice to immutable variable

Vlastnictví a výpůjčky

Vlastnictví zajišťuje bezpečnost paměti. Funkčně lze vlastnictví v Rustu shrnout takto:

  Jak se připojit ke schůzce Microsoft Teams bez aplikace

Každý objekt by měl mít jednoho a pouze jednoho vlastníka. Pokud vlastník přejde mimo rozsah, objekt se zruší.

Vezměme si jednoduchý příklad. Zde inicializujeme řetězec str1 a poté přesuneme jeho hodnotu na str2. Protože každý objekt může mít pouze jednoho vlastníka, objekt str1 je zrušen, jakmile se jeho hodnota přesune na str2.

fn main() {
    let str1 = String::from("Rust");
    let str2 = str1;
    println!("The value of str1 is: {}", str1);
}
error[E0382]: borrow of moved value: `str1`
 --> src/main.rs:4:42
  |
2 |     let str1 = String::from("Rust");
  |         ---- move occurs because `str1` has type `String`, which does not implement the `Copy` trait
3 |     let str2 = str1;
  |                ---- value moved here
4 |     println!("The value of str1 is: {}", str1);
  |                                          ^^^^ value borrowed here after move

I když se to zdá intuitivní, pro lepší pochopení a pochopení toho, jak vlastnictví funguje, je užitečné naučit se koncepty půjčování a referencí.

Rychlý vývoj

Dosud jsme probrali několik užitečných funkcí programovacího jazyka Rust. Chcete-li zkontrolovat několik:

  • Rust je optimalizován pro rychlost i bezpečnost.
  • Dodává se s vestavěným nástrojem pro správu balíčků a vytváří systém.
  • Má také bohatou standardní knihovnu.

Rust v podstatě nabízí vše, co si vývojář může přát. S Rustem tedy můžete rychle vyvíjet aplikace s minimálním laděním a rychlejším sestavováním.

Vývoj napříč platformami

S Rustem si můžete vybrat vývoj na platformě dle vašeho výběru. Rust podporuje nejběžnější platformy: Linux, MacOS a Windows.

  Nahrávejte videa na rozdělené obrazovce ve vlastním rozvržení a kombinujte je [Paid]

Vývoj aplikací je obecně snadný, protože můžete zkompilovat zdrojový kód Rust do spustitelného souboru, aniž byste byli závislí na jiných nástrojích pro sestavení a externích kompilátorech.

Podpůrná komunita jde dlouhou cestu při zjednodušování vaší cesty za učením. Rust má obrovskou uživatelskou základnu, která každým rokem roste.

Popularita Rustu v průzkumu vývojářů StackOverflow naznačuje, že existuje velká komunita uživatelů se spoustou zkušených vývojářů ochotných sdílet své znalosti a zkušenosti.

Kromě oficiální dokumentace je zde také uživatelsky vytvořený dokumentační web a diskusní fórum. Můžete také zkontrolovat skupiny Rust subreddit a LinkedIn pro relevantní diskuse.

Učební zdroje, jak začít s Rustem

Tato část uvádí několik užitečných zdrojů, které vám pomohou začít s Rustem. Toto není vyčerpávající seznam, ale obsahuje některé doporučené výukové programy, kurzy a knihy, které vám pomohou na vaší cestě za učením.

#1. Rust příkladem

Rust By Example vás naučí základy Rust a standardní knihovny prostřednictvím řady příkladů, které můžete kódovat v online editoru.

Témata zahrnují bedny, náklad: nástroj pro správu balíků pro Rust, generika, vlastnosti, zpracování chyb a mnoho dalšího.

#2. Šustění

Rustlings je další oficiální výukový zdroj pro programovací jazyk Rust. Příkladem je podobný Rust. Vyžaduje to však, abyste si nastavili své místní vývojové prostředí, naklonovali ukázkové úložiště a řešili jednoduché problémy, abyste se naučili tyto koncepty.

#3. Cvičení Rust Track

Rust Track on Exercism má více než 100 cvičení, která vám pomohou naučit se a otestovat vaše porozumění Rustu. Cvičení je bezplatná platforma, kde se kromě kódování cvičení můžete nechat instruovat zkušenými programátory.

#4. Ultimate Rust Crash Course

Kurz Ultimate Rust Crash, který učí Nathan Stocks na Udemy, zahrnuje následující:

  • Základy programování Rust
  • Modulový systém v barvě Rust
  • Datové typy a tok řízení
  • Reference a výpůjčky
  • Struktury, vlastnosti a sbírky

#5. Ultimate Rust 2: Koncepty pro středně pokročilé

Ultimate Rust 2 je kurz navazující na Ultimate Rust Crash Course a pokrývá následující témata:

  • Uzávěry
  • Iterátory
  • Vypořádání se s chybou
  • Unit a integrační test
  • Logování, multithreading a kanály

#6. Rust lang: Kompletní průvodce pro začátečníky 2023

Tento kurz Udemy, který vyučuje Catalin Stefan, je komplexním kurzem programování Rust. Některá z probíraných témat zahrnují:

  • Základy rzi
  • Datové typy, řídicí struktury
  • Funkce, vlastnosti
  • Správa paměti
  • Konkurence

#7. Programování Rust: Rychlý, bezpečný vývoj systémů

Programming Rust od O’Reilly je populární kniha o programování Rust, která vás naučí následující:

  • Základní datové typy
  • Vlastnictví a půjčování
  • Asynchronní programování
  • Rychlé vícevláknové aplikace
  • Uzávěry, iterátory
  • Sbírky

#8. Programovací jazyk Rust, 2. vydání

Programovací jazyk Rust je autorem renomovaných přispěvatelů komunity Rust. Tato kniha obsahuje vše, co potřebujete vědět o Rustu, včetně:

  • Vlastnictví a půjčování
  • Generika, vlastnosti
  • Inteligentní ukazatele, multithreading
  • Testování a zpracování chyb

#9. Kompletní referenční příručka k programování Rust

Kompletní referenční příručka k programování Rust od společnosti Packt zahrnuje následující:

  • Implementace datových struktur v Rustu
  • Zápis opakovaně použitelných a testovatelných komponent v Rustu
  • Navrhování vícevláknových aplikací návrh algoritmu a
  • Aplikace Rustu v WebAssembly, sítích a aplikacích příkazového řádku

#10. Kreativní projekty pro programátory Rust

Pokud jste zkušený vývojář, který se učí Rust, pak k dobrému pochopení jazyka postačí vybudování několika projektů ve vaší oblasti zájmu. Creative Projects for Rust Programmers od Packt je kniha, která učí Rust tím, že je aplikuje na projekty, jako jsou:

  • Budování Restful webových služeb
  • 2D hry s
  • Vývoj webových aplikací pomocí WebAssembly
  • Emulátory strojového jazyka
  • a více!

Závěr

Tento článek představil přehled Rustu jako systémového programovacího jazyka, včetně funkcí, jako je bezpečnost paměti, vylepšená správa balíčků a další. Také jsme vyjmenovali výukové zdroje, které vám pomohou začít s Rustem.

Jako další krok si můžete vybrat jeden nebo více zmíněných výukových zdrojů, abyste si osvojili základy Rustu. Šťastné programování Rustu!

Můžete také prozkoumat některé nejlepší poskytovatele hostingu serverů Rust.