Tasks Under NLNet Grant - oilshell/oil GitHub Wiki

Compiler Engineer Job describes the high level of what we're looking for. It's about the mycpp translator, static types, and garbage collection.

But here is a more granular breakdown.

Stages

  1. Make more spec tests pass without the garbage collector. This is valuable and still moves the project forward. We want to get from the 1496 number up to 1770 that the Python version passes.
  2. Make oil-native translate with the new garbage collected runtime.
    • This will mean re-implementing OS bindings and data structures with the garbage collector's API.
    • I welcome feedback on the API.

Tasks With No Dependencies

Work That Has Dependencies

  • Rewrite mycpp as "Pea"! Using Python 3.10 pattern matching
    • I started doing this. But I think I want to find someone to work on this first, and then let them decide. Do we want to keep going with mycpp, or do we want to clean it up a bit?
  • Implement a fast GC'd dictionary data structure in C++. (We have something slow and workable now.)
  • Optimize the code generated by mycpp.

TODO: Reorganize

Off the top of my head, here's what is left on the tools and runtime:

  1. Generate GC field masks from user-defined classes, taking inheritance into account. This is part of the mycpp Python translator, which is written in Python.
  2. ASDL field masks?
  3. Write a proper O(1) dictionary that actually uses hashing! What we have now is more like an linear association list.
    • However we have to be careful that this is not a de-optimization. Our benchmarks are not bad right now. Most dicts are small, and N has to be surprisingly large before O(1) is faster O(N).

Here's what's left in general:

  1. Rewrite all the bindings for functions like glob() to use the garbage collector API!
    • Before starting this relatively big task, I could use some review of the API to make sure it's easy to use
  2. Figure out of the homogeneous parse tree ofr pgen2 should use garbage collected types or not. I think not.
  3. Make the Oil interpreter translatable, by making it statically typed. (OSH is already completely statically typed.