Type Systems as Macros.
Stephen Chang, Alex Knauth, Ben Greenman.
44th ACM SIGPLAN Symposium on Principles of Programming Languages (POPL), Paris, France, January 18-20, 2017 (to appear).
| code repo
| artifact instructions, VirtualBox image (2.1GB) ]
We present Turnstile, a metalanguage for creating typed embedded languages. To
implement the type system, programmers write type checking rules resembling
traditional judgment syntax. To implement the semantics, they incorporate
elaborations into these rules. Turnstile critically depends on the idea of
linguistic reuse. It exploits a macro system in a novel way to
simultaneously type check and rewrite a surface program into a target
language. Reusing a macro system also yields modular implementations whose
rules may be mixed and matched to create other languages. Combined with typical
compiler and runtime reuse, Turnstile produces performant typed embedded
languages with little effort.
Links to runnable versions of examples from the paper:
You must have Racket
installed to use Turnstile.
- To install Turnstile, from the racket bin directory, run:
raco pkg install turnstile --auto
- Or from DrRacket, choose File->Install Package and enter "turnstile"
VM Image (recommended)
- Download VirtualBox
- Download the artifact image (2.1GB)
- Open the VirtualBox viewer, choose File->Import Appliance, select the downloaded .ova file, and start the VM.
- Open README.html on the Desktop and follow its instructions.
Manual Installation (only if VM is malfunctioning)
- Download and install Racket 6.6.
- Clone the repository into the directory popl2017 (or any directory):
git clone https://bitbucket.org/stchang/macrotypes popl2017
- Change directory to the repository root:
- From the repository root, install Turnstile (~30min-1hr):
raco pkg install --auto
- Register the documentation:
raco setup --doc-index
- From the repository root, change to the artifact directory:
- Build the README file:
- Open the produced README.html file and follow the contained instructions.