Makam (original) (raw)

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 started working on the design and implementation of Makam in 2012 at MIT, under the supervision of Prof. Adam Chlipala, and continue to work on it as a personal project at Originate NYC.

Tutorial series

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.

  1. 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.

Code, papers and slides.