2011-11-06

November Quicklisp updates

Survey
I'm conducting a new Quicklisp survey. I'd like to find out the best way to reach the most people when there is Quicklisp news to share. It's one question, so if you can, please go fill it out.

Client Update
There's a new Quicklisp client available. You can get it with (ql:update-client). The new version will take effect after you restart your Lisp. 

This client has a feature that I think will be very helpful: any directory created in ~/quicklisp/local-projects/ will be automatically scanned for system files. There's no need to run an additional command to reconfigure ASDF.

For example, if there's a library that isn't part of Quicklisp, you can try it out with something like this in a shell:

$ cd ~/quicklisp/local-projects/
$ git clone git://github.com/xach/format-time.git

And something like this in a REPL:

* (ql:quickload "format-time")

There is no need to update your ASDF source registry or initialize it manually after adding new projects. This should simplify the directions authors can provide to people who want to try their projects.

There are a few things to keep in mind with this new feature:

First, you can't just symlink something into ~/quicklisp/local-projects/; for some Lisps (CLISP, ECL)  that works, for others (SBCL, ClozureCL) it doesn't. I hope to eliminate that limitation soon.

Also, only projects created in the top level of the directory are automatically scanned. Directories created or modified below the top level do not trigger an automatic scan. You can initiate a manual scan with (ql:register-local-projects), though. 

Finally, projects in ~/quicklisp/local-projects/ take precedence over both systems in the ASDF source registry and systems in Quicklisp. I'm not sure I'll keep that ordering if it causes problems.

This feature is a work in progress, so I appreciate any feedback, positive or negative.

Dist Update
I've updated the Quicklisp dist. You can get the update with (ql:update-dist "quicklisp")

Here's a summary of the changes this month:

New projects: able, asdf-dependency-grovel, autoproject, binascii, cgn, cl-apple-plist, cl-generic-arithmetic, cl-launch, cl-prolog, cl-rmath, cl-tokyo-cabinet, data-sift, deoxybyte-gzip, deoxybyte-io, deoxybyte-systems, deoxybyte-utilities, exscribe, fare-mop, lparallel, queues, text-query, thread.comm.rendezvous, xcvb, xml-emitter.

Updated projects: alexandria, antik, blackthorn-engine-3d, buildnode, caveman, chipz, cl+ssl, cl-2d, cl-closure-template, cl-csv, cl-inflector, cl-langutils, cl-match, cl-mediawiki, cl-num-utils, cl-oauth, cl-odesk, cl-quickcheck, cl-random, cl-scrobbler, cl-stomp, cl-test-more, cl-tuples, cl-twitter, cl-uglify-js, clack, clawk, clfswm, closer-mop, clsql-orm, collectors, com.google.base, command-line-arguments, contextl, css-selectors, data-table, doplus, elf, fare-utils, gbbopen, glop, group-by, gsll, gtk-cffi, hu.dwim.defclass-star, hu.dwim.reiterate, hu.dwim.stefil, hu.dwim.util, hunchentoot, hunchentoot-cgi, latex-table, lisp-gflags, lla, meta, metatilities-base, nibbles, parse-js, plokami, postmodern, protobuf, recursive-regex, restas, restas-directory-publisher, rfc2388, rpc4cl, rutils, screamer, simple-date-time, slime, symbol-munger, talcl, tap-unit-test, trivial-types, uri-template.

Removed projects: cl-webkit, tilde, webfunk.

cl-webkit has been removed because it now requires a version of the webkit library that I haven't been able to test. I hope to restore it next month. tilde has been removed because it's an unnecessary sbcl-only library; SBCL supports "~" in pathnames without any patches now. And webfunk no longer builds with the latest Hunchentoot.

Hunchentoot has a big update this month, the first new release in more than a year. It has a few backwards-incompatible changes. Affected projects in Quicklisp (except for webfunk) have been updated. However, you might find that your own Hunchentoot-using projects are affected by the changes. If that's problematic, you can either avoid updating Quicklisp, or if you've already updated, you can go back to a previous version.

As usual, if you have any questions or comments about Quicklisp updates, feel free to email me or discuss things on the Quicklisp mailing list.

Happy Lisping!

7 comments:

  1. Thank you Zach! May be better to add the automatic scanning of subdirectories in the locale-projects ?

    ReplyDelete
  2. Scanning subdirectories can take a lot of time. I think scanning only the toplevel is a decent compromise.

    ReplyDelete
  3. Thanks Zach!

    Just've tested the local-project feature: 1. Created link in ~/Src/lisp/ folder where I usually store my projects to ~/quicklisp/local-projects/. 2. Moved my projects in ~/Src/lisp/local-projects (I feel much better when I have my source files under ~/Src/ :)). 3. As CL had been running already I issued (ql:register-local-projects). And then I could just 'require' my projects!

    My first impression is that this little feature adds yet another portion of comfort to deal with quicklisp.

    ReplyDelete
  4. Excellent stuff! I just ran update-dist and it worked like a charm. Lots of updates!

    This probably isn't the right place to ask such a general question, but I'm a CL newbie so I hope you'll forgive me. I'm pretty much just goofing around with SBCL, Quicklisp, Emacs, Slime, and Hunchentoot right now. I'm reading "Land of Lisp", which is fun, but I'd also love to read some real down-to-earth advice or tutorials about how a seasoned Lisper would lay out a project structure, handle their packages, do source control, deployment, testing, and so on. I guess what I really want is a "Lisp for seasoned programmers in the real world" guide. Do you know of such a beast?

    ReplyDelete
  5. I don't know about such a guide. I think it would be interesting to see what timeless clues could be extracted from the dirty details of current tools and practices.

    ReplyDelete
  6. Lisp for seasoned programmers in the real world" guide = "Lisp Out of the Box" by Nick Levine

    ReplyDelete
  7. That's not the impression I got from "Lisp Out of the Box".

    ReplyDelete