min is an concatenative, fully-homoiconic, functional, interpreted programming language.
This basically means that:
- It is based on a somewhat obscure and slightly unintuitive programming paradigm, think of Forth, Factor and Joy but with parethesis for an extra Lispy flavor.
- Programs written in min are actually written using quotations, i.e. lists.
- It comes with map, filter, find, map-reduce and loads of other functional goodies. See the
seqModule for more.
- It is probably slower than the average production-ready programming language.
Because creating a programming language is something that every programmer needs to do, at some point in life. And also because there are way too few concatenative programming language out there – so people are likely to be less pissed off than if I made a yet another Lisp instead.
I always wanted to build a minimalist language, but that could also be used for real work and provided a standard library for common tasks and functionalities like regular expression support, cryptography, execution of external programs, shell-like operators and keywords to work with files, and more.
Also, I wanted it to be fully self-contained, cross platform, and tiny. About 1MB (depending on the platform) is not really tiny, but I feel it’s a good compromise compared to the alternatives out there, considering that you only need one file to run any min program.
I am currently building a static site generator called HastySite, that also powers https://min-lang.org. HastySite internally uses min as the language to write the rules to process the source files of the site, and also all its scripts.
Finally, I think more and more people should get to know concatenative programming languages, because concatenative programming matters.
min is developed entirely in Nim – the name is (almost) entirely a coincidence. I wanted to call it minim but then shortened it for more… minimalism.
min’s parser started off as a fork of Nim’s JSON parser – adapted to process a concatenative programming language with less primitive types than JSON. It is interpreted in the traditional sense: no bytecode, no JIT, just plain read, parse and run.
min was created and implemented by Fabio Cevasco, with contributions by Peter Munch-Ellingsen.
Special thanks to mwgkgk for contributing to the design of native dictionaries.
min source code repository was created on November 8th 2014. This only means that I’ve been very slowly developing something that was actually made public at the end of July 2017.