Copy-and-Patch: A Copy-and-Patch Tutorial

(transactional.blog)

42 points | by todsacerdoti 4 hours ago

3 comments

  • re 3 hours ago
    Related:

    Copy-and-Patch: Fast compilation for high-level languages and bytecode (2020) https://news.ycombinator.com/item?id=40553448 - June 2024 (51 comments)

    A copy-and-patch JIT compiler for CPython - https://news.ycombinator.com/item?id=38769874 - Dec 2023 (68 comments)

    Copy-and-Patch: Fast JIT Compilation for SQL, WebAssembly, and Others - https://news.ycombinator.com/item?id=28547057 - Sept 2021 (7 comments)

  • shoo 4 hours ago
    the accompanying post "How It Works" is worth reading alongside this tutorial

    https://transactional.blog/copy-and-patch/

    (key terms: abus[e|ing]: 4, force: 3, trick: 1, chance: 1)

  • weinzierl 3 hours ago
    I think this technique also lies at the heart of the Cranelift project.

    https://cranelift.dev/

    • aw1621107 1 hour ago
      IIRC Cranelift doesn't use copy-and-patch. It uses e-graphs [0] as part of its optimization pipeline, though.

      Closest thing in (relatively) recent news that uses copy-and-patch I can think of is CPython's new JIT.

      [0]: https://github.com/bytecodealliance/rfcs/pull/27

      • weinzierl 58 minutes ago
        My understanding is that e-graphs take care of selecting the best patch (by examining many options in parallel) but fundamentally it is still copy-and-patch.
        • aw1621107 25 minutes ago
          Could you elaborate more on "fundamentally it is still copy-and-patch"? From what I can recall when I had first read about copy-and-patch a not-uncommon comparison was against Cranelift, which to me would imply that different approaches were taken. I don't recall any discussion about Cranelift's use of the technique, either, so your claim that it's at the heart of Cranelift is new information to me. Has Cranelift adopted copy-and-patch (maybe for a specific compilation stage?) in the meantime?