Makam is a metalanguage: a language for implementing languages. It supports concise declarative definitions, aimed at allowing rapid prototyping and experimentation with new programming language research ideas. The design of Makam is based on higher-order logic programming and is a refinement of the λProlog language. Makam is implemented from scratch in OCaml.
The name comes from the makam/maqam of traditional Turkish and Arabic music: a set of techniques of improvisation, defining the pitches, patterns and development of a piece of music.
I have started a series of posts that introduce Makam and show examples of how to use it for prototyping small languages. They aim to be pretty self-contained, only assuming familiarity with functional programming languages.
- Introducing abstract and concrete syntax; implementing an interpreter for a toy language; implementing concrete syntax in Makam.
Taksims in language design series
This a more experimental series of posts, where I might be talking about design aspects of existing languages, and exploring design ideas for Makam and other languages. They assume some familiarity with Makam and logic programming already. By the way, a taksim is an improvised musical introduction before performing a traditional composition.
- A language design taksim on mode declarations for Makam
- A language design taksim on mode declarations for Makam, part 2
Code, papers and slides.
- The GitHub repository for Makam. Makam is free software, released under the GPLv3. This is the official GitHub repository for it.
- Our ICFP 2018 paper, “Prototyping a Functional Language using Higher-Order Logic Programming: A Functional Pearl on Learning the Ways of λProlog/Makam”, Antonis Stampoulis and Adam Chlipala. This is a functional pearl demonstrating the development of a MetaML-like type system in Makam. It serves both as a λProlog/Makam tutorial and also explains the details of some useful Makam design patterns, such as encoding complex binding structures and writing structurally recursive definitions while avoiding boilerplate. The paper is a fun read (for some definitions of “fun”), written in the style of a play between Roza Eskenazi and Hagop Stambulyan, reimagined as programming language researchers. The paper repository includes all code, together with the artifact and the presentation. Also available: the video from the presentation at ICFP (about 20 minutes long).
- Technical Overview. A paper describing the main technical features of Makam (quite dated at this point)
- Slides for the CRSX User Meeting. These are the slides for a talk I gave in the 2nd CRSX User Meeting, in Two Sigma NYC. They describe the main features of Makam and are a good reference point if you need a quick overview of the language.
- Slides for the MIT PL/SE Offsite. This is a lightning 3-minute talk (with my notes) for the MIT Programming Languages/Software Engineering Offsite event. This is the talk that I have most enjoyed giving, and might be interesting, even though it will not give you too much information about Makam :)
- A technical description of Makam, geared towards programming language researchers.