ruby - Ruby-GCCの依存ファイル解析の最適化

ruby parsing gcc

Rubyで書かれた以下のコードに関する最適化のアイデアを探しています。依存ファイル(gcc -M -MM -MFを使用してGCCによって生成された)でヘッダーファイルの依存関係を探します。

Rubyプロファイラーを実行したところ、CPU時間のほとんどが以下のArray#each関数に費やされていることがわかりました。

lines = File.readlines(depends_file)
lines.each do |line|
  if line.include?(".h") then
    line.lstrip.rstrip.chomp("\\").split(' ').each do |line|
      header_dependencies << line
    end
  end
end


依存ファイルには、gccの-Mオプションで指定されたmakefileルール形式の依存関係が含まれています。GCC's Preprocessor Optionsを参照してください。これが私のプロジェクトの例です-

CyclicRedundancyCheck.o: src/CyclicRedundancyCheck.c \
 inc/CyclicRedundancyCheck.h inc/StdDefs.h


誰かが別の大きく最適化されたソリューションを投稿してくれませんか?
答え
大幅に最適化されていませんが、ここでは少し高速です(私のテストケースでは約20%):

File.open(depends_file, 'r') do | io |
  io.each do |line|
    next unless line.include?('.h')
    header_dependencies.concat(line.split)
  end
end
header_dependencies.delete('\\')


Ruby自体でもっと多くを得ることができるとは思いません。これが本当に遅すぎる場合は、(部分的に)Cで(拡張機能として)プログラミングすることを検討してください。

また、このアプローチは堅牢ではありません。例えば。

 foo.o: src/ext.hlib/foo.c \


誤って一致します。しかし、より堅牢にすることは、おそらくコストパフォーマンスになります。
関連記事

ruby - RubyでAWS ELBのホストゾーンIDを取得するにはどうすればよいですか?

ruby-on-rails - このアクティブレコードの関連付けを行う方法

ruby-on-rails - Mac OS XにRubyとGemを再インストールする方法

ruby - ImageMagickを使用して、ミラーリングされたテキストを画像に描画するにはどうすればよいですか?

ruby-on-rails - rspecテストの前にレールを開始しますか?

mysql - 正規表現を使用してSHOW ENGINE INNODB STATUSをRubyで解析する

jquery - ルーティングエラー一致するルートがありません[GET] "/ microposts / 304-マイクロポストの削除-Michael Hartlのrailstutorial.org第11章

ruby - Rubyアプリケーションをソフトリスタートする方法は?

ruby - Ruby gemのインストールディレクトリが間違っている

ruby - 画面キャプチャ用のRails gem