Az első Rust projektem

Manapság a csapból is a Rust folyik. Legalábbis fejlesztői körökben. De mi is ez egyáltalán? Kell-e ez nekem?

A Rust egy a Mozilla (Firefox, Thunderbird) által fejlesztett olyan programnyelv, amit úgy terveztek, hogy alapvetően biztosságos kódot lehessen benne létrehozni, emellett könnyen integrálható más nyelven írt komponensekkel.

Rengeteg olyan dologról lehet hallani, hogy gyakorlatilag teljes projekteket írtak/írnak át Rust nyelven. Ezáltal az alkalmazások amellett, hogy biztonságosabbak lesznek, sok esetben még teljesítménybeli javulások is megfigyelhetők. A Pop_OS! asztali környezete az egyik ilyen projekt. A System76 fejlesztői csapata teljesen újraírja Rust-ban a COSMIC asztali környzetet, ami hamarosan tesztelhető is lesz. A másik, pl. hogy a Linux kernel is támogatja, hogy Rust-ban írjunk hozzá modulokat.

Ebben a cikkben csak a felszínt kapirgálom meg egy picit. Telepítés és egy egyszerű programocska megvalósítása a cél

Ha nem mozogsz otthonosan a parancssorban, akkor ne is olvass tovább.

Telepítés

A hivatalos leírás szerint Unix-szerű operációs rendszereken az ajánlott telepítési metódus rustup. Windowsra vannak telepítő programok. Én itt most Linuxot fogok használni.

A következő parancs letölti a rustup telepítő szkriptet és elindítja:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Ha nem akarod újraindítani a terminált, akkor szükség lesz még a következő parancsra is:

source "$HOME/.cargo/env"

Ezt követően csináltam egy "játszós" könyvtárat, ahova a Rust programokat pakolom.

mkdir Rust_projektek
cd Rust_projektek

Az első Rust projektem

Minden megvan ahhoz össze is dobjuk az első projektet. Legyen ez egy nagyon egyszerű programocska. A kezdéshez a Cargo-t fogjuk használni. Ez gyakorlatilag a Rust csomagkezelője. A Cargo letölti a Rust csomagod függőségeit, lefordítja a csomagjaidat, terjeszthető csomagokat készít, és feltölti azokat a crates.io-ra, a Rust közösségi csomagtárolójába.

Csináljunk egy hello-rust nevű projektet. Így ni:

cargo new hello-rust

Ha minden jól ment, akkor egy ilyen üzenetet kapsz vissza:

     Created binary (application) `hello-rust` package

A Cargo csinált egy hello-rust nevű könyvtárat, amibe bele is pakolt néhány fájlt:

Cargo.toml manifest fájl a Rustnak. Ebben vannak leírva a projekt metaadatai és függőségei.

[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

src/main.rs a projekt forráskódja

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

Ezeknek az elemzésébe nem mennék bele jobban, szerintem elég beszédes mind a kettő.

Futtassuk!

cargo run

Ha minden jól ment, akkor valami ilyesmit kellene látni:

   Compiling hello-rust v0.1.0 (/home/zoli/Rust_projektek/hello-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.17s
     Running `target/debug/hello-rust`
Hello, world!

Az első három sor "csak" a fordítási üzenet, a negyedik a program futásának eredménye.

A cargo run amellett hogy lefordította és végrehajtotta a kódot, létrehozott egy target könyvtárat, és azon belül egy rakat egyéb fájlt és könyvtárat. A target/debug könyvtárban lennie kell egy hello-rust nevű futtatható állománynak.

Ha nem szeretnéd futtatni, hanem csak lefordítani, akkor a

cargo build

parancsra van szükséged. Ez egy debug információkat tartalmazó, optimizálatlan futtatható állományt hoz létre. A debug infó nélküli, optimalizált változat fordítását a

cargo build --release

parancs segítségével lehet megtenni.

Függőségek hozzáadása

Most adjuk hozzá egy függőséget a projekthez. A crates.io-n, a Rust csomagtárolójában mindeféle könytárat lehet találni. A Rustban gyakran "crates"-ként hivatkoznak ezekre a csomagokra.

Ebben a projektben a ferris-says csomagot fogom használni.

Ez egy olyan könyvtár, ami a Rust kabalája, Ferris "segítségével" ír ki szöveget.

Ezt függőségként kell megadni a Cargo.toml fájlban:

[dependencies]
ferris-says = "0.3.1"

De a

cargo add ferris-says

parancs hatása is ugyanez lesz. Ha most újra kiadjuk a

cargo build

parancsot, akkor az le is tölti és telepíti is a szükséges csomagokat. Készül egy Cargo.lock fájl is, ez gyakorlatilag az összes függőséget tartalmazza, a mi esetünkben ezek a ferris-says függőségei. Jó sok van neki.

A ferris-says használatához át kell szerkeszteni az main.rs fájlt. Az elejére írjuk be ezt:

use ferris_says::say;

Ez a sor azt jelenti, hogy a say függvényt fogjuk használni a ferris-says csomagból.

A teljes kód, legyen ez:

use ferris_says::say;
use std::io::{stdout, BufWriter};

fn main() {
    let stdout = stdout();
    let message = String::from("Üdvözöllek a Rust óceánjából!");
    let width = message.chars().count();

    let mut writer = BufWriter::new(stdout.lock());
    say(&message, width, &mut writer).unwrap();
}

Ez a kód már egy kissé összetettebb, mint az előző 3 soros. Arra gondolsz amire én? Hogy miért nem egyszerűen say("üznet"); és kész? Hát erre még nem tudom a választ. De ha minden oké, akkor egy

cargo run

után valami hasonlót kell látni:

   Compiling hello-rust v0.1.0 (/home/zoli/Rust_projektek/hello-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.22s
     Running `target/debug/hello-rust`
 _______________________________
< Üdvözöllek a Rust óceánjából! >
 -------------------------------
        \
         \
            _~^~^~_
        \) /  o o  \ (/
          '_   -   _'
          / '-----' \

Ki ez a Ferris?

Ferris Rust közösség nem hivatalos kabala figurája.

Most egyszer ennyi. Most beleásom magam a Rust könyvekbe. Folytatás majd akkor, ha már képes leszek összerakni egy egyszerű GUI alkalmazást.

Forrás: rust-lang.org

Címkék: