<liyer.vijay@gmail.com> wrote:
+---------------
| Mikalai wrote:
| > Do not forget that you may use REQUIRE, not just LOAD. In file that you
| > require, put a provide option. Required file will be loaded only once!
|
| That is another thing I have learnt now :-) I've seen the same in
| several emacs lisp packages but never in CL. However, CLtL2 appears
| to favour usage of DEFPACKAGE over REQUIRE and PROVIDE:
+---------------
But remember that CLtL2 is *NOT* normative, nor was it ever approved
by ANSI, and in fact it occasionally differs in significant ways from
what ended up in the actual standard.
+---------------
| Hyperspec also says:
| | The functions provide and require are deprecated. |
+---------------
But note that the CLHS *also* says:
1.8 Deprecated Language Features
Deprecated language features are not expected to appear in
future Common Lisp tandards, but are required to be implemented
for conformance with this standard; see Section 1.5.1.1
(Required Language Features).
Common Lisp has *LOTS* of deprecated language features that people
depend on working properly in any decent implementation. ;-} ;-}
+---------------
| Is it recommended to use REQUIRE and PROVIDE?
+---------------
Recommended by whom? In what circumstances? They're required (pardon
the pun) to be there, so you can depend on them being there, but their
behavior is under-specified and/or implementation-dependent [which is
the main reason they were deprecated], so you might have to wrap some
feature tests around them for portability across CL implementations.
+---------------
| Are they used often?
+---------------
I can't speak for others, but I use them a lot in interactive (REPL)
sessions to suck in locally-written small libs. But for starting up
large and/or long-running applications, I tend to use a mixture of
REQUIRE and ASDF, with more of the latter the bigger the app is.
Note that SBCL has blurred the line further by extending REQUIRE
so that (REQUIRE :FOO) does (ASDF:OPERATE 'ASDF:LOAD-OP :FOO) if
there is a "foo.asd" visible via the ASDF:*CENTRAL-REGISTRY*.
In short, REQURE/PROVIDE are perfectly fine to use, if their
limitations don't get in the way for you. If I were writing
libraries intended for use by others, I'd supply an ASDF wrapper.
-Rob
-----
Rob Warnock <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607