January 9, 2006 — jao

My current scheming is centered around Conjure, a make(1) replacement written in Scheme.

If you are familiar with Scons, a good approximation is to think about Conjure as Scons, but using Scheme instead of Python. The key point in these systems is that the language is not just an implementation detail (as, say, C is in make), but soars up to surface in that build scripts are actually Scheme (or Python) programs.

I don’t think i need to go into the details of why having at your disposal a full-fledged high-level language has advantages. But of course, more power implies more risks, and end users my be confused with, or not willing to learn, your favourite programming language. This, in my opinion, is a problem much easily surmountable in Scheme than Python (and that’s one of the reasons i keep working on Conjure, Scons notwithstanding). How so? Syntactic abstraction, of course. Besides having a far simpler syntax, Scheme (and Lisp in general) is the perfect vehicle to implementing domain-specific languages (see, for instance this nice article by V.S. Lugosky).

Thus, one of the goals of Conjure is to provide a declarative DSL tailored to defining software construction tasks and their interrelationships, usable as such even without any knowledge of Scheme. But then, DSL or not, a Conjure build file is still a Scheme program, and power users can extend and twist the system as much as they want.

The initial draft of the Conjure User’s Manual has an introductory section where i indulge in a boring discussion of these issues, if you’re so perversely inclined. The rest of the manual, by the way, is hopelessly inaccurate and out of sync with the current implementation, which you can browse in my darcs repository.

As you will see, nowadays Conjure is embedded in a wider plan for world domination which includes Spells, s48-worlds and s42. Those projects have been impulsed by my talented and indefatigable friend and conniver Rotty, who finally assimilated me into the s48 underground.

The Conjure homepage provides more details and links. Please, don’t be put off if you’re not a scheme48 aficionado: eventually, Conjure will run on as many Scheme implementations as possible. This is why it is based on Spells (which had its beginnings as a Conjure library, but thanks to Rotty has grown up into a project (very) worth in and by itself), a portability framework. Think of the current conjure48 as a proof-of-concept implementation that will settle the basis for the portable Conjure.

Tags: conjure, lisp, make, scheme