{"id":23758402,"url":"https://github.com/astampoulis/makam","last_synced_at":"2025-04-06T16:11:12.996Z","repository":{"id":32563022,"uuid":"36145699","full_name":"astampoulis/makam","owner":"astampoulis","description":"The Makam Metalanguage","archived":false,"fork":false,"pushed_at":"2023-03-07T15:34:09.000Z","size":2931,"stargazers_count":198,"open_issues_count":18,"forks_count":12,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-30T15:09:19.889Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/astampoulis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-05-23T22:41:19.000Z","updated_at":"2025-02-22T09:23:26.000Z","dependencies_parsed_at":"2023-10-20T18:03:55.560Z","dependency_job_id":null,"html_url":"https://github.com/astampoulis/makam","commit_stats":{"total_commits":219,"total_committers":8,"mean_commits":27.375,"dds":0.6164383561643836,"last_synced_commit":"bf7ed7592c21e0439484d7464e659eca5be3b2f9"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astampoulis%2Fmakam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astampoulis%2Fmakam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astampoulis%2Fmakam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astampoulis%2Fmakam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/astampoulis","download_url":"https://codeload.github.com/astampoulis/makam/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247509221,"owners_count":20950232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-31T19:54:26.676Z","updated_at":"2025-04-06T16:11:12.979Z","avatar_url":"https://github.com/astampoulis.png","language":"OCaml","readme":"# The Makam metalanguage -- a tool for rapid language prototyping\n\n[![CircleCI](https://circleci.com/gh/astampoulis/makam.svg?style=svg)](https://circleci.com/gh/astampoulis/makam)\n\nCopyright (C) 2012- Antonis Stampoulis\n\nThis program is free software, licensed under the GPLv3 (see LICENSE).\n\n## Introduction\n\nMakam is a metalanguage that eases implementation of languages with rich type systems, supporting\nconcise and modular language definitions, aimed at allowing rapid prototyping and experimentation\nwith new programming language research ideas. The design of Makam is based on higher-order logic\nprogramming and is a refinement of the λProlog language. Makam is implemented from scratch in OCaml.\n\nThe name comes from the makam/maqam of traditional Turkish and Arabic music: a set of\ntechniques of improvisation, defining the pitches, patterns and development of a piece of music.\n\nThe design and development of Makam started in 2012 at MIT, under the supervision of Prof. Adam\nChlipala, and continues as a personal project at [Originate NYC](http://www.originate.com/).\n\nTo read more about Makam, visit my homepage:\n\n\u003chttp://astampoulis.github.io/\u003e\n\n\n## Installation\n\nThere are multiple ways to install Makam: The easiest way is by using the `makam` Node.js package\nthat includes a pre-compiled Makam binary.\n\n- [Install through Node](#install-through-node). This is the easiest way, as it requires\n  only a Node.js installation; the package includes a pre-compiled Makam binary.\n- [Install through OPAM](#install-through-opam). This requires both an OCaml and a Node.js\n  installation, and compiles Makam from source.\n\n### Install through Node\n\n#### TL;DR\n\n- Install [Node.js 12.x](https://nodejs.org/en/download/)\n- `npm install -g makam`\n- `makam`\n\n#### Instructions\n\n- Install [Node.js 12.x](https://nodejs.org/en/download/)\n\n  In Ubuntu/Debian Linux:\n\n        curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -\n        sudo apt-get install -y nodejs\n\n  In MacOS X:\n\n        brew install node\n\n  Windows are not supported through this method at this time, as there\n  is no pre-compiled binary for this platform in the Node.js package.\n  [Compiling from source](#install-through-opam) should work though.\n\n- Install the `makam` npm package globally (you might need `sudo`):\n\n        npm install -g makam\n\n- Clone the Makam repository to have examples locally:\n\n        git clone https://github.com/astampoulis/makam.git\n        cd makam\n\n- Use `makam` to run the REPL:\n\n        makam\n\n- If you `git pull` a newer version of the repository, make\n  sure to also update your Makam installation with:\n\n        npm install -g makam\n\n(Alternatively, instead of installing Makam globally, you can install\nMakam under `./node_modules` with `npm install makam`, in which case\nyou'll have to use `./node_modules/.bin/makam` to run `makam`, or\nadd `$(pwd)/node_modules/.bin` to your path.)\n\n### Install through OPAM\n\n#### TL;DR\n\n- [OPAM](http://opam.ocaml.org/doc/Quick_Install.html)\n- `opam switch create ./`\n- `eval $(opam config env)`\n- [Node.js 8.x](https://nodejs.org/en/download/)\n- `make`\n- `./makam`\n\n#### Instructions\n\nClone the repository to get the Makam source code.\n\n    git clone https://github.com/astampoulis/makam.git\n\nYou then need to install OPAM, the OCaml Package Manager. Instructions are\navailable at:\n\n\u003chttp://opam.ocaml.org/doc/Install.html\u003e\n\nWe have been testing using the OCaml 4.11.1 configuration. Creating a\nlocal switch is the recommended way to keep the OCaml compiler\nconfiguration and dependencies separate from other OCaml projects you\nmight have. To create a local switch, install all dependencies, and set\nup the environment variables you need, do:\n\n- `opam switch create ./ ocaml-base-compiler.4.11.1`\n- `eval $(opam config env)`\n\nMakam also depends on Node.js, which is used for optimized parser\ngeneration. Instructions are available at:\n\n\u003chttps://nodejs.org/en/download/\u003e\n\nMost recent versions of Node.js should work. If you are on an old version\n(before `7.x`), you can use `nave` to install a newer Node.js version:\n\n    npm install -g nave \u0026\u0026 nave use 12\n\n(Other Node version managers like `n` and `nvm` should also work.)\n\nFinally, compile Makam:\n\n    make\n\nNow, when you want to run Makam, just issue:\n\n    ./makam\n\nExamples written in Makam are available in the same repository that you cloned\nabove. Having a local copy is useful as a reference point, since there's no\ntutorial yet; look in the `examples` directory.\n\nTo update your version of Makam, you can do:\n\n    git pull\n    opam install . --deps-only\n    make\n\n## Using Makam\n\nUnfortunately we do not have a Makam tutorial yet. I am in the process of\nwriting introductory posts which will be available in my homepage:\n\n    http://astampoulis.github.io/makam/\n\nLook into the files in the `examples/` directory for sample developments in Makam.\n","funding_links":[],"categories":["Other"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastampoulis%2Fmakam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fastampoulis%2Fmakam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastampoulis%2Fmakam/lists"}