๐Ÿš€โœจ Behold the thrilling saga of ZJIT's "new" optimization, which shaves milliseconds off your Rails app by not doing things twice! After a mere 10 months, #ZJIT finally outpaces #YJIT in a groundbreaking microbenchmark that absolutely everyone uses. ๐Ÿ˜ด๐Ÿ”ง
https://railsatscale.com/2026-03-18-how-zjit-removes-redundant-object-loads-and-stores/ #RailsOptimization #TechNews #PerformanceImprovement #HackerNews #ngated
How ZJIT removes redundant object loads and stores

ZJITโ€™s optimizer now removes redundant object loads and stores, improving JIT performance of CRubyโ€™s shape system. This post explains how the optimization works.

Rails at Scale

Ruby 4.0.2 ์ •์‹ ์ถœ์‹œ ๋ฐ YJIT ๋ฒ„๊ทธ ์ˆ˜์ • ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด

Ruby 4.0.2๋Š” Puma ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” YJIT ๊ด€๋ จ NoMethodError ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ๋™ ์•ˆ์ •์„ฑ์„ ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚จ ์ •๊ธฐ ์—…๋ฐ์ดํŠธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

#yjit
https://ruby-news.kr/articles/ruby-4-0-2-released-ruby

Ruby 4.0.2 ์ •์‹ ์ถœ์‹œ ๋ฐ YJIT ๋ฒ„๊ทธ ์ˆ˜์ • ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด

Ruby 4.0.2๋Š” Puma ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” YJIT ๊ด€๋ จ NoMethodError ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ๋™ ์•ˆ์ •์„ฑ์„ ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚จ ์ •๊ธฐ ์—…๋ฐ์ดํŠธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

Ruby-News

Ruby 4.0.2 ์ •์‹ ์ถœ์‹œ ๋ฐ YJIT ๋ฒ„๊ทธ ์ˆ˜์ • ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด

Ruby 4.0.2๋Š” Puma ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” YJIT ๊ด€๋ จ NoMethodError ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ๋™ ์•ˆ์ •์„ฑ์„ ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚จ ์ •๊ธฐ ์—…๋ฐ์ดํŠธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

๐Ÿ”— ์›๋ฌธ ๋ณด๊ธฐ

Ruby 4.0.2 ์ •์‹ ์ถœ์‹œ ๋ฐ YJIT ๋ฒ„๊ทธ ์ˆ˜์ • ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด

Ruby 4.0.2๋Š” Puma ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” YJIT ๊ด€๋ จ NoMethodError ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ๋™ ์•ˆ์ •์„ฑ์„ ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚จ ์ •๊ธฐ ์—…๋ฐ์ดํŠธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

Ruby-News

2026๋…„์˜ ๋ ˆ์ผ์ฆˆ ์Šคํƒ€ํŠธ์—…: ๋‘๋ ค์›€์„ ๋„˜์–ด ํ˜์‹ ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋ฃจ๋น„ ์ƒํƒœ๊ณ„

๋ฃจ๋น„ ์˜จ ๋ ˆ์ผ์ฆˆ๋Š” ๋‹จ์ˆœํ•œ ์œ ์‚ฐ์ด ์•„๋‹ˆ๋ผ Bold, Kora, Intercom Finn๊ณผ ๊ฐ™์€ ์ตœ์‹  AI ๊ธฐ๋ฐ˜ ํ˜์‹  ์Šคํƒ€ํŠธ์—…๋“ค์ด ์„ ํƒํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ƒ์‚ฐ์„ฑ ๋„๊ตฌ๋กœ ์ž…์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

#yjit
https://ruby-news.kr/articles/rubyconfth-2026-irina-nazarova-keynote-startups-on-rails-in-2026

2026๋…„์˜ ๋ ˆ์ผ์ฆˆ ์Šคํƒ€ํŠธ์—…: ๋‘๋ ค์›€์„ ๋„˜์–ด ํ˜์‹ ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋ฃจ๋น„ ์ƒํƒœ๊ณ„

๋ฃจ๋น„ ์˜จ ๋ ˆ์ผ์ฆˆ๋Š” ๋‹จ์ˆœํ•œ ์œ ์‚ฐ์ด ์•„๋‹ˆ๋ผ Bold, Kora, Intercom Finn๊ณผ ๊ฐ™์€ ์ตœ์‹  AI ๊ธฐ๋ฐ˜ ํ˜์‹  ์Šคํƒ€ํŠธ์—…๋“ค์ด ์„ ํƒํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ƒ์‚ฐ์„ฑ ๋„๊ตฌ๋กœ ์ž…์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Ruby-News

