正規表現のキャッシュクラス on Ruby

#
# 正規表現キャッシュクラス
#
class PatternCache
  @@regexCache = Hash.new
  
  #
  # イニシャライザ
  #
  def initialize   
  end
  
  #
  # コンパイル済み正規表現を取得する
  # @param [String] regex 正規表現
  # @return [Regexp] コンパイル済み正規表現
  #
  def self.get(regex)
    if !@@regexCache[regex] then
      @@regexCache[regex] = Regexp.new(regex)
    end
    
    return @@regexCache[regex]
  end
end

文字列で正規表現を組み立てるケースを想定しています。
Meteor内部で使っているので、テスト済みです。
コメントはYARDの形式。
並列処理は考慮していないので、ThreadクラスやFiberクラスを
利用した複数スレッドを扱うスクリプトでは排他制御が必要、
このままでの利用は厳禁です。
上記のクラスではキーに対して値が一位に決まるので、Threadクラスや
Fiberクラスを利用した複数スレッドを扱う(並列処理を行う)スクリプト
でもそのまま使えるはず。
並列処理で利用する場合には念のため、テストしてから利用して下さい。
ハッシュのデータが壊れるようであれば、排他制御をするように改造して下さい。


RubyはWEBでググった限りでは実行環境サイドに正規表現コンパイル結果をキャッシュする機能はないようです。


Pythonのre#compileメソッドはコンパイルした正規表現を実行環境サイドでキャッシュする模様。