7 érv, hogy miért használjon rozsdát a következő fejlesztési projektjéhez

Ön fejlesztő, aki Rust-ot szeretne tanulni? A döntés megkönnyítése érdekében ez a cikk bemutatja a Rust, az egyik legnépszerűbb rendszerprogramozási nyelv néhány funkcióját.

Ebben a cikkben megvizsgáljuk a Rust programozási nyelvet és annak jellemzőit, például a típusrendszert, a memóriabiztonságot és a tulajdonjogot. Áttekintjük azon források listáját is, amelyek segíthetnek a Rust elsajátításában.

Kezdjük!

Mi az a Rust?

A Rust egy rendszerprogramozási nyelv. Graydon Hoare, egy fejlesztő személyes projektjeként indult még 2006-ban. Kevesebb, mint egy évtized alatt a rendszerprogramozás és a kapcsolódó alkalmazások legnépszerűbb választásává nőtte ki magát. Egy Rust programozó átlagos fizetése körülbelül 120 000 dollár.

Tehát ha C++-ról Rust-ra szeretne váltani, vagy új nyelvet szeretne elsajátítani, a Rust tanulása nagyszerű választás lehet! A StackOverflow Developer felmérése szerint a Rustot választották a legkedveltebb programozási nyelvnek – sorozatban hét éve.

Kép forrása: StackOverflow

A Rust az alacsony szintű rendszerprogramozási nyelvek, például a C és a C++ sebességét, valamint a magas szintű programozási nyelvek, például a Python biztonságát kínálja.

Az olyan figyelemre méltó projektektől, mint a Dropbox és a Firefox, a WebAssembly-ig és a beágyazott programozásig a Rustot széles körben használják a szoftverfejlesztés minden területén. A Rust azonnali csomagkezelési támogatást kínál a Cargo-n keresztül.

Rakomány: A Rust csomagkezelője

A Cargo a Rust csomagkezelője. A rakomány segítségével csomagokat telepíthet ládákból, a Rust csomagnyilvántartásból. Amellett, hogy csomagkezelő, amely lehetővé teszi a csomagok keresését, telepítését és kezelését, a cargo tesztfuttatóként, dokumentumgenerátorként és összeállítási rendszerként is szolgál.

Most, hogy áttekintést kapott a Rustról, nézzük meg közelebbről a Rust néhány olyan funkcióját, amelyek kiemelik, mint széles körben elterjedt rendszerprogramozási nyelvet.

Hasznos hibaüzenetek

Kezdő programozóként hibákba ütközhet, és sok időt tölt a kód hibakeresésével. A problémák megoldásához használja a fordító által biztosított hibaüzeneteket és figyelmeztetéseket. A hasznos üzenetek pedig segíthetnek a gyorsabb hibakeresésben.

Példa hibaüzenetre

Ha a kód fordítása nem sikeres, a Rust hasznos hibaüzeneteket ad, amelyek magyarázatot adnak arról, hogy mit és hol kell javítani a kódban.

Ebben a példában a num2 változó az inner() függvényen belül van definiálva. Ezért a funkció hatókörére korlátozódik. Ha a függvényen kívül próbálja elérni, a fordító hibát jelez:

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

