Ruby - GCC 的依赖文件解析优化

标签 ruby parsing gcc

我正在寻找有关以下用 Ruby 编写的代码的优化想法。它在依赖文件中查找头文件依赖项(由 GCC 使用 gcc -M -MM -MF 生成)

我运行了 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

depends 文件包含由 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 - GCC 的依赖文件解析优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8353917/

相关文章:

json - Typescript,Angular 2 - 将 Json 解析为 http 中的对象

python : How to find block comments string in Python

c++ - 如何解决由于参数中的默认构造函数导致的函数重载不明确

ruby - 在 Ruby 中对字符串进行哈希处理

jquery - Rails - 仅在视觉效果完成后调用 Ajax

ruby - I18n::InvalidLocaleData:I18n gem 在 js 导出中有问题

c - 帮助理解 x86 内联汇编中的 DIV 指令

c - GCC + 内联汇编 - notl 上的意外段错误

Ruby:案例陈述中的正则表达式

ruby - MiniTest::Spec 文件应该如何命名?