1. 22
  1. 6

    This is such a fantastic quality write-up. This problem is even more fun for us in a CHERI world, where the hardware enforces pointer provenance. In a CHERI system (such as Arm Morello), copying a pointer as a pointer and copying it as a pair of i64s (both of which can be done with a single pair of loads and stores in Morello) have different semantics. The first lowering gives you something that you can use as the base operand for loads and stores, the second gives you something that will trap if you try.

    1. 2

      Right, picolisp implemented on LLVM-IR.

      1. 1

        How does that effect the new implementation? I only ever looked at the old 32-bit C version: concise, beautiful and sweet.

        1. 1

          Older versions are obsolete, llvm-ir implementation are self bootstrap, works and tested in versions range LLVM7-LLVM13.

      2. 2

        The idea of having pointer provenance information being passed around explicitly (even though it doesn’t necessarily turn into machine operations) seems really aesthetically appealing to me. I have no idea about the practicalities. :)