ares/docs/proposal/milestones.md
2022-05-09 17:43:26 -04:00

2.5 KiB

New Mars project milestones

The two major research (rather than implementation) goals of the New Mars project are:

  1. The effectiveness of an on-stack bump allocator and delimited copying collector as a memory manager for Nock computational memory.
  2. An effective linearization strategy for Nock code generation.

Near Term: Memory management

The goal of this set of milestones is to validate the 2stackz memory model and its implementation

  • run nock
    • 2stackz allocator (implemented)
    • tree-walking interpreter (in-progress)
      • unifying equality
      • tree edits
  • run non-trivial amounts of nock
    • cue
    • load a small pill (probably of a custom core)
  • run some compiled hoon
    • mug caching
    • noun hashtable
    • jam
    • jet dashboard
      • optimize for simplicity / speed of implementation

Next: code generation

The goal of this stage is to generate highly-linearized IR from Nock

Note that a substantial part of this milestone is already accomplished, if unvalidated. The New Mars project began with linearization of Nock across Nock 2 and Nock 9 being a problem without theoretical or design solution. Subject-knowledge analysis (SKA) is the (currently theoretical) artifact which permits such linearization.

  • Firm up reference Hoon implementation of SKA
  • Use SKA to bytecode-compile Nock
    • This validates SKA as a code-generation and jet-matching strategy for Nock without bogging down in the details of LLVM
  • Switch out bytecode for LLVM IR

Later: heaps and paging

The goal of this stage is to permit New Mars to function fully as a Mars, saving snapshots and event logs, and paging infrequently used and/or large data out to disk.

  • Threshhold based eviction to a heap
  • Heap collection strategies
  • Demand paging of heap objects
  • Event logging and snapshotting using demand-paged heap objects
  • Tie disk reclamation to virtual memory reclamation

Historical progress:

Project time to this point has been spent:

  1. Implementing the memory management strategy
  2. Attacking the code linearization problem for Nock in order to come up with a means of producing direct, monomorphized calls to generated code for procedures and to jets.

The memory management implementation is complete but untested. The implementation of the tree-walking interpreter will permit us to test and harden this implementation.

The subject knowledge analysis is a still theoretical result, but a result nonetheless, which convincingly and constructively establishes that linearization and monomorphization of Nock for code generation is possible in a reasonably efficient manner.