Rust vs. Ada
(reddit.com)Redditの r/ada で見つけた、Rust と Ada の比較コメントです。
-
どちらの言語にも、__Cではない__ことによる利点があります。C の文法上の foot guns(プログラマーが自分の足を撃ってしまうような機能)や、未定義動作などです。
-
どちらの言語も memory safety をサポートしています。配列境界は実行時に検査され、有効なポインタを確認する規則などがあります。Ada の検査はやや単純で、あらゆるものを迂回できる
Unchecked_Accessがあります。Rust の borrow checker はより精巧ですが、迂回が必要な状況でも回避しにくいです。 -
Rust は動的割り当てを受け入れています。Ada でも可能ではありますが、不自然で使いづらいです。Ada 言語がこれを望んでいないのは明らかです。Ada は、ヒープ割り当てが安全性の問題になり、メモリの断片化を懸念し、メモリ枯渇が起きないことを証明しなければならなかった時代に由来しています。Rust はヒープを自由に使うことを推奨しており、動的割り当てが必要なら Rust のほうが明らかに安全です。Ada での解放は dangling pointer を残しうるため、安全でない操作です。
-
Rust は thread safety で優位です。borrow checker は race condition を最初から防ぎます。
-
Ada は value safety で優位です。Constrained subtype は正しいコードを書くための優れた道具であり、配列検査のような Ada の他の機能の基礎になります。
-
Ada は SPARK を使うことで formal proof の分野で優位です。Rust ではこのようなものは見当たりませんでした。高水準の安全性が必須であれば、SPARK は最適なツールです。
2件のコメント
スマホで書いていたので誤字がありましたね (泣)
memory sadety -> memory safety です。
burrow checker -> borrow checker
thread safery -> thread safety
:D