Ruby Game Boy ์—๋ฎฌ๋ ˆ์ดํ„ฐ ์ œ์ž‘๊ธฐ: AI์™€ ํ•จ๊ป˜ํ•œ 10๋…„ ๋งŒ์˜ ๋ถ€ํ™œ

๋ฐœํ‘œ์ž Colby Swandale์€ 10๋…„ ์ „ ๊ฐœ๋ฐœ์„ ์ค‘๋‹จํ–ˆ๋˜ Ruby ๊ธฐ๋ฐ˜ Game Boy ์—๋ฎฌ๋ ˆ์ดํ„ฐ Waterfell์„ ์ตœ์‹  AI ๋„๊ตฌ์ธ Claude Code๋ฅผ ํ™œ์šฉํ•ด ์™„์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

#yjit
https://ruby-news.kr/articles/ML8o19OeeRo

Ruby Game Boy ์—๋ฎฌ๋ ˆ์ดํ„ฐ ์ œ์ž‘๊ธฐ: AI์™€ ํ•จ๊ป˜ํ•œ 10๋…„ ๋งŒ์˜ ๋ถ€ํ™œ

๋ฐœํ‘œ์ž Colby Swandale์€ 10๋…„ ์ „ ๊ฐœ๋ฐœ์„ ์ค‘๋‹จํ–ˆ๋˜ Ruby ๊ธฐ๋ฐ˜ Game Boy ์—๋ฎฌ๋ ˆ์ดํ„ฐ Waterfell์„ ์ตœ์‹  AI ๋„๊ตฌ์ธ Claude Code๋ฅผ ํ™œ์šฉํ•ด ์™„์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Ruby-News || ๋ฃจ๋น„ AI ๋‰ด์Šค

Ruby 4.0์˜ ์ƒˆ๋กœ์šด ์‹คํ—˜์  ์ปดํŒŒ์ผ๋Ÿฌ ZJIT์™€ YJIT์˜ ์„ฑ๋Šฅ ๋น„๊ต ๋ฐ 2026๋…„ ์šด์˜ ๊ฐ€์ด๋“œ

Ruby 4.0์—์„œ ๋„์ž…๋œ ZJIT๋Š” ๋ฉ”์„œ๋“œ ๊ธฐ๋ฐ˜์˜ ์‹คํ—˜์  JIT ์ปดํŒŒ์ผ๋Ÿฌ๋กœ, ๊ธฐ์กด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ณด๋‹ค ๋น ๋ฅด์ง€๋งŒ ํ˜„์žฌ๋Š” YJIT์˜ ์„ฑ๋Šฅ์— ๋ฏธ์น˜์ง€ ๋ชปํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

#yjit
https://ruby-news.kr/articles/ruby-4-0s-zjit-vs-yjit-benchmarks-safest-settings-and-what-to-try-in-2026-8dd32bf345f5

Ruby 4.0์˜ ์ƒˆ๋กœ์šด ์‹คํ—˜์  ์ปดํŒŒ์ผ๋Ÿฌ ZJIT์™€ YJIT์˜ ์„ฑ๋Šฅ ๋น„๊ต ๋ฐ 2026๋…„ ์šด์˜ ๊ฐ€์ด๋“œ

์ตœ์‹  Ruby, Rails, AI ๊ด€๋ จ ๋‰ด์Šค์™€ ํŠธ๋ Œ๋“œ๋ฅผ ํ•œ๊ณณ์—์„œ ๋งŒ๋‚˜๋ณด์„ธ์š”

Ruby-News || ๋ฃจ๋น„ AI ๋‰ด์Šค

Ruby 4.0์˜ ZJIT: ๋А๋ฆฌ์ง€๋งŒ ํƒ์›”ํ•œ ์žฅ๊ธฐ์  ์•„ํ‚คํ…์ฒ˜ ์„ ํƒ

Ruby 4.0์— ๋„์ž…๋œ ZJIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” YJIT๋ณด๋‹ค ์ดˆ๊ธฐ ์„ฑ๋Šฅ์€ ๋А๋ฆฌ์ง€๋งŒ, ์žฅ๊ธฐ์ ์ธ ํ™•์žฅ์„ฑ๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ๋ฅผ ์œ„ํ•œ "๊ต๊ณผ์„œ์ " ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

