Subject: Re: ASDF-newbie: How to determine whether ASDF is *already* installed on my ISP?
From: rpw3@rpw3.org (Rob Warnock)
Date: Sat, 10 Jan 2009 20:57:20 -0600
Newsgroups: comp.lang.lisp
Message-ID: <I5CdnVh2Gd6N_fTUnZ2dnUVZ_gydnZ2d@speakeasy.net>
Pascal J. Bourguignon <pjb@informatimago.com> wrote:
+---------------
| You don't care about REQUIRE.  It's a deprecated feature.  It behavior
| with one argument is implementation dependant, and its behavior with two
| argument is about the same as LOAD, only with one more useless
| argument.  JUST USE LOAD!
+---------------

Well, while well-intended, I feel that's a bit too strong.
REQUIRE does have one useful feature that one would want to
duplicate when "just using LOAD", namely, that it won't LOAD
the file again if LOADing it the first time resulted in the
addition of the module name to *MODULES*. This makes it easy
for small utility modules to simply REQUIRE the other modules
they depend on without having to have an ASDF file for every
possible combination of modules one might use!

Yes, one can easily create a REQUIRE replacement that performs
an equivalent "once-only" action, and perhaps that's a better
solution for programs intended to be very portable. Something
like this perhaps [only lightly tested]:

    (defvar *my-required-files* nil)

    (defun my-require (&rest files)
      (dolist (file files)
	(let ((path (truename file)))
	  (unless (find path *my-required-files* :test #'equal)
	    (load path)
	    (push path *my-require-files*)))))

But for local hacking about, I find CMUCL's REQUIRE adequate... ;-}


-Rob

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607