( Kiskübi | 2020. 03. 10., k – 19:56 )

Lassan pontot teszek ennek a szálnak a végére. :)

> > Optional típus pl. nincs a C-ben, C++-ban (stl) már van. Enélkül, vagy ilyesmi nélkül fordítási időben nem derül ki, hogy kiolvashatok-e egy pointert, vagy érvénytelen.

> Lehet, de megkerülni azt is meg lehet.

Miről is vitázunk ebben a pontban?  hg2ecz írta:

  - C-nél adatcsatornában jön a NULL pointer is vissza. Pici figyelmetlenség és kész a biztonsági rés. Rust: if let Some(a) = akarmi(x,y) { ... }

azaz a Rust kivédi. Fordításkor, típusosság alapján, mivel az Option<T> nem kompatibilis a T-vel. Nem tudom, mire gondoltál, hogy megkerülni hogyan lehet. Ezt egy kósza unsafe kulcsszóval sem tudod megkerülni, csak ha refaktorálod a kódot, és mindenhol átírod a referenciákat pointerekre, meg ami még ezzel jár. De ezt már nagyon kell akarni. A lényeg az, hogy a könnyen elkövethető, nehezen debugolható, akár adatvesztést is okozó problémákat ki tudjuk szűrni.

> Nem regiszterekre gondoltam, egy egyszerű allokált terület túlcímzésére pl. olyan pedig alkalmazásfejlesztésnél is előfordul, nem csak C nyelvben.

Ezért van Rustban bounds checking.

> ha a programozó hülye, akkor unsafe és pointer és ugyanott vagyunk, mint C-nél, have a segfault.

Könnyű mondani, hogy „a programozó hülye”, de nem. Nem mindegy, hogy nehezen észrevehető hibáról beszélünk, vagy fordítva: nehezen elkövethetőkről. Mégegyszer: a statisztikák szerint a bugok nagy része memóriakezelési hiba. A nehezen észrevehető.

> C-ben minden pointer "shared", hiszen a process a saját címterében oda nyúlkál, ahova akar.

Kommunikációs elcsúszást érzékelek. Hol runtime automata felszabadításról beszélünk, hol statikus (compile time) lifetime-ellenőrzésről.

C-ben egyébként minden pointer shared az adat elérésére (bár inkább az adatra szokták ilyenkor mondani, hogy „shared”), és egyik sem rendelkezik shared ownership-pel. Shared pointer alatt leggyakrabban az utóbbit értjük.

> A fentebbi példához már kőkemény heurisztika kéne. 100%-os védelem nincs.

Igen, lassú is a fordító. De ezekre az esetekre is van 100%-os védelem. Még egyszer: ahol kell annotálni, és nem teszem, ott max. compile error történhet, hibás kód generálása nem.