Skip to content

Latest commit

 

History

History
64 lines (36 loc) · 2.12 KB

bibliography.rst

File metadata and controls

64 lines (36 loc) · 2.12 KB

Bibliography

This annotated bibliography is very much under construction!

Macros and module systems

The overall macro expander uses Flatt's set-of-scopes algorithm for hygiene: https://www.cs.utah.edu/plt/publications/popl16-f.pdf

The module system is based on Racket's: https://www.cs.utah.edu/plt/publications/macromod.pdf

We'd like to find a way to do the things described in Macros that Work Together, but with types. It's mostly just design sketches so far for us. We expect that we can adapt the design of MetaPRL's resources to replace compile-time bindings, at least.

Type checker implementation

The type checker is based on Sestoft's description in Programming Language Concepts. It uses Rémy's optimization of generalization, where type metavariables are assigned levels to avoid scanning the context at generalization time.

LVars have been used to parallelize type checkers.

Related Work

These systems have some form of type-aware hygienic macro, or other typed metaprogramming.

Lean

Lean's macros are the closest thing to Klister right now.

Scala

MetaML

MetaML is a staged programming system rather than a macro system, but it pays to be familiar with it.

MacroML

MacroML compiles down to MetaML, and thus provides very strong guarantees. It's less expressive than a full procedural macro system, though.