\

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

42 points - today at 5:14 AM

Source
  • re

    today at 6:23 AM

    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

      today at 5:54 AM

      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

        today at 6:18 AM

        I think this technique also lies at the heart of the Cranelift project.

        https://cranelift.dev/

          • aw1621107

            today at 8:49 AM

            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

                today at 8:57 AM

                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

                    today at 9:30 AM

                    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?