2
아래의 루비 코드에서 'eval'은 'def'보다 10 배 이상 느립니다.왜 루비의 'eval'이 그렇게 느린가요?
나는 'eval'이 문자열을 구문 분석해야한다는 것을 이해하지만이 예제에서는 한 번만 수행하면된다고 가정합니다.
require "benchmark"
GC.disable
eval "def run1; 10_000.times { #{"$a[5]\n" * 10_000} } end"
def run2
10_000.times { "#{"$a[5]\n" * 10_000}" }
end
$a = [1,2,3,4,5,6,7,8,9,10]
puts "run1:"
puts Benchmark.measure { run1 }
puts "run2:"
puts Benchmark.measure { run2 }
를 사용하여 작은 따옴표 (나는 벤치 마크는 기본에 내려 치기 호출 제거)입니다 보간되는 것을 막기위한 eval 된 문자열의 가장 바깥 쪽 부분 (따라서 여러분이 벤치마킹한다고 생각하는 코드와는 다릅니다). 닉 브이 (Nick Veys)의 대답은 당신의 자세가 얼마나 다른지를 보여줍니다. –