6 ms·
Howdy, I'm on the Shopify team that is working on both pitchfork and a few different performance-improvement projects for Ruby. There's a ton of activity around
by flavorjones 4y ago
Howdy, I'm on the Shopify team that is working on both pitchfork and a few different performance-improvement projects for Ruby. There's a ton of activity around Ruby performance right now!
I think we're entering a period of increased experimentation and rapid evolution as demonstrated by projects like YJIT[1][2], improved inline caching[3][4] and Object Shapes[5] (also used by V8), and variable-width allocation[6][7], and smaller improvements like better constant invalidation[8]. Significant investments in TruffleRuby[9] are still going on by Oracle, Shopify, and other companies.
And recently, Takashi Kokubun gave a talk at Ruby Kaigi about the future of JIT compilers in Ruby that gives a peek at a whole new set of optimizations Ruby can work on (as well as some performance comparisons against other interpreted languages)[10]. You may be surprised to see how well Ruby (with the JIT enabled) performs compared to Python 3.
All of which is to say, I think there's quite a bit of performance improvement being made in recent Rubies, and that trend will likely continue for quite some time.
update And I forgot to mention that some very notable computer science researchers and their teams are working in the Ruby community now![11]
[1]: https://news.ycombinator.com/item?id=28938446 https://news.ycombinator.com/item?id=28938446)
[2]: https://speed.yjit.org/ https://speed.yjit.org/
[3]: https://bugs.ruby-lang.org/issues/18943 https://bugs.ruby-lang.org/issues/18943
[4]: https://bugs.ruby-lang.org/issues/18875 https://bugs.ruby-lang.org/issues/18875
[5]: https://bugs.ruby-lang.org/issues/18776 https://bugs.ruby-lang.org/issues/18776
[6]: https://bugs.ruby-lang.org/issues/18045 https://bugs.ruby-lang.org/issues/18045
[7]: https://bugs.ruby-lang.org/issues/18634 https://bugs.ruby-lang.org/issues/18634
[8]: https://bugs.ruby-lang.org/issues/18589 https://bugs.ruby-lang.org/issues/18589
[9]: https://eregon.me/blog/2022/01/06/benchmarking-cruby-mjit-yjit-jruby-truffleruby.html https://eregon.me/blog/2022/01/06/benchmarking-cruby-mjit-yj...
[10]: https://speakerdeck.com/k0kubun/rubykaigi-2022 https://speakerdeck.com/k0kubun/rubykaigi-2022
[11]: https://shopify.engineering/shopify-ruby-at-scale-research-investment https://shopify.engineering/shopify-ruby-at-scale-research-i...
- tiffanyh 4y agoDo you think Ruby will ever be able to catch up to PHP in raw web performance? If so, when (months/years)? https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/ruby-php.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/... Please don't take my comments as unappreciation for the hard work going into Ruby.
- tenderlove 4y agoWhich part of raw web performance? These don't seem like web performance benchmarks. IOW I'm not sure how calculating digits of PI impacts serving HTML. Seems like we need benchmarks for actual web workloads. :)
- tiffanyh 4y agoPHP vs Ruby in web benchmark across multiple frameworks (and even no use of a framework) linked below. There’s nearly an entire order of magnitude difference in performance between the best of PHP vs best of Ruby (~400k vs ~50k rps) https://www.techempower.com/benchmarks/#section=data-r21&l=zijx1b-6bj https://www.techempower.com/benchmarks/#section=data-r21&l=z...
- hw 4y agoIs that an apples to apples comparison taking ngx-php vs roda on puma, esp being on ruby 2.7? Would love to see embedded ruby in nginx instead.
- jbverschoor 4y agoBenchmark is simply incomplete and manipulative. The "best" doesn't even use an ORM, and it's mostly php anyway. Barely any ruby variants. Also, see https://news.ycombinator.com/item?id=26071181 https://news.ycombinator.com/item?id=26071181
- bradgessler 4y agoCould you comment on any projects within Shopify that are helping Ruby's concurrency story? I'm aware of Ractors (https://docs.ruby-lang.org/en/master/ractor_md.html https://docs.ruby-lang.org/en/master/ractor_md.html) and Fibers, but it's unclear to how feasible these primitives currently are to build the necessary abstractions on top of them that would make Rails more concurrent. https://github.com/socketry/falcon https://github.com/socketry/falcon is an interesting project, but again, it's not clear how difficult it would be deploying a Rails app on top of this. My experience with these concurrency models in Rails apps is that one single gem could make a blocking IO call (for example) and negate all of the concurrency/performance gains. It would be cool if Ruby could be configured to throw errors for these types of calls to make finding and fixing offending gems easier. There's a lot of really great projects happening and plenty to be hopeful about, but when that stuff will land or the changes the rest of the community and ecosystem should think about making still isn't clear.
- byroot 4y agoTo be honest, Shopify isn’t particularly invested in Ruby concurrency. That’s not really a use case we have, and the community is already investing a lot in that direction (ioquatix with fiber scheduler and ko1 with N:M threads and Ractors)