Mi ez a release és mikor jelent meg
A Rust csapata a megszokott hat hetes ciklusban dolgozik, és ennek eredményeként 2023. november 16-án megjelent a Rust 1.74 stabil verziója. Ha ma frissítesz, ez lesz az, amit megkapsz. Nem egy feature-dús kiadás, mint amilyen néhány korábbi volt a GATs vagy a let-else bevezetésével, de két apró, praktikus fejlesztés van benne, amit nagyon sok fejlesztő fog kedvelni – főleg azok, akik közepes-nagy méretű workspace-eken dolgoznak.
A Rust release ciklusa kiszámítható: minden hat hétben új stable verzió jön ki. A 1.74 pontosan ezt a ritmust követi az 1.73 után.
Újdonság: lint-konfiguráció közvetlenül a Cargo.toml-ban
Eddig, ha egy projektben egységesen akartunk lint-szabályokat érvényesíteni – mondjuk #![warn(missing_docs)] vagy #![deny(unsafe_code)] –, azt vagy a lib.rs/main.rs tetején, attribútumként kellett beírni, vagy egy .cargo/config.toml-ba bújtatott environment változóval trükközni. Mostantól van egy natív, deklaratív megoldás: a Cargo.toml-ban egy [lints] táblát definiálhatunk.
[package]
name = "pelda-projekt"
version = "0.1.0"
edition = "2021"
[lints.rust]
unsafe_code = "forbid"
missing_docs = "warn"
[lints.clippy]
all = "warn"
pedantic = "warn"
Ez a megoldás azért jó, mert:
- Verziókövetett, tehát a git history-ban is látszik, ha valaki lazít vagy szigorít egy szabályon.
- Workspace-szinten örökölhető – egy közös
[workspace.lints]táblát definiálhatsz a root Cargo.toml-ban, és a tagcrate-ek egyszerűenlints.workspace = true-val hivatkozhatnak rá. - Nem kell attribútumokat szórni minden
lib.rsésmain.rstetejére.
Így néz ki a workspace-örökítés gyakorlatban:
# workspace root Cargo.toml
[workspace.lints.clippy]
all = "warn"
# tagcrate Cargo.toml
[lints]
workspace = true
Ha eddig #![deny(...)] attribútumokkal dolgoztál a kódban, most jó alkalom lehet átmozgatni ezeket a Cargo.toml-ba – tisztább, és a CI pipeline-ban is jobban látható lesz, ha valaki módosít rajta.
Újdonság: cargo build --keep-going
A másik nagy nyereség a cargo build --keep-going flag. Eddig, ha egy workspace-ben tíz crate volt, és a harmadik fordítási hibába futott, a Cargo azonnal megállt, és a maradék hét crate-ről semmit sem tudtál meg. Ez különösen fájó volt nagy monorepo-kban, ahol egy refaktor sok crate-et érint egyszerre.
cargo build --keep-going
Ezzel a flaggel a Cargo megpróbálja a lehető legtöbb crate-et lefordítani, és csak a végén, összesítve dobja ki az összes hibát. Ez a make -k-hoz hasonló viselkedés, amit sok build-rendszerben ismerhetsz.
// src/lib.rs egy workspace crate-ben
pub fn osszead(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tesztek {
use super::*;
#[test]
fn osszead_teszt() {
assert_eq!(osszead(2, 3), 5);
}
}
Ha ebben a crate-ben van egy hiba, de a workspace másik öt crate-je rendben van, a --keep-going mellett mind az öt lefordul, és csak a hibás crate esetében kapsz jelzést a build végén.
A --keep-going nem helyettesíti a CI-ban a normál build-et – csak fejlesztés közben hasznos, hogy gyorsabban lásd, mi minden működik még, miközben egy hibát javítasz.
Mit jelent ez a gyakorlatban a mindennapi Rust fejlesztőknek
Ezek nem monumentális nyelvi feature-ök, mint a GATs vagy a let-else volt, hanem inkább a developer experience finomhangolása. De pont ez a fajta apró csiszolás az, amitől a Rust tooling napról napra érik.
A lint-konfiguráció Cargo.toml-ba tétele különösen azoknak lesz hasznos, akik csapatban dolgoznak, és szeretnék egységesíteni a code style-t anélkül, hogy minden fájlba be kellene írni az attribútumokat. Ha eddig OnceCell-t vagy OnceLock-ot használtál lusta inicializáláshoz, vagy élveztél a let-else szintaxist a hibakezelésben, ez most egy hasonlóan praktikus, mindennapi életet megkönnyítő újítás.
use std::sync::OnceLock;
static KONFIG: OnceLock<String> = OnceLock::new();
fn get_konfig() -> &'static str {
KONFIG.get_or_init(|| "alap-konfiguracio".to_string())
}
fn main() {
println!("{}", get_konfig());
}
A --keep-going pedig azoknak segít, akik nagy workspace-eken iterálnak: nem kell minden hiba javítása után újra elindítani a build-et, hogy lássák, hol állnak a többi crate-tel.
Hogyan frissíts
Ha rustup-ot használsz (és remélhetőleg azt használsz), a frissítés egyetlen paranccsal megy:
rustup update stable
Ez letölti és beállítja az 1.74-et, mint az aktuális stable toolchaint. Ellenőrizni tudod a verziót:
rustc --version
# rustc 1.74.0 (79e9716c9 2023-11-13)
A [lints] tábla és a --keep-going flag mindkettő Cargo-funkció, tehát ha nem csak rustc-t, hanem cargo-t is a rustup-on keresztül kezeled (ami a legtöbb esetben igaz), a rustup update mindkettőt naprakészre hozza.
Az edition marad 2021, tehát a projektjeidben nem kell semmit módosítani a Cargo.toml edition mezőjében – az új Cargo-funkciók a meglévő edition-nel is azonnal használhatók.
Összefoglalás
A Rust 1.74 nem forradalmi release, de két apró, praktikus fejlesztést hoz: a natív lint-konfigurációt a Cargo.toml-ban, és a --keep-going flaget, ami sokat segít nagy workspace-ek fejlesztésénél. Ha rustup-ot használsz, a frissítés egy paranccsal megy, és érdemes is megtenni, mert ezek a kis csiszolások összeadva jelentősen javítják a napi Rust-fejlesztői élményt. A következő release-ekben is minden bizonnyal hasonló, gyakorlatorientált finomítások jönnek majd – ez a Rust fejlesztési filozófiájának egyik erőssége.