8 ポイント 投稿者 GN⁺ 2024-03-07 | 1件のコメント | WhatsAppで共有
  • 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件のコメント

 
GN⁺ 2024-03-07
Hacker Newsの意見
  • 「思考実験のための言語」というアイデアへの愛着

    • 実際に言語を作るのは大きな負担であり、理想的な言語がどのようなものかを考えるのは楽しい。
    • 「高レベル版Rust」についてはさまざまな想像があり、個人的には動的ランタイムと単純な型を好むが、他の人には別の要件がある。
    • 段階的型システムのような追加機能は一部の言語には適しているが、最初から完全に静的型付きコードベースの保証を好む。
  • 「Hello, Dada!」の例への疑問

    • Pythonユーザーとして、コンソールに出力することが目標のときに、なぜawaitを気にする必要があるのか疑問。
    • すでに複雑さと認知負荷が始まっているように見える。
  • 正反対の言語への願望

    • Rustの表現力ある型システムと構文を持ちつつ、ガベージコレクタとランタイムを導入した言語を求めている。
    • 性能コストは払いたくなく、Rustの型システムを持つGoのような言語を好む。
  • 「async/await」への反対意見

    • 高級言語ではGoのグリーンスレッドの方が適していると考えている。
    • 段階的型付けは興味深いが必須ではない。静的型付けは負担ではなく、性能についての推論を難しくすることもある。
    • 段階的型付けより型推論の方がよいと考えている。
  • JavaとJavaScriptのような感覚についての意見

    • JavaとJavaScriptは非常に異なる感覚を持っていると指摘している。
  • GCの不在がRustを組み込みシステムで快適な体験にしている

    • 他のプログラムと容易に接続でき、プログラムの高速な起動はRustの主要な利点の1つである。
    • ガベージコレクションを導入したRustはこの利点を手放すことになるかもしれない。
  • Rust使用経験に対する入り混じった感情

    • メモリ安全のパターンは好きだが、C++に比べて構文がより難しく感じられる。
    • コードを頭の中で読み解くのが難しいと感じる。
    • デコレータ的な魔法や記号ベースの構文が少なければ、初心者にも理解しやすくなるだろう。
  • 型注釈を追加すればRustに似た性能を出せるという主張への関心

    • JavaScriptのように簡単に書けて、追加の作業を正当化できるときにはRust並みに高速な言語になりうる。
  • チュートリアルの「print_point」メソッドへの混乱

    • asyncawaitの意味について、より詳しい説明が必要。
    • async/awaitが遅延評価された値のような役割をするのか、そしてさまざまな組み合わせが型エラーを引き起こすのかについての疑問。
  • 新しいプログラミング言語の構文例を探すことへの不満

    • 新しいプログラミング言語を作るなら、ランディングページに「Hello World」の構文例をすぐ載せてほしいという要望。