There are still a few of us (at least two) who are using MK:DEFSYSTEM. The venerable system construction tool has accumulated a lot of ancient cruft, some of which quite convoluted.
Recently I went back to MK:DEFSYSTEM and "cleaned up" some of the code, especially regarding the pathname construction for each component. I also used some simpler hierarchical tricks using defstruct only.
The result should be more solid and clearer in the steps that comprise some "macro tasks". Of course, a rewrite using CLOS would change the coding style, but the choice has been made to keep the MK:DEFSYSTEM code base quite... retro (and somewhat simple).
Why did I went back to MK:DEFSYSTEM? As usual, it is because of a rabbit-hole I fell into: I will blog about it later on (hint: HEΛP).
MK-DEFSYSTEM quick history as of March 2026
MK-DEFSYSTEM (or MK:DEFSYSTEM, or MAKE:DEFSYSTEM) was originally
written by Mark Kantrowitz as part of the original "CMU Lisp
Utilities" collection; an early "public" set of Common Lisp code and
utilities that, in the writer's opinion form one of the basis of most
Common Lisp writing to date.
As stated (by M. Kantrowitz himself) in this file header, the original
version of MK-DEFSYSTEM was inspired by the Symbolics DEFSYSTEM (or
DEFSYS) tool. Yet, MK-DEFSYSTEM differs significantly from it.
In its original form, MK-DEFSYSTEM was built in the CLtL1 era,
accommodated a lot of variance among filesystems and CL
implementations and it still bears those idiosycrasies. CLtL2 (1992)
first and ANSI (1994) next, started reshaping the code base then.
MK-DEFSYSTEM was originally distributed under a license agreement that
made redistribution tricky. In 1999, the writer - that'd be me, Marco
Antoniotti - contacted Mark Kantrowitz offering to become a maintainer
while reworking the distribution license to hammer some FOSS into it.
Mark Kantrowitz graciously agreed and, after that, the writer got literally and physically
hugged by a few Common Lisp developers because they could use
MK-DEFSYSTEM more freely.
Of course, ASDF came along and it solved the same problems that
Symbolics (and Kent Pitman's) DEFSYS and MK-DEFSYSTEM solve, plus much
more.
Yet, MK-DEFSYSTEM has some nice features (in the eye of the beholder).
MK-DEFSYSTEM still ships in one file - defsystem.lisp - that you can
LOAD in your Common Lisp init file. Of course, a big chunk of its
current code base is "backward compatibility" and new
ok-we-miss-UIOP-and-or-at-least-CL-FAD functionality, plus an ever
growing ongoing commentary like this one.
Given this background, the writer has been maintaining MK-DEFSYSTEM for a long time, and more
recently, Madhu has made significant changes (and maintains himself a
fork with some bells and whistles of his own) since 2008.
Of course, many other contributors helped over the years, and are acknowledged in the early Change Log and in comments in the code.
In early 2026, the writer cleaned up the code and reworked some of
the logic, by factoring out some code from main functions. In
particular, the CREATE-COMPONENT-PATHNAMES,
GENERATE-COMPONENT-PATHNAMES, COMPONENT-FULL-PATHNAME,
COMPONENT-FULL-NAMESTRING interplay is better organized; plus new
structures, leveraging DEFSTRUCT :INCLUDE feature have been
introduced, rendering the code TYPECASE-able.
MK-DEFSYSTEM is old, but it works. It is quirky but it works (at
least for the two or three known users - which, in 2026, is already a
big chunk of the Common Lisp users' community). Moreover, it does
have, at least in the eye of the beholder, some more user friendly
user API, for most use case, especially for plain Common Lisp code.
The current MK-DEFSYSTEM repository is at
https://gitlab.common-lisp.net/mantoniotti/mk-defsystem
(*) It is assumed that the reader knows about all the acronyms, tools and systems referred to in the text.
'(cheers)
No comments:
Post a Comment