A hibaüzenet pedig információt ad arról, hogy mit kell javítani.

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`

Figyelmeztetések a fordítás során

A fordító hasznos figyelmeztetéseket is ad a kóddal kapcsolatos problémákkal kapcsolatban. Ha változókat definiál, de soha nem használja őket a program többi részében, a Rust figyelmeztető üzenetet ad, az ábrán látható módon.

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

Itt a num2 változó deklarálva van, de soha nem használjuk.

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

Erősen gépelt nyelv

A másik ok, amiért érdemes a Rust-ot használni fejlesztési projektjeihez, a típusrendszer. A Rust egy erősen tipizált nyelv, ami azt jelenti, hogy nem támogatja a típuskényszert. Típuskényszerről van szó, amikor egy nyelv implicit módon képes egy adattípusban lévő értéket egy másikra konvertálni.

  A Nudge engedélyezése vagy letiltása a Gmailben

Például a következő kódcellában található Python-kód hiba nélkül fog futni. Ennek az az oka, hogy Pythonban a nullától eltérő számok igazságértéke True, ezért az if utasítás hiba nélkül fut – annak ellenére, hogy a 10 egész szám – és nem logikai érték.

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

# Output: num2 is 9

Másrészt a Rust nem kényszeríti a típusokat. Tehát a következő kód hibát fog kiadni:

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

A hiba típus eltérést jelez, ahol logikai értéket vártak, és egész számot találtunk.

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

A memória biztonsága

A memóriabiztonság a Rust másik olyan tulajdonsága, amely vonzóvá teszi a programozók számára. Megpróbálunk egy felületes áttekintést adni ennek működéséről.

A változókat használat előtt inicializálni kell

A Rust alkalmazásban minden változót inicializálni kell, mielőtt felhasználható lenne. Az olyan nyelvekben, mint a C, a következő kód, ahol a num nincs inicializálva, lefordítja és hiba nélkül fut. Az inicializálatlan változó értéke valamilyen szemét érték.

#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

Ha megpróbálsz valami hasonlót csinálni a Rustban, fordítási idejű hibába fogsz futni. A rozsdának ezért fogalma sincs a szemétgyűjtésről.

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
  |

Memóriabiztonság fordítási időben

A rozsda gondoskodik a memória biztonságáról a fordítási időben. Vegyünk egy egyszerű példát. Itt annak ellenére, hogy az if feltételes utasítás igaz logikai értékkel rendelkezik, ami azt jelenti, hogy a num értéke mindig 100 lesz, hibát kapunk, amikor megpróbáljuk kinyomtatni a szám értékét.

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

Ennek az az oka, hogy a feltételes kiértékelés futási időben történik, és a fordító nem tudja garantálni, hogy a num értéke fordításkor van.

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

Ha közelebbről megnézi a hibaüzenetet, látni fogja, hogy egy else utasítással biztosíthatjuk, hogy a num értéke legyen. Tehát a következő kód hiba nélkül fog futni. Mivel így a fordító meg tudja határozni, hogy a numnak értéke lesz – fordítási időben –, így nincs hiba.

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

Változók megváltoztathatatlansága

Azt is hasznos megjegyezni, hogy a Rust változói alapértelmezés szerint változtathatatlanok. Ez azt jelenti, hogy fejlesztőként nem kell attól tartania, hogy véletlenül felülírja egy adott változó értékét. Íme egy példa:

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

Mivel a num1 inicializálása 10, amikor 5-ös értéket próbál hozzárendelni, egy hibaüzenet jelenik meg, amely így szól: „Nem lehet kétszer hozzárendelni a num1 megváltoztathatatlan változóhoz”.

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

Tulajdonjog és kölcsönfelvétel

A tulajdonjog garantálja a memória biztonságát. Funkcionálisan a Rust tulajdonjogát a következőképpen lehet összefoglalni:

  Az alapértelmezett útválasztó IP-cím magyarázata

Minden tárgynak csak egy tulajdonosa kell, hogy legyen. Ha a tulajdonos kilép a hatókörből, akkor az objektumot eldobják.

Vegyünk egy egyszerű példát. Itt inicializálunk egy str1 karakterláncot, majd áthelyezzük az értékét str2-re. Mivel minden objektumnak csak egy tulajdonosa lehet, az str1 objektumot a rendszer eldobja, amint az értéke str2-be kerül.

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

Bár ez intuitívnak tűnik, a tulajdonjog működésének jobb megértése és értékelése érdekében hasznos megtanulni a kölcsönzés és a hivatkozás fogalmát.

Gyors fejlesztés

Eddig a Rust programozási nyelv számos hasznos funkcióját tárgyaltuk. Néhány áttekintéshez:

  • A rozsda a sebesség és a biztonság szempontjából egyaránt optimalizált.
  • Beépített csomagkezelő eszközzel érkezik, és rendszert épít fel.
  • Gazdag szabványkönyvtárral is rendelkezik.

A Rust lényegében mindent kínál, amit egy fejlesztő kérhet. Ezért a Rust segítségével gyorsan fejleszthet alkalmazásokat minimális hibakereséssel és gyorsabb összeállítással.

Platformok közötti fejlesztés

A Rust segítségével választhat, hogy az általa választott platformon fejleszt. A Rust a leggyakoribb platformokat támogatja: Linux, MacOS és Windows.

Az alkalmazásfejlesztés általában egyszerű, mivel a Rust forráskódot végrehajthatóvá fordíthatja anélkül, hogy más összeállítási eszközöktől és külső fordítóktól függne.

  Mi a Kis Hold a szöveg mellett az iPhone-on?

A támogató közösség nagyban leegyszerűsíti a tanulási utat. A Rust hatalmas felhasználói bázissal rendelkezik, amely évről évre csak növekszik.

A Rust népszerűsége a StackOverflow fejlesztői felmérésben azt jelzi, hogy a felhasználók nagy közössége van, és sok tapasztalt fejlesztő hajlandó megosztani tudását és szakértelmét.

A hivatalos dokumentáción kívül van egy felhasználó által generált dokumentációs oldal és egy vitafórum is. A vonatkozó vitákat a Rust subreddit és a LinkedIn csoportokban is megnézheti.

Oktatási források a Rust használatának megkezdéséhez

Ez a rész felsorol néhány hasznos forrást a Rust használatának megkezdéséhez. Ez a lista nem kimerítő, de tartalmaz néhány ajánlott oktatóanyagot, tanfolyamot és könyvet, amelyek segítenek a tanulásban.

#1. Rozsda Példa szerint

A Rust By példa megtanítja Önnek a Rust alapjait és a szabványos könyvtárakat egy sor példán keresztül, amelyeket egy online szerkesztőben kódolhat.

A tárgyalt témák közé tartoznak a ládák, a rakomány: a Rust csomagkezelő eszköze, az általánosságok, a tulajdonságok, a hibakezelés és még sok más.

#2. Susogás

A Rustlings egy másik hivatalos tanulási forrás a Rust programozási nyelvhez. Példával hasonlít a Rusthoz. Ehhez azonban be kell állítania a helyi fejlesztési környezetet, klónozni kell egy példatárat, és egyszerű problémákat kell megoldania, hogy megtanulja ezeket a fogalmakat.

#3. Gyakorlati rozsdapálya

A Rust Track on Exercism több mint 100 gyakorlatot tartalmaz, amelyek segítenek megtanulni és tesztelni a rozsda megértését. Az Exercism egy ingyenes platform, ahol tapasztalt programozóktól kaphat mentorálást a gyakorlatok kódolása mellett.

#4. Ultimate Rust Crash Course

Az Ultimate Rust Crash Course, amelyet Nathan Stocks tanított az Udemy-n, a következőket fedi le:

  • A Rust programozás alapjai
  • Modulrendszer Rustban
  • Adattípusok és vezérlési folyamat
  • Referencia és kölcsönzés
  • Struktúrák, tulajdonságok és gyűjtemények

#5. Ultimate Rust 2: Intermediate Concepts

Az Ultimate Rust 2 az Ultimate Rust Crash Course nyomon követése, és a következő témákat fedi le:

  • Lezárások
  • Iterátorok
  • Hibakezelés
  • Egység- és integrációs teszt
  • Naplózás, többszálú feldolgozás és csatornák

#6. Rust lang: A teljes útmutató kezdőknek 2023-ra

Ez az Udemy-tanfolyam, amelyet Catalin Stefan tanít, egy átfogó kurzus a Rust programozásról. Néhány érintett téma a következőket tartalmazza:

  • Rozsda alapjai
  • Adattípusok, vezérlési struktúrák
  • Funkciók, tulajdonságok
  • Memóriakezelés
  • Egyidejűség

#7. Programozási rozsda: gyors, biztonságos rendszerfejlesztés

A Rust programozása O’Reillytől egy népszerű Rust programozási könyv, amely a következőket tanítja meg:

  • Alapvető adattípusok
  • Tulajdonjog és hitelfelvétel
  • Aszinkron programozás
  • Gyors többszálú alkalmazások
  • Lezárások, iterátorok
  • Gyűjtemények

#8. The Rust programozási nyelv, 2. kiadás

A Rust programozási nyelv szerzői a Rust közösség neves közreműködői. Ez a könyv mindent tartalmaz, amit a Rustról tudni kell, beleértve:

  • Tulajdonjog és hitelfelvétel
  • Általánosságok, tulajdonságok
  • Intelligens mutatók, többszálú
  • Tesztelés és hibakezelés

#9. A teljes rozsdaprogramozási kézikönyv

A Packt teljes rozsdaprogramozási útmutatója a következőket tartalmazza:

  • Adatstruktúrák megvalósítása a Rustban
  • Újrafelhasználható és tesztelhető komponensek írása Rustban
  • Többszálú alkalmazások tervezése algoritmus tervezés és
  • A Rust alkalmazásai WebAssembly-ben, hálózati és parancssori alkalmazásokban

#10. Kreatív projektek Rust programozóknak

Ha Ön tapasztalt fejlesztő, aki a Rust nyelvet tanulja, akkor elegendő néhány projekt felépítése az Ön érdeklődési körébe tartozó területen, hogy megfelelő nyelvtudást szerezzen. A Packt Kreatív projektjei Rust programozóknak egy könyv, amely megtanítja Rust-ot azáltal, hogy ezeket olyan projektekre alkalmazza, mint:

  • Nyugodt webszolgáltatások építése
  • 2D játékok
  • Webes alkalmazások fejlesztése a WebAssembly segítségével
  • Gépi nyelv emulátorok
  • és több!

Következtetés

Ez a cikk áttekintést nyújtott a Rustról mint rendszerprogramozási nyelvről, beleértve olyan funkciókat, mint a memóriabiztonság, a továbbfejlesztett csomagkezelés és egyebek. Felsoroltunk olyan tanulási forrásokat is, amelyek segítenek a Rust használatának megkezdésében.

Következő lépésként kiválaszthat egy vagy több említett tanulási forrást a Rust alapjainak megismeréséhez. Boldog Rust programozást!

Felfedezheti a legjobb Rust szerver hosting szolgáltatókat is.