Skip to content

N* v2.2.0

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 13 Apr 20:30
8a9d1d5

✨ What's new?

  • It is now possible to link against symbols that should be statically present at link-time using the extern.code section
    Each binding is given a type that should correspond to the underlying FFI type, but this cannot be checked
  • Bang-types have made it into N*!
    These are used to forget about some register binding
    However, “forget” means different things depending on where the bang-type lies:
    • If the bang-type is in the caller's context, then this means that upon returning from this function, the register associated to the bang-type cannot be trusted anymore
      This allows for some kind of reminder as to which register has to be callee-saved
    • If the bang-type is in the continuation, then this means that we basically don't care about the previous value in a register, and that we may even plan on overwriting it
  • String literals are also a thing now, which makes it easier to write a basic "hello, world!" example
  • A new sref n, r instruction was born, to be able to fetch a reference to a stack cell
  • And finally, packed structures with their literal equivalents for the data sections

  • And as a side note, a small emacs mode was written just to provide syntax highlighting for N* code:
    image

🐛 Bug fixes

  • sst r, n was compiled to the wrong opcodes when targeting amd64
  • When type-checking the mv instruction, when it moved the continuation, the register environment χ was not extended with the correct type (the ∀(). part was erased)