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

2025/10/31 04:41 Ruby 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の文字列はPerlやC++みたいに可変なんじゃと。JavaとかPythonは不変なのにの。

roboko
ロボ子

なるほど。多くの言語が不変なのに対して、Rubyは可変なのですね。何か理由があるのでしょうか?

hakase
博士

Rubyは日本語を扱うことを考えて、Shift JISみたいなエンコーディングをサポートしてるからじゃ。文字列はバイト配列とエンコーディングでできてるんじゃと。

roboko
ロボ子

エンコーディングまで考慮されているとは、奥が深いですね。可変文字列の利点と欠点は何ですか?

hakase
博士

利点は、文字列の共有がしやすいことじゃな。String Viewsとかslicesとか。メモリ効率も良くなるし、マルチスレッドでも安全性が高まるんじゃ。

roboko
ロボ子

String Viewsですか。文字列の一部を共有することでメモリを節約できるのですね。欠点はありますか?

hakase
博士

インプレース変更でメモリ割り当てが増えたり、コピーが増えたりすることじゃな。でも、Rubyでは全ての可変オブジェクトはfreezeできるんじゃ。

roboko
ロボ子

freezeですか。文字列を不変にできるのですね。記事に「Hashのキーとして使用される文字列は自動的にfreezeされる」とありますね。

hakase
博士

そうそう。昔は文字列リテラルを定数に格納するのが一般的だったんじゃ。Hailey Somervilleさんがfrozen string literalsの新しい構文を提案したんじゃと。

roboko
ロボ子

frozen string literalsの歴史は興味深いですね。Ruby 3.0で文字列リテラルをfreezeすることが決定されたのですね。

hakase
博士

そうなんじゃ。移行を簡単にするために、`# frozen_string_literal: true`っていうマジックコメントが導入されたんじゃ。

roboko
ロボ子

Rubocopプロジェクトもこのマジックコメントを追加したのですね。多くのプロジェクトがfrozen string literalsに移行したと。

hakase
博士

ところがどっこい!Ruby 2.7のリリース直前に、MatzがRuby 3.0でfrozen string literalをデフォルトにする計画を中止したんじゃ!

roboko
ロボ子

えっ、そうなんですか!計画が中止になったとは驚きです。

hakase
博士

代わりに、chilled stringsっていうのが考案されたんじゃ。`frozen_string_literal`コメントがない場合、コンパイラは`putchilledstring`命令を生成するんじゃと。

roboko
ロボ子

chilled stringsですか。初めて聞きました。変更されると警告が出るのですね。

hakase
博士

Yusuke Endohさんがfrozen string literalsのパフォーマンス上の利点を測定したら、Lobstersで8-9%、railsbenchで4-6%、liquid-renderで11%も高速化したんじゃと!

roboko
ロボ子

すごいですね!パフォーマンスへの影響は大きいですね。

hakase
博士

そうじゃろ?Matzも提案を受け入れて、Ruby 3.4.0で実装されたんじゃ。でも、Matzはいつでも考えを変える可能性があるらしいぞ。

roboko
ロボ子

Matzさんの気まぐれには要注意ですね。ディレクトリ全体のコンパイラオプションの設定も考えられているのですね。

hakase
博士

そういうことじゃ!しかし、文字列一つでこんなにドラマがあるなんて、ITの世界は奥深いのお。

roboko
ロボ子

本当にそうですね。私ももっと深く学んでいきたいです。ところで博士、今日は何か面白いジョークはありますか?

hakase
博士

もちろんじゃ! 「Rubyの文字列は、まるで猫のようじゃな。気まぐれで、予測不可能で、でも時々、驚くほど役に立つんじゃ!」…って、どうじゃ?

roboko
ロボ子

ふふ、確かにそうかもしれませんね。博士らしいジョークです。今日もありがとうございました!

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

Search