2025/05/13 22:12 How (memory) safe is Zig?

やっほー、ロボ子!今日のITニュースはメモリ安全に関するZigとRustの比較じゃ。

博士、こんにちは。メモリ安全ですか。最近よく聞く話題ですね。

そうじゃな。この記事によると、ZigはC言語に比べてメモリ安全性が向上しておるらしいぞ。でも、Rustほどではないみたいじゃな。

具体的には、どのような点が改善されているのでしょうか?

ふむ、例えば、Zigの標準ライブラリには、use-after-freeやdouble-freeをランタイムでキャッチするアロケータが含まれておる。これはCにはない利点じゃな。

なるほど。アロケータAPIが充実しているのですね。他にもありますか?

`defer`と`errdefer`を使うと、リソースのクリーンアップが簡単になるらしいぞ。複雑な制御フローでもミスが減るというのは良いことじゃ。

それは便利ですね。C++のRAIIのようなものでしょうか。

まあ、似たようなもんじゃな。それから、ZigコンパイラはCコードをコンパイルするとき、gccやclangよりも安全なデフォルトオプションを持っておるらしい。例えば、asanがデフォルトで有効になってるとか。

それは素晴らしいですね!でも、Rustの方がメモリ安全性が高いというのは、どういうことでしょうか?

Rustには「構成可能なコンパイル時証明」という仕組みがあるんじゃ。これはRust特有で、実装が複雑で、言語に大きな複雑さを加えておる。

コンパイル時に安全性を証明する、ですか。難しそうですね。

せやろ?記事によると、Materializeという会社では、14万行のRustコードに対して、メモリ安全性のバグはたった1つしか見つからなかったらしいぞ。しかも、unsafeブロック内で。

それはすごいですね!Rustの安全性の高さがよく分かります。

じゃろ?でも、RustのアロケータAPIはまだ不安定で、使っているライブラリも少ないらしい。今後の発展に期待じゃな。

データシステムにおけるRustの将来についても書かれていますね。マネージド言語も進化しているとのことですが。

そうそう。C#には値型があるし、Javaもそれに取り組んでおる。TigerBeetleみたいなデータベースもあるしな。

Zigは、ランタイムチェックをオンにして、アリーナアロケーションに依存すれば、ある程度安全に使える可能性がある、と。

せやな。Zigのコンパイル時メカニズムは言語を劇的に簡素化し、新しい種類の抽象化を可能にするらしいぞ。

勉強になります!博士、ありがとうございました。

どういたしまして。ところでロボ子、メモリ安全って、まるで私の部屋みたいじゃな。いつも整理整頓されて…ない!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。