プログラミング言語に欲しい3つの優れたアイデア
A Few Good Ideas in Programming Languages
Crystalのflow typing、Rustのborrow checking、D言語のcontract programmingという、筆者が愛する3つの言語機能を紹介。flow typingはコンパイル言語を動的型付けのように感じさせ、borrow checkingはデータ競合をコンパイル時に静的に防ぎ、contract programmingは不変条件を構文レベルで記述できる。それぞれが並行性やメモリ安全、正確性といった本質的な問題に対するエレガントな解決策であると説く。
borrow checkerはデータ競合の問題に対する非常にエレガントな解決策であり、コンパイル時のチェックと複雑さの増加というコストだけで実現されるゼロコスト抽象化です。
HNでの議論
71- vallerie
物議を醸すのは承知の上ですが、私はC++26で実装されるコントラクトアサーションが本当に大好きです。
これがあると、あなた自身、あなたのコードの利用者、IDE、エージェントなどが、メソッドの契約をずっと速く理解できるようになります。メソッド本体を全部読まなくても済むからです。事前条件が正しくて事後条件が失敗したなら、そのバグレポートはそのメソッドの所有者に送られるべきだとかなり確信できます。事前条件が間違っているか、メソッドが間違っているかのどちらかですから。
- phtrivier
細かいことを言うなら、契約による設計はEiffelから来たものだって指摘すべきでしょうか?
(でも、DよりもEiffelを書いた人がさらに少ない可能性もあるので、何とも言えませんが)
- prydt
これがここに投稿されるとは思っていませんでした。長い間のROM専です。
私はプログラミング言語の設計と人間工学にとても興味があります。もっと普及してほしいニッチなPL機能は何ですか?
- malephex
借用チェック(イライラするけど)は良いアイデアです。Dの不変条件については知らなかったので、今は自分の言語のクラスに欲しいです!
でもフロー型付け?それは足を撃ち抜く罠のように思えます…
- spankalee
良いリストですね。私が今取り組んでいる新しい言語(Zenaという名前です: https://zena-lang.dev/)には、これらすべてが何らかの形で入っています:
静的型と共用体があれば、制御フロー解析とナローイングは過剰なキャストを避けるために重要です。さらにパターンマッチングもあれば、型チェック、状態抽出、分岐がすべて1つの式になる、とても素敵なスタイルになります。
借用チェック。ZenaはGC言語ですが、Wasmで動作し、多くのWasmリソースは外部にあるため、Zenaにはリソースを管理し、不要になったときに破棄するためのアフィン型と第二級値があります。GC + 借用は素晴らしい組み合わせです。すべてに借用が必要なわけではなく、いくつかの脱出ハッチを備えたレキシカルライフタイムでほとんどのことをカバーできるからです。所有権システムは構造化並行性をモデル化するのにも最適です。
借用チェックが完了したら、契約に取り組む予定です。その動機はAI生成コードです。人間がまだレビューするとしても、実装よりも契約をレビューする方が、大量の変更を管理しやすくなります。
さらにいくつかの良いアイデアが広まってほしいです:
形式検証。契約は仕様言語への良い足がかりになるはずで、そこから証明言語とチェッカーへと進めます。これはAI生成コードにも良いはずです。
数値単位型/次元解析を伴う測定単位。変数が単なるf64ではなく、メートルのf64であり、秒で割ると速度になる、と言えるべきです。なぜこれが普及していないのか分かりません […]