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:
Ha nem akarod újraindítani a terminált, akkor szükség lesz még a következő parancsra is:
Ezt követően csináltam egy "játszós" könyvtárat, ahova a Rust programokat pakolom.
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:
Ha minden jól ment, akkor egy ilyen üzenetet kapsz vissza:
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.
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
println!("Hello, world!");
}
Ezeknek az elemzésébe nem mennék bele jobban, szerintem elég beszédes mind a kettő.
Futtassuk!
Ha minden jól ment, akkor valami ilyesmit kellene látni:
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
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
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:
ferris-says = "0.3.1"
De a
parancs hatása is ugyanez lesz. Ha most újra kiadjuk a
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:
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 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
után valami hasonlót kell látni:
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