<story><title>Ruby 2.6.0-preview2 released with JIT</title><url>https://www.ruby-lang.org/en/news/2018/05/31/ruby-2-6-0-preview2-released/</url></story><parent_chain><item><author>jashmatthews</author><text>Sinatra + Sequel is already very competitive in web performance with Go + Gin[1]. It&amp;#x27;s the Rails convenience stuff which slows things down massively. MJIT could probably bring Rails in line with Sinatra though.&lt;p&gt;Between Ruby 1.8 and 2.5, performance has improved around 13x in tight loops[2]. The Rails performance issue has been massively overblown since 1.9 was released.&lt;p&gt;Ruby 1.8 was a tree walking interpreter, so the move to a bytecode VM in 1.9 was a huge leap in performance. Twitter bailed to the JVM before moving to 1.9. A lot of those 10-100x performance differences to the JVM are gone thanks to the bytecode VM and generational GC.&lt;p&gt;Bytecode VMs all have the same fundamental problem of instruction dispatch overhead, they&amp;#x27;re basically executing different C functions depending on input.&lt;p&gt;Doing _anything_ to reduce this improves performance dramatically, even just spitting out the instruction source code into a giant C function, compiling it, and calling that in place of the original method. Another 10x improvement on tight loops should not be a problem.&lt;p&gt;[1] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.techempower.com&amp;#x2F;benchmarks&amp;#x2F;#section=data-r15&amp;amp;hw=ph&amp;amp;test=fortune&amp;amp;l=hr9kov&amp;amp;f=zik073-zik0zj-zik0zj-zijzen-zik0zj-zijunz-zik0zj-cn3&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.techempower.com&amp;#x2F;benchmarks&amp;#x2F;#section=data-r15&amp;amp;hw=...&lt;/a&gt;&lt;p&gt;[2] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;mame&amp;#x2F;optcarrot&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;doc&amp;#x2F;benchmark.md&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;mame&amp;#x2F;optcarrot&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;doc&amp;#x2F;benchmark....&lt;/a&gt;</text></item><item><author>sho</author><text>&amp;gt; We’re going to implement method iniling in JIT compiler, which is expected to increase Ruby’s performance in order of magnitude&lt;p&gt;An order of magnitude as in .. 10x? This seems too good to be true. Half the arguments against Rails melt away like butter if that&amp;#x27;s truly the case.&lt;p&gt;Anyone with a better understanding of the details care to comment on the likelihood of these performance gains being actually realised, and if not, what we might realistically expect?</text></item></parent_chain><comment><author>chanks</author><text>And Roda (&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jeremyevans&amp;#x2F;roda&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jeremyevans&amp;#x2F;roda&lt;/a&gt;) beats Gin, if you include it: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.techempower.com&amp;#x2F;benchmarks&amp;#x2F;#section=data-r15&amp;amp;hw=ph&amp;amp;test=fortune&amp;amp;l=hr9kov&amp;amp;f=zik073-zik0zj-zik0zj-zijzen-zik0zj-zijunz-zijbpb-cn3&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.techempower.com&amp;#x2F;benchmarks&amp;#x2F;#section=data-r15&amp;amp;hw=...&lt;/a&gt;</text></comment>
<story><title>Ruby 2.6.0-preview2 released with JIT</title><url>https://www.ruby-lang.org/en/news/2018/05/31/ruby-2-6-0-preview2-released/</url></story><parent_chain><item><author>jashmatthews</author><text>Sinatra + Sequel is already very competitive in web performance with Go + Gin[1]. It&amp;#x27;s the Rails convenience stuff which slows things down massively. MJIT could probably bring Rails in line with Sinatra though.&lt;p&gt;Between Ruby 1.8 and 2.5, performance has improved around 13x in tight loops[2]. The Rails performance issue has been massively overblown since 1.9 was released.&lt;p&gt;Ruby 1.8 was a tree walking interpreter, so the move to a bytecode VM in 1.9 was a huge leap in performance. Twitter bailed to the JVM before moving to 1.9. A lot of those 10-100x performance differences to the JVM are gone thanks to the bytecode VM and generational GC.&lt;p&gt;Bytecode VMs all have the same fundamental problem of instruction dispatch overhead, they&amp;#x27;re basically executing different C functions depending on input.&lt;p&gt;Doing _anything_ to reduce this improves performance dramatically, even just spitting out the instruction source code into a giant C function, compiling it, and calling that in place of the original method. Another 10x improvement on tight loops should not be a problem.&lt;p&gt;[1] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.techempower.com&amp;#x2F;benchmarks&amp;#x2F;#section=data-r15&amp;amp;hw=ph&amp;amp;test=fortune&amp;amp;l=hr9kov&amp;amp;f=zik073-zik0zj-zik0zj-zijzen-zik0zj-zijunz-zik0zj-cn3&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.techempower.com&amp;#x2F;benchmarks&amp;#x2F;#section=data-r15&amp;amp;hw=...&lt;/a&gt;&lt;p&gt;[2] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;mame&amp;#x2F;optcarrot&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;doc&amp;#x2F;benchmark.md&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;mame&amp;#x2F;optcarrot&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;doc&amp;#x2F;benchmark....&lt;/a&gt;</text></item><item><author>sho</author><text>&amp;gt; We’re going to implement method iniling in JIT compiler, which is expected to increase Ruby’s performance in order of magnitude&lt;p&gt;An order of magnitude as in .. 10x? This seems too good to be true. Half the arguments against Rails melt away like butter if that&amp;#x27;s truly the case.&lt;p&gt;Anyone with a better understanding of the details care to comment on the likelihood of these performance gains being actually realised, and if not, what we might realistically expect?</text></item></parent_chain><comment><author>meesterdude</author><text>I would have never thought a ruby stack would come anywhere close to Go performance. The path to optimization used to mean abstracting the really crazy parts into a Go microservice for things that just needed absurd responsivity; but it&amp;#x27;s clear now that a slim ruby stack could also be very effective - and without needing to learn a new language. Worthwhile to at least explore before going Go.&lt;p&gt;Nor did i know that twitter jumped out of rails before ruby got performant. Which means the argument that twitter outgrew rails isn&amp;#x27;t so correct anymore.&lt;p&gt;still, thanks for this insightful comment.</text></comment>