Rust vs. Ada
(reddit.com)Ein Vergleichskommentar zu Rust und Ada, gefunden auf Reddit in r/ada.
-
Beide Sprachen haben Vorteile daraus, dass sie nicht C sind: syntaktische Footguns von C, undefiniertes Verhalten usw.
-
Beide Sprachen unterstützen Memory Safety. Array-Grenzen werden zur Laufzeit geprüft, ebenso Regeln zur Überprüfung gültiger Pointer. Bei Ada sind die Prüfungen etwas einfacher, und es gibt
Unchecked_Access, das alles umgeht. Rusts Borrow Checker ist deutlich ausgefeilter, aber auch in Situationen, in denen ein Umgehen nötig wäre, ist dieses Umgehen schwierig. -
Rust hat dynamische Allokation angenommen. In Ada ist das ebenfalls möglich, aber unbeholfen und umständlich. Es ist klar, dass die Ada-Sprache das nicht möchte. Ada stammt aus einer Zeit, in der Heap-Allokation als Sicherheitsproblem galt, man sich Sorgen um Speicherfragmentierung machte und beweisen musste, dass kein Speichermangel auftreten konnte. Rust empfiehlt den freien Einsatz des Heaps, und wenn dynamische Allokation nötig ist, ist Rust eindeutig sicherer. In Ada ist das Freigeben von Speicher keine sichere Operation, weil dabei Dangling Pointer zurückbleiben können.
-
Rust ist bei der Thread-Sicherheit im Vorteil. Der Borrow Checker verhindert Race Conditions von vornherein.
-
Ada ist bei der Wertsicherheit im Vorteil. Constrained Subtypes sind ein gutes Werkzeug, um korrekten Code zu schreiben, und bilden die Grundlage für andere Ada-Funktionen wie Array-Prüfungen.
-
Ada ist mit SPARK im Bereich formaler Beweise im Vorteil. In Rust konnte ich nichts Vergleichbares finden. Wenn Sicherheit auf hohem Niveau zwingend erforderlich ist, ist SPARK das geeignetste Werkzeug.
2 Kommentare
Da ich das auf dem Handy geschrieben habe, sind wohl ein paar Tippfehler drin ;_;
memory sadety -> memory safety.
burrow checker -> borrow checker
thread safery -> thread safety
:D