[ruby/irb] Detect multiple lines output simplify

The old implementation performance test code:

    require 'objspace'
    puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
    /\A.*\Z/ !~ ('abc' * 20_000_000)
    puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)

and run `time test.rb`:

    2.5868 MB
    62.226 MB

    real    0m1.307s
    user    0m0.452s
    sys     0m0.797s

The new implementation performance test code:

    require 'objspace'
    puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
    ('abc' * 20_000_000).include?("\n")
    puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)

and run `time test.rb`:

    2.5861 MB
    62.226 MB

    real    0m0.132s
    user    0m0.088s
    sys     0m0.042s

https://github.com/ruby/irb/commit/40d6610baf
This commit is contained in:
aycabta 2020-02-25 20:32:07 +09:00
Родитель b08c1bea36
Коммит ffbb162f1a
1 изменённых файлов: 1 добавлений и 1 удалений

Просмотреть файл

@ -738,7 +738,7 @@ module IRB
def output_value # :nodoc:
str = @context.inspect_last_value
multiline_p = /\A.*\Z/ !~ str
multiline_p = str.include?("\n")
if multiline_p && @context.newline_before_multiline_output?
printf @context.return_format, "\n#{str}"
else