ZJIT removes redundant object loads and stores

(railsatscale.com)

88 points | by tekknolagi 4 days ago

6 comments

  • mananaysiempre 1 day ago
    Of all the facets of HN’s title autodestroy, I think removing “How” from titles is the worst one. I believe OP can edit it back in though.

    (I passed over this article thinking it was a “look how mysteriously smart the mysteriously smart compiler is” acticle, not a “here’s how the smarts in a compiler work” one.)

    • dietr1ch 1 day ago
      I think it'd fine having it be however broken it currently is as long as the correction was checked by whoever is submitting the entry before it gets published.
    • pjmlp 1 day ago
      Yes, there is a timeout to fix title "corrections" after submission, but apparently still not well known.
      • QuantumNomad_ 1 day ago
        Not well known and also, submitter might not always even notice that title was automatically changed slightly.
  • smj-edison 1 day ago
    I'm working on an interpreter right now, and I'm considering adding JIT support in the future. Are there other blog posts like this, or deep dives that talk about how to implement and tune a JIT?
    • hoten 1 day ago
      I used asmjit to implement JIT compilation. Highly recommend it.

      Maybe you'll find the resources I link to in the documentation for my project helpful.

      https://github.com/ZQuestClassic/ZQuestClassic/blob/main/doc...

      Or perhaps you'd find reviewing my usage of asmjit helpful:

      https://github.com/ZQuestClassic/ZQuestClassic/blob/main/src...

      My main high-level advice would be to have an extensive set of behavioral tests (lots of scripts with assertions on the output). This helps ensure correctness when you flip on your JIT compilation.

      You'll eventually run into hard to diagnose bugs - so be able to conditionally JIT parts of your code (per-function control - or even better, per-basic block) to help narrow down problem areas.

      The other debugging trick I did was spit out the full state of the runtime after every instruction, and ensure that the same state is seen after every instruction even w/ JIT enabled.

      Good luck!

  • claudiug 1 day ago
    for me is more interesting that Maxime Chevalier-Boisvert left shopify and is doing other stuff, who will carry on with zjit
    • maxime_cb 1 day ago
      Max Bernstein is now leading the team. He's also an excellent compiler engineer.
      • claudiug 1 day ago
        that is great to hear!
    • schneems 1 day ago
      You got your reply already. To add: YJIT is the one that does "basic block versioning" (Which was Maxime's thesis) while ZJIT is a more traditional design.

      I am confident in that description but don't actually know what it means in practice (yes I've seen papers and talks, but I kinda need not-compiler-engineer to explain it to me.)

      As I understand it BBV still holds promise, but the sheer volume of knowledge of more traditional methods might mean it gets better outcomes (also IIRC ZJIT is still lagging YJIT).

    • rurban 21 hours ago
      She's at yasp since Nov 25. Probably earning much more than at Shopify, and can do AI
  • mchusma 1 day ago
    curious if zjit will be ready to be default over yjit next ruby release. hope so!
  • riteshyadav02 1 day ago
    [dead]
  • diablevv 1 day ago
    [flagged]
    • AlexeyBelov 1 day ago
      LLM comment history.
      • noescapeyet 15 hours ago
        Yup! Clanker confirmed.

        I used the sophisticated LLM detection technique called "I wrote this blog post and I wish we had escape analysis in ZJIT too."

      • Rexxar 22 hours ago
        Indeed, I see they now wait 28 days to not been displayed in green before commenting.