Sunday, November 15, 2009

Initial thoughts on XCVB

Having struggled with the build system at work lately, I have decided to force myself to learn another build system at home: I am using XCVB for my UNIVAC emulator project.

I was intrigued by XCVB when I read about it in ILC'09. ASDF has always felt unfinished, even though it's a vast improvement over loading files manually (or using customized system definitions). However, I've run into problems with ASDF and I'm not against other options.

Some thoughts I had during the building, installation and use of XCVB:

  • The name needs to change. Is it possible to pick a name that is not some strained acronym? Ant. Maven. Make. These are reasonable (if not goofy) names. XCVB (and for that matter, ASDF) is just alphabet soup. Pick a word and go with it.
  • cl-launch feels like a whole lot of magic, but I've seen a whole lot of other magic work before.
  • The process of building your own systems is a bit awkward right now. xcvb make-makefile --build foo when in the directory with the build file for foo is excessive specification. Building the system is even more awkward: make -f obj/foo.image. Something akin to make foo would be much nicer.
  • The idea of introducing metadata into a source file to indicate its dependencies doesn't sit well with some people. Personally, I like information about dependencies being close at hand; whether it comes from textual information or system queries doesn't matter. I'm content with textual information at the level of a file for now, but I suspect maintaining that information will become a pain. On the other hand, I found maintaining ASDF system definition files to be a pain (especially with refactoring and reorganization). As much as I would prefer to not use files in a Lisp system, files are a reality. I think starting with file-level meta-information is a good place to start in order find out what works and what doesn't.

Hopefully I get some time to try and help out with the project since I think it's ambitious enough to work.


Faré said...

Thanks a lot for trying XCVB.

1- It's hard to change a name, and I don't think the name XCVB is an impediment to my goal of replacing ASDF. I'd rather have a cool build system with an ugly name than a horrible build system with a cool name.

2- Yes, cl-launch is a whole lot of magic. I'd like to *move* that magic into XCVB eventually, and gain some sanity with being able to dispense with shell programming. But it doesn't look like the magic can be entirely dispensed with. Please do better.

3- It is on my TODO list to do better than that, but the current typical intended usage case makes it not very urgent: since we currently only have a Make backend, you should be using a Makefile anyway, and putting that information there, once. Note that you don't *have* to specify obj/foo.image since it's the default target. But you'll still have to do something with the image (e.g. pass it to cl-launch) until I tackle point 2 above. Note also that XCVB .458 now allows to leave --build unspecified at which point the current directory's build's name is used (feature added just for YOU).

4- I have plans to make everyone happy, but the top priority is a standalone forking backend, to gain some of the speed of the POIU backend while preserving the determinism of the Make backend.

Thanks again for your feedback. Do not hesitate to send requests on the mailing-list.

The source code also tries to be hackable. If you find that it's not the case, please report a bug.

Anonymous said...

1. Amen! Every now and then I want to check out what's up with it, and I can't even remember what letters come after "X", so I waste 10 minutes googling around trying to find it by some indirect route.

I finally managed to memorize the name of that stick-figure webcomic after visiting the site every day for several weeks, so I predict it'll take at least 5 years for me to figure out XABC.

Put another way: I'm a Lisp programmer who's fed up with ASDF. I should be the number one easiest person in the world to get to use XYZT. If *I'm* having trouble even finding your project, who exactly do you think is going to use it? :-)

4. I'm not sure what the person's actual complaint here is, since he couldn't even assemble a complete sentence for his objection ("This is... no." -- ?). But Lisp has historically been all about crossing axes that other languages don't let you cross (for some theoretical reason), because it's so durned convenient. (Heterogeneous lists? Code stored as lists? But whatever will you do about compile-time type safety?)

So I wouldn't worry much about this one -- if I had to list the top 5 things I don't like about XQQY, this would not be one of them. How to build a program is part of that program, and keeping the two separate for some abstract hand-wavey reason is not helpful.


FWIW, the captcha here is more readable, more pronounceable, more searchable, and more memorable than the name of this build system. So I'm including "kaftsc" in my comment so next week when I'm trying to remember the new Lisp build system, I can google for "kaftsc" and find it. :-)

Christophe Rhodes said...

OK, since people are talking about my objection to a patch for split-sequence here, let's see if I can clarify.

The first thing that I should say, in case it's not known enough, is that I don't particularly like asdf either. Its extensibility doesn't really work; its ordering and nesting of operations is counterintuitive and almost useless; and because it works for the usual case (that is, it's relatively easy to specify a bunch of files and some dependencies and get a system built from that) its presence acts as an impediment against something better.

