People pointed out that some git repositories of mine on common-lisp.net were not clonable. I fixed the problem and now you should be able to clone the repositories for NEW-OP and XHTMΛ.
(cheers)
git
repository can be found there.(document #P"asdf/uiop/"
:documentation-title "UIOP"
:everything t
:exclude-files (list #P"/Path/To/asdf3/asdf/uiop/asdf-driver.asd")
:special-methods-defs-files (list #P"/This/file/here/helambda-asdf3.lisp")
)
document
function is called on a folder ("asdf/uiop/"
) with an obvious title. The other arguments have the following meaning:
:everything t
tells HEΛP to generate documentation pages for everything; these are stored in the dictionary
subfolder with file-names which should be relatively obvious. Ordinarily, HEΛP would generate doc pages only for public (i.e., exported) interfaces.:exclude-files
is a list of files to forget about; UIOP has one file with an unqualified DEFSYSTEM
in, which confuses HEΛP.special-methods-defs-files
is a list of files containing specialized definitions to handle a library extra "definition" forms and macros. UIOP has a number of them.
In a current thread on c.l.l. there was a discussion about how to "hide" bits and pieces of a data structure (the discussion was really about mutable strings). That got me thinking about how to provide more "hiding" than what you can achieve with the package system and with CLOS.
The following is a cute - I believe - hack to make the life of the slot-value
user much more difficult. Remember that slot-value
is just a function.
CL-USER 7 > (defclass foo () ((#.(gensym (random 42)) :reader foo-slot :initarg :slot))) #CL-USER 8 > (describe (make-instance 'foo)) # is a FOO G21 # CL-USER 9 > (describe (make-instance 'foo :slot 42)) # is a FOO G21 42 CL-USER 10 > (defclass foo () ((#.(gensym (random 42)) :reader foo-slot :initarg :slot))) # CL-USER 11 > (describe (make-instance 'foo :slot 42)) # is a FOO G5 42
So, the trick is to generate random slot names, which can be accessed only via CLOS accessors (readers and writers). Plus, in order to make life difficult for any program "inspecting" the guts of a class, you can just redefine it at random times during your application's lifetime.
Not foolproof, but, as I said, cute.