( geza42 | 2021. 03. 23., k – 16:31 )

Nem igazán értem, miért nem megy át neked az a gondolat, hogy a Rust bizonyos hibákat tud jobban kiszűrni, mint a C. Ha ezt megérted, akkor nem hoznád ide a java-t, amiben nyilvánvalóan nem lehet olyan bugot elkövetni, hogy a memóriát felülírod. Vagy ha esetleg valami nyakatekert módon mégis, akkor se az a jellemző. Már többször leírtam, de leírom még egyszer: a Rust egy biztonságosabb nyelv, mint a C, mert egy csomó hibalehetőségtől megvéd fordítási időben, és futási időben is több dolgot ellenőriz. Vagy inkább mondjuk úgy, hogy ellenőriz futási időben dolgokat. Mivel a C ugye nem ellenőriz semmit. Ennyi. Nem kell idehozni a java-t, hogy abban is lehet sechole-t csinálni, meg hogy az unsafe miatt meg lehet kerülni a védelmi mechanizmust, vagy hogy a Rust compilerben is lehet hiba, stb.stb. Nem arről van szó, hogy minden hibától megvéd. Hanem arról, hogy a hibák valószínűsége kisebb.

 

Oké, de akkor miért tartanak máris ott, hogy írjuk újra a Linux kernelt benne?

Mert lehet, hogy használható már ilyesmire. Ki kell próbálni, aztán kiderül. Mindenki azt csinál a szabadidejében vagy épp munkaként, amit akar.

 

Miért, Rust-nál hogyan akadályoz meg benne?

Te komolyan nem látod a különbséget a között, hogy egy fv. simán visszatér egy bármilyen pointerrel, és talán, ha szerencséd van, akkor kapsz valami warningot, és a között, hogy visszajön egy optional, amit fordítási időben csekkolni kell, és ha esetleg elrontod a kódrészt, akkor is maximum egy prediktálható runtime error lesz belőle? Ne már...

Rust ezen megközelítése egyáltalán nem kizárólagos, simán átvehető. C-be is, C++-ba is, máshova is.

C++-ba igen, sőt egy csomó dolog hasonlóan megy, mint a Rustban. C-be is átviheted a koncepciót, de valami undormány szar kód lesz belőle, ami 3x akkora lesz, mint kéne neki. Valszeg makrókkal teletüzdelve.

Biztos? hg2ecz fentebb adott egy példát, ahol a kódnak mindössze 11.56%-a unsafe és mégis segfaultot dob, ráadásul a segfaultoló sor safe módban van

Igen, nagy általánosságban biztos. Ez egy ellenpélda, ami persze megtörténhet a valóságban is simán. De ez csak egy változó lesz a sok közül, aminek az értéke rossz lesz. Ami szerencsés esetben hamar segfaultot okoz. Ha nem, akkor igen, más változók értékét is elronthatja, ez igaz. De ha a hibát kijavítod, akkor van egy jól működő programod. És nem az van, hogy a programban még bárhol lehet ilyen jellegű hiba. A dolog pofonegyszerű: csak az unsafe blokkokat kell jól átnézni ilyen jellegű hibák után kutatva, a maradék kód biztonságos. Tényleg nem értem, hogy mi ellen érvelsz tulajdonképp. Hogy nincs semmi értelme az unsafe-nek? Hogyha van egy unsafe blokk a programban, onnétól kezdve teljesen ugyanaz a helyzet, mintha az egész program unsafe lenne? Vagy mit akarsz mondani pontosan?

 

Bocsánat, ha egy kódban 20 év alatt egy hibát találnak,

Én találtam benne egyet. De amúgy meg egy csomó más hiba is volt benne az elmúlt sok évben.

És ha nem elterjedt?

Akkor azon lehet nem lesz Rust. A Rustnak nem biztos, hogy az a célja, hogy minden platformon lecserélje a C-t. Ha az elterjedtebb platformokon megteszi, akkor már egy hasznos dolog lehet.