However, putting the hat of a maintainer of a bunch of lisp systems on, I like asdf because, for my purposes, it gets the job done. I understand that it doesn't get Faré's (and his employer's) job done, and that's fine, but it basically gets mine done. Yes, it's a pain to maintain dependencies; I'm afraid I don't see how a different build system helps with that particularly – the difficult bit is maintaining the dependencies, not the form that they're written in.

But when we come to the specific case of the patch for split-sequence, which is the context of my objection: split-sequence.lisp is a single file, and in that kind of case I do not agree with "how to build the program is part of that program"; I don't want to forbid doing C-c C-c on an individual form, or (load (compile-file ...)), or anything like that.

Furthermore, since I'm not (currently) using or planning to use xcvb, I can't commit to maintaining that metainformation, and I don't want even implicitly to say that I might. I could just go ahead and break stuff that's in the code, of course (or, because this is split-sequence we're talking about, in practice not touch the code for another 5 years or so, but remember, I have a lot of these things potentially to maintain). For whatever reason, I feel I can tolerate the existence of a separate file that I never look at and never use, but stuffing random reader conditionals with no explanation into the code is not going to fly for me.

Faré said...


1- if you've got a QWERTY or AZERTY or QWERTZ keyboard, you'll find that XCVB is not harder to memorize than ASDF. Moreover, if/when projects come with a build.xcvb file, the name "xcvb" will be just there for you to see.

Faré said...


a- the way XCVB helps maintaining dependencies is by erroring out early when you break them.

b- the #+xcvb before the module form is there precisely so you can still C-c C-c or C-c C-k or load your file and its forms.

c- Maintaining the meta-information is no easier and no harder whether it's in each file or in a central file. But until XCVB has proven that it won't go the mudballs way, I understand it is prudent to refuse to edit the files, and then there is a matter of taste in demanding a centralized dependency file that I will not argue. Once again, it is in my plans to allow such a central specification, just not done yet.

Anonymous said...

"if you've got a QWERTY or AZERTY or QWERTZ keyboard, you'll find that XCVB is not harder to memorize than ASDF."

So now all I have to do is switch back to a keyboard layout I haven't used in 15 years because it causes me physical pain? To me, that's about like saying that something is easy to remember because it's a common word in Mongolian. Except, of course, Mongolian words are pronounceable. :-)

I know you'd "rather have a cool build system with an ugly name than a horrible build system with a cool name", but there is another option you may not have considered: you could have a cool build system with a cool name. ;-)

(Like KAFTSC!)

Anonymous said...

I'd like to add that despite what I may have said, I think you're a fine Lisp programmer. You embody what is simultaneously the best and worst attribute of Lisp programmers: when somebody tells us something is a phenomenally insane idea, we stick with it. :-) said...

nice blog!

i found your blog through keyword "auto follow".

im following you.. pls follow me back.

オテモヤン said...


Anonymous said...

thank you for you to make me learn more,thank you∩0∩

cc22 said...




Volker from Germany said...

Ich haben eben Eure Internetseite besucht und nutzen sogleich die Gelegenheit,euch auch einen Gruß aus Deutschland in Eurem Gästebuch zu hinterlassen. P.S. Kommt uns doch auch mal besuchen

generic viagra said...

buy viagra
viagra online

Send Flowers to Philippines said...

Really like this website, this really helps and very useful.

Anonymous said...

XCVB is a much better name than "Ant" or "Make" for the very simple reason that doing a simple google search for "XCVB" is infinitely more likely to get you relevant hits than searching for "Ant" or "Make".

Of course, an even better name would have been something memorable yet unique (a deliberately misspelled common or proper noun, for instance).

Deckenventilator said...

Tolle Homepage und genialer Aufbau, gefällt mir sehr gut!!
Vielleicht schauen sie mal auf meiner Homepage vorbei!
Schöne Grüße aus Bayern

xanax said...

Good day! You some form of knowledgeable? Nice message. Can you tell me easy methods to subscribe your weblog?

pharmacie en ligne viagra said...

hey buddy,this is one of the best posts that I�ve ever seen; you may include some more ideas in the same theme. I�m still waiting for some interesting thoughts from your side in your next post.

cialis soft tabs said...

Hello I enjoyed yoiur article. I think you have some good ideas and everytime i learn something new i dont think it will ever stop always new info , Thanks for all of your hard work!.

Italia-Lifestyle said...

Schöner Blog mit tollen Infos

Sandhu said...

I was very pleased to find this web-site.I wanted to thanks for your time for this wonderful read!! I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you blog post.