#yjit
https://ruby-news.kr/articles/zjit-explained-why-ruby-4-0s-slower-jit-compiler-is-actually-a-genius-move-c04f3ef7aa0c

Ruby 4.0์˜ ZJIT: ๋А๋ฆฌ์ง€๋งŒ ํƒ์›”ํ•œ ์žฅ๊ธฐ์  ์•„ํ‚คํ…์ฒ˜ ์„ ํƒ

์ตœ์‹  Ruby, Rails, AI ๊ด€๋ จ ๋‰ด์Šค์™€ ํŠธ๋ Œ๋“œ๋ฅผ ํ•œ๊ณณ์—์„œ ๋งŒ๋‚˜๋ณด์„ธ์š”

Ruby-News || ๋ฃจ๋น„ AI ๋‰ด์Šค

Ruby ์ฝ”์–ด ์–ธ์–ด ์ฃผ์š” ๋ณ€๊ฒฝ ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„  ์‚ฌํ•ญ ์š”์•ฝ

YJIT ํ™œ์„ฑํ™” ์‹œ ๊ฐ์ฒด ํ• ๋‹น ์„ฑ๋Šฅ์ด ์œ„์น˜ ์ธ์ž ์•ฝ 2.3๋ฐฐ, ํ‚ค์›Œ๋“œ ์ธ์ž ์•ฝ 6๋ฐฐ๋กœ ๋Œ€ํญ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

#yjit
https://ruby-news.kr/articles/ruby_400

Ruby ์ฝ”์–ด ์–ธ์–ด ์ฃผ์š” ๋ณ€๊ฒฝ ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„  ์‚ฌํ•ญ ์š”์•ฝ

์ตœ์‹  Ruby, Rails, AI ๊ด€๋ จ ๋‰ด์Šค์™€ ํŠธ๋ Œ๋“œ๋ฅผ ํ•œ๊ณณ์—์„œ ๋งŒ๋‚˜๋ณด์„ธ์š”

Ruby-News || ๋ฃจ๋น„ AI ๋‰ด์Šค

Solved today's #adventofcode part 2 non-discretely. Took me four hours, maybe more. Memory requirements are minimal and my running time is slightly above two seconds (#Ruby with #YJIT).

The code is here: https://codeberg.org/der-scheme/adventofcode.rb/src/branch/main/2025/09

The repo also contains a visualization in case somebody needs it.

Approach in content warning below:

Cookie monster!

I went kinda nuts on yesterday's #adventofcode trying to optimize my #Ruby implementation. The resulting code is nothing special, but here it is, for reference: https://codeberg.org/der-scheme/adventofcode.rb/src/branch/main/2025/08

I consistently achieve sub 2.5 seconds with #YJIT for all four (both parts on both input and test input) runs, including I/O and all the process spawning stuff, measured by `time ./test`. No JIT is about 25โ€“30% slower. I have no idea how fast this is, but I'm stating it for transparency.

I consider myself a smooth-brain, but here's what I believe to have learned (some very obvious, others not so much):
- Even if you don't care about your return values (discarding them), YJIT does. So if the return value is irrelevant, return a predictable value; self is a good choice. This is consistent with YJIT's documented behavior.
- There's a tiny overhead in splatting, so it's faster to be explicit.
- There seems to be some overhead in the creation of local variables. Sometimes it's faster calling a reader method multiple times.
- While structs (Struct, not Data, although they share most of the implementation) can be slightly slower than trivial wrapper classes, I found a case where a struct with a single field resulted in a 15% overall runtime boost compared to the equivalent class. It's no longer in the code base, though, because:
- Oftentimes, shoving everything into an array to deal with later is faster than dealing with it early.
- There seems to be no performance gain in freezing. I attempted freezing an object in the constructor hoping YJIT would maybe inline instance variable access, but this resulted in an overall 10% performance drop through this single line change. However, the necessary code changes resulted in speedups in other places, so the work was still worth it.
- Sometimes arrays are faster, sometimes enumerators are faster, for the exact same functionality.
- `def some_size = some&.size || 0` seems faster than the verbose alternative. Maybe YJIT can optimize operators better than branches?
- There's a bunch of stuff I didn't try, like the C-like implementations you can find published all over the internet. If I wanted to write fast but unreadable code, I'd use FFI and C.
- Git commit makes your code run slower. I assume there's some FS weirdness going on which is triggered by committing, like maybe a cache reset.

Cookie monster!