( uid_6201 | 2020. 03. 08., v – 10:29 )

További C hibalista (teljesség igénye nélkül), amit a Rust-ban javítottak:

  - K&R közül egyik nyilatkozta tizenpár éve: bánja hogy nulltermináltra tervezték a stringet C-ben. A hibák melegágya lett. Rust: hosszt számlálja. Mellékes előny: daraboláskor Vec<&str> --> bárhol beléphetsz a String-be N hosszban, azaz daraboláskor nem kell adatot másolni, csak pointert és hosszt állít rá a fordító.
  - fenti példánál ha max-nál rövidebb "a" vagy "b" adatvektor, lazán beleolvas a másik részbe (information leakage) vagy beleír a másik részbe (code injection, nem várt végtelen ciklus, bármi). Rust: hibát dob túlolvas/túlírásra.
  - 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) { ... }
  - C fájlokon keresztül hurcolt globális változók: átláthatatlanság melegágya. Rust: csak unsafe {} módon férhetsz hozzá globális változóhoz.
  - szálak (thread): konkurens vektorhasználat: Rust ownership
  - free utáni vektorhasználat: Rust ownership & lifetime alapú automatikus memória felszabadítás
  - C: alapból újraírható változók, "const" a függvényeknél lustaságból elmarad. Rust: alapból nem újraírható változók. Az újraírhatósághoz "mut" kulcsszó kell. Indokolatlan "mut" warningot ad.
  - fegyelem netovábbja: double és float között nem tudsz műveletet végezni. Explicit mond meg, hogy melyiket alakítsa át a másikára. C-ben okozott nekem már ez az automatizmus is félreszámolást.
  - ...

Visszatekintve a C tényleg olyan, mint biztonsági öv nélkül versenyautót vezetni. Szabadság, szerelem. Továbbá átlagosan 1,2-szeres tempó, de nagyobb eséllyel kompromittálható szoftver.
 

Lásd még:
   - Microsoft: Checked-C (csak részben ad megoldást)
   - Microsoft: Verona projekt (Rust alapon, elején tartanak)