🐷

[Feature #21216] Set を Ruby のコアクラスとして実装するチケット

に公開

[Feature #21216] Implement Set as a core class

  • Set を Ruby のコアクラスとして実装するチケット
  • 現状の Set は Ruby で実装されており、内部の実装で Hash を使用している
  • しかし Hash を利用することで Set 内で不要な値を保存してしまい効率が悪い
  • これをコアクラス = CRuby レイヤーで実装することで効率化を図りたい、という旨のチケット
    • これによりメモリの使用量が33%〜20%少なくなるらしい
    • 基本的な実装のアルゴリズムなどは Ruby の実装と変わらないみたい
      • Set#divide が一部変わってはいるらしい
    • 全体的なベンチマークも高速化しているみたいですね
    • その他、いくつか差異があるんですが詳しくはチケットを参照
  • これに関しては開発版の Ruby 3.5-dev で既に反映済みとなっています
  • Set を使っているプロダクトはもしかしたら Ruby 3.5 で影響があるかもしれないので注意する必要があるかもしれません
GitHubで編集を提案

Discussion