- DadaはRustのような言語を作りつつ、JavaやJavaScriptのように感じられ、C++よりは複雑でない言語を目指す思考実験(thought experiment)
- カーネルや小規模な組み込みデバイスでの利用を目標にするのではなく、最小限のランタイムを必要とする言語を想像すると、どのような姿になるだろうか?
- Dadaは所有権ベースの言語で、Rustといくつかの類似点がある:
- Rustと同様に、Dadaはガベージコレクタを必要としない。
- Rustと同様に、Dadaはメモリ安全性とデータレース不在を保証する。
- Rustと同様に、Dadaのデータ構造はスタックに割り当てられ、フラットなメモリレイアウトを使用する。
- しかし、Dadaには多くの違いもある:
- TypeScriptのように、Dadaは漸進的型付けされた言語である:
- 型注釈なしでインタプリタ上のDadaを使い、言語の動作を把握できる。
- 慣れてきたら型注釈を追加し、Rustに近い性能を出せるコンパイラを使える。
- DadaはWebAssemblyを主なターゲットとしている:
- Dadaでネイティブターゲットをビルドすることはできるが、FFIシステムはWebAssembly Interface Typesを基盤としている。
- Dadaはオブジェクト指向的だが純粋な形ではない:
- DadaはOOとパターンマッチングのような優れた機能を組み合わせ、Scalaのような言語から着想を得ている。
- Rustと比較した場合、Dadaにはいくつかの制約がある:
- Dadaには必須のランタイムがあり、「ベアメタルシステム」やカーネルは対象にしていない。
- Dadaはインラインアセンブリや任意のunsafeコードをサポートしない。
Dadaの現状は?
- 現在、Dadaは実際には存在しておらず、いくつかの実験的プロトタイプがある:
- PLT Redexで実装された実験的な操作的意味論は
dada-lang/dada-model で見つけられる。
- Rustで書かれたインタプリタは
dada-lang/dada リポジトリにあり、Dada PlaygroundでWebAssemblyベースのビルドを試すことができる。
GN⁺の見解
- Dadaは現代のプログラミング言語トレンドを反映し、メモリ安全性やデータレース防止といったRustの中核機能を維持しつつ、漸進的型付けとオブジェクト指向的アプローチを通じて、開発者に優しい言語を志向している。
- WebAssemblyを主要ターゲットとすることは、Webベースのアプリケーション開発におけるDadaの潜在力を示しており、これはブラウザ互換性とプラットフォーム独立性を重視する現代のWeb開発トレンドに合致している。
- Dadaが実際に開発され広く使われるようになれば、既存のRust開発者にはより高水準の抽象化と利便性を提供でき、JavaやJavaScript開発者にはシステムプログラミング言語への移行を容易にできる可能性がある。
- しかし、Dadaはまだ初期段階にあり、実際の本番環境での性能と安定性が検証されていないため、企業や開発者が採用する前には慎重なアプローチが必要である。
- Dadaと類似した目標を持つ他の言語としてはKotlinやSwiftがあり、これらはすでに広く使われているため、開発者にとって良い代替候補になりうる。
1件のコメント
Hacker Newsの意見
「思考実験のための言語」というアイデアへの愛着
「Hello, Dada!」の例への疑問
awaitを気にする必要があるのか疑問。正反対の言語への願望
「async/await」への反対意見
JavaとJavaScriptのような感覚についての意見
GCの不在がRustを組み込みシステムで快適な体験にしている
Rust使用経験に対する入り混じった感情
型注釈を追加すればRustに似た性能を出せるという主張への関心
チュートリアルの「print_point」メソッドへの混乱
asyncとawaitの意味について、より詳しい説明が必要。async/awaitが遅延評価された値のような役割をするのか、そしてさまざまな組み合わせが型エラーを引き起こすのかについての疑問。新しいプログラミング言語の構文例を探すことへの不満