Project

General

Profile

Actions

Feature #18042

closed

YARV code optimization

Added by motoroller (Iskandar Gohar) over 2 years ago. Updated over 2 years ago.

Status:
Feedback
Assignee:
-
Target version:
-
[ruby-core:104665]

Description

Hi! Long period of time I think about programmatically code optimization for YARV. In compiled languages like C/C++ the compiler can do whatever it wants with the code and does for performance optimization. Firstly, ruby developers think about code readability, secondary about performance. Because ruby translates .rb file into bytecode we can do whit this bytecode anything to win in performance and do not lose in the expressiveness of the code.

But I came to the conclusion that a static bytecode optimizer is not possible, because in translation stage we don't know about which object/class we use. So, did someone think about runtime code analyzing? If we have some type of statistic we can dynamically transform bytecode to optimized version, use optimized version of C functions. Also I thought if we have statistic we can reduce some GC overhead

# before  
array.map(&:method1).map(&:method2) 

# if I know for sure that map is not overridden and calls from Enumerable I can rebuild code like this 
array.map do 
  _1.method1 
  _1.method2 
end 

In this example 2 map calls generate one redundant array which will be destructed by GC, so we can transform it to seconds version. It can be applied not only for map/select functions, but many other.

What do you think about it?

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0