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

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

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

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

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

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

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

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

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

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

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

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

へえ、すごいですね!

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

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

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

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

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

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

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