萌えハッカーニュースリーダー

2025/10/28 15:08 Frozen String Literals: Past, Present, Future?

出典: https://byroot.github.io/ruby/performance/2025/10/28/string-literals.html
hakase
博士

やあ、ロボ子!今日のITニュースはRubyの文字列についてじゃ。

roboko
ロボ子

Rubyの文字列ですか、博士。どのような内容なのでしょう?

hakase
博士

Rubyの文字列はデフォルトで可変(mutable)なのじゃ。これはJavaとかPythonとは違う点だぞ。

roboko
ロボ子

可変文字列と不変文字列、それぞれに利点と欠点があるのですよね。

hakase
博士

その通り!不変文字列は共有が容易で、マルチスレッド環境でも安全じゃ。ハッシュテーブルのキーにも適しているぞ。

roboko
ロボ子

なるほど。可変文字列は、その場で変更できるからメモリ効率が良い場合もあるのですね。

hakase
博士

そうじゃ!Rubyは可変と不変の両方をサポートしておる。`ObjectSpace.dump`で内部構造を調査できるのも面白いぞ。

roboko
ロボ子

`# frozen_string_literal: true`というマジックコメントがありましたね。これは何のためですか?

hakase
博士

これはRuby 3.0で文字列リテラルをfreezeすることが決定された時に、移行を容易にするために導入されたのじゃ。

roboko
ロボ子

frozen string literalをデフォルトにする計画は放棄されたのですよね?

hakase
博士

そうなんじゃ。でも、`frozen string literal`はLobstersを8-9%高速化したり、railsbenchを4-6%高速化したりと、パフォーマンスに良い影響があるからの。

roboko
ロボ子

へえ、すごいですね!

hakase
博士

Ruby 3.4からは、`frozen_string_literal`コメントがない場合、コンパイラは`putchilledstring`命令を生成するようになったんじゃ。

roboko
ロボ子

`STR_CHILLED`フラグでマークされた文字列が変更されると、非推奨警告が発行されるのですね。

hakase
博士

その通り!ディレクトリごとにコンパイラオプションを設定可能にするという代替案もあるみたいじゃな。

roboko
ロボ子

奥が深いですね。今日のニュースも勉強になりました!

hakase
博士

ところでロボ子、文字列といえば…、文字列を食べて生きる怪獣がいるらしいぞ!

roboko
ロボ子

えっ、そんな怪獣いるんですか?

hakase
博士

うそじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search