1 ポイント 投稿者 GN⁺ 2024-09-27 | 1件のコメント | WhatsAppで共有

Rustの書き直し

  • Rustプログラミング言語は第一世代の製品のように感じられる
  • Rustの初期の魅力: 代数的データ型、メモリ安全性、性能低下なし、モダンなパッケージマネージャ
  • 4年間使った後でも、Rustは常に完璧というわけではない
  • 言語の進化が非常に遅くなっている
  • 多くの不安定機能が安定版Rustに取り込まれていない

素晴らしい言語

  • Rustコンパイラをフォークして、新しい「seph」エディションを作りたい
  • Rustの既存機能を維持しつつ、新機能を追加できる

関数トレイト(効果)

  • Rustは構造体に対してトレイトを定義するが、関数に対してもトレイトを定義する必要がある
  • 関数のさまざまな特性を表現できる
    • 関数がパニックを起こすかどうか
    • 固定スタックサイズを持つかどうか
    • 関数が最後まで実行されるのか、それとも途中で待機するのか
    • 関数が純粋かどうか
    • 関数がunsafeなコードを実行するかどうか
    • 関数が終了を保証するかどうか

コンパイル時機能

  • 多くのRustプロジェクトは多数のサードパーティ製クレートを使っている
  • これらのクレートはサプライチェーンリスクを高める
  • セキュリティに敏感な関数呼び出しを明示的に許可するための機能追加を提案
  • fs_writeのような機能を呼び出すには明示的な許可が必要

Pin、Move、および構造体の借用

  • PinはRustの借用チェッカーの問題を解決するための複雑なハックである
  • Pinの代わりにMoveマーカートレイトを使う方が合理的
  • 構造体フィールドを借用中としてマークできる構文の追加を提案
  • MoveマーカートレイトとMoverトレイトの導入を提案

コンパイル時

  • Zigのcomptime機能を導入してRustのマクロ言語を置き換える
  • コンパイル時にコードを実行できる小さなインタプリタを追加
  • Rustのマクロ言語の代わりにRust自体を使う

小さな修正

  • impl<T: Copy> for Range<T>の修正
  • 関連型を持つderiveの修正
  • if-let式で論理ANDをサポート
  • 生ポインタの使い勝手を改善
  • すべての組み込みコレクション型にAllocator引数を追加

まとめの考え

  • 非同期機能も改善が必要だが、別の投稿が必要
  • 変更の大半は既存のRustと互換性がない
  • 新しいRustエディションが必要になるかもしれない
  • GitHubのRFCプロセスに疲れ果てる前に、直接コンパイラをフォークすることを検討中

GN⁺のまとめ

  • Rustは初期の魅力にもかかわらず、完璧ではない
  • 言語の進化は遅く、多くの不安定機能が安定版Rustに取り込まれていない
  • 関数トレイト、コンパイル時機能、PinとMoveの改善など、さまざまな提案がある
  • これらの提案はRustの使い勝手を大きく改善できる
  • 似た機能を持つ他の言語としてZigがある

1件のコメント

 
GN⁺ 2024-09-27
Hacker Newsの意見
  • Rust RFCプロセスに関する意見

    • Rustコアチームが新機能の追加を難しくしているのは、言語の一貫性と予測可能性を維持するために正しい判断である
    • Swiftは多くの新機能の導入によって複雑化し、最終的にSwiftを諦めることになった
    • Rustは可能な限り簡潔に保つことが重要である
  • Rustの依存性問題

    • Cargo-watch crateを例に挙げると、単純なファイル監視アプリであるにもかかわらず、依存関係のためにコード行数が400万行に達している
  • Rustの現在の状態

    • Rustは今や「広範な採用のための作業」の段階にある
    • 遅い機能開発は自然で健全な現象であり、誤った設計上の選択はさらに大きな害をもたらしうる
    • Rustの魅力は新機能よりも、メモリ安全性とGCなしで本番投入可能な言語である点にある
  • Rustの再記述に関する意見

    • RustをRustで書き直すことは、メタ風刺的なジョークのように見えた
  • Rustの意思決定プロセスへの不満

    • 遅い意思決定プロセスへの不満はあるが、これは技術的な問題というより人と時間の問題である
    • 一部の古い機能は停滞しているが、多くの機能は安定化される予定がない
  • Josh Triplettのコメント

    • 特定の例が誤っていることを指摘し、関連リンクを共有した
  • Rustの複雑性に関する意見

    • Rustはすでに多くの機能を持っているが、さらに多くの機能を求める人々がいる
    • Zigはよりシンプルで高速であり、コミュニティのドラマも少ない
  • Rustの速度に関する意見

    • プロジェクトが成熟するにつれて、既存機能を磨き上げるために多くの努力が必要になる
    • チーム間の協力は難しくなっており、これを改善するためのプロジェクト目標がある
  • Mutex改善に関する意見

    • Rustの同期プリミティブを改善するために多くの努力が払われてきた
    • async関数のような機能が追加されており、これはより複雑な機能を実装するための基盤となる
  • Rustの機能開発速度に関する意見

    • 言語が速すぎる、あるいは遅すぎるペースで進化していると不満を言う人々がいる
    • 特定の機能は遅々として進まないが、多くの活動が進行中である
  • Rustの機能設計に関する意見

    • 関数トレイトのような機能では、最近大規模な設計探索が行われた
    • コンパイル時機能は言語レベルでは解決できず、WebAssemblyのようなソリューションのほうが可能性が高い
  • Rustの借用チェッカー問題

    • 自己参照構造を理解するのは非常に難しい問題である
    • 部分借用をサポートする方法はすでに分かっているが、それを型システムに露出させることが問題である
  • Rustのコンパイル時機能

    • マクロルールをより強力にするためのRFCが作成された
    • プログラム的な構文解析のために、さらに多くの作業が必要である
  • Rustの不安定機能

    • 多くの不安定機能があり、それらを整理する必要がある
  • Rustの進化速度に関する意見

    • Mozillaの離脱によってプロジェクトは遅くなったが、誤った道に進むよりはましである