gnu: Add cl-hooks.
* gnu/packages/lisp.scm (cl-hooks, ecl-cl-hooks, sbcl-cl-hooks): New variables.master
parent
0b2396b6c6
commit
cc16f90a07
|
@ -6779,3 +6779,66 @@ power of CXML is available when necessary.")
|
|||
(description "This is a Common Lisp library that allows to publish D-Bus
|
||||
objects as well as send and notify other objects connected to a bus.")
|
||||
(license license:bsd-2))))
|
||||
|
||||
(define-public sbcl-cl-hooks
|
||||
(let ((commit "5b638083f3b4f1221a52631d9c8a0a265565cac7")
|
||||
(revision "1"))
|
||||
(package
|
||||
(name "sbcl-cl-hooks")
|
||||
(build-system asdf-build-system/sbcl)
|
||||
(version (git-version "0.2.1" revision commit))
|
||||
(home-page "https://github.com/scymtym/architecture.hooks")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url home-page)
|
||||
(commit commit)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0bg3l0a28lw5gqqjp6p6b5nhwqk46sgkb7184w5qbfngw1hk8x9y"))))
|
||||
(inputs
|
||||
`(("alexandria" ,sbcl-alexandria)
|
||||
("let-plus" ,sbcl-let-plus)
|
||||
("trivial-garbage" ,sbcl-trivial-garbage)
|
||||
("closer-mop" ,sbcl-closer-mop)))
|
||||
(native-inputs
|
||||
`(("fiveam" ,sbcl-fiveam)))
|
||||
(synopsis "Hooks extension point mechanism (as in Emacs) for Common Lisp")
|
||||
(description "A hook, in the present context, is a certain kind of
|
||||
extension point in a program that allows interleaving the execution of
|
||||
arbitrary code with the execution of a the program without introducing any
|
||||
coupling between the two. Hooks are used extensively in the extensible editor
|
||||
Emacs.
|
||||
|
||||
In the Common LISP Object System (CLOS), a similar kind of extensibility is
|
||||
possible using the flexible multi-method dispatch mechanism. It may even seem
|
||||
that the concept of hooks does not provide any benefits over the possibilites
|
||||
of CLOS. However, there are some differences:
|
||||
|
||||
@itemize
|
||||
|
||||
@item There can be only one method for each combination of specializers and
|
||||
qualifiers. As a result this kind of extension point cannot be used by
|
||||
multiple extensions independently.
|
||||
@item Removing code previously attached via a @code{:before}, @code{:after} or
|
||||
@code{:around} method can be cumbersome.
|
||||
@item There could be other or even multiple extension points besides @code{:before}
|
||||
and @code{:after} in a single method.
|
||||
@item Attaching codes to individual objects using eql specializers can be
|
||||
cumbersome.
|
||||
@item Introspection of code attached a particular extension point is
|
||||
cumbersome since this requires enumerating and inspecting the methods of a
|
||||
generic function.
|
||||
@end itemize
|
||||
|
||||
This library tries to complement some of these weaknesses of method-based
|
||||
extension-points via the concept of hooks.")
|
||||
(license license:llgpl))))
|
||||
|
||||
(define-public cl-hooks
|
||||
(sbcl-package->cl-source-package sbcl-cl-hooks))
|
||||
|
||||
(define-public ecl-cl-hooks
|
||||
(sbcl-package->ecl-package sbcl-cl-hooks))
|
||||
|
|
Reference in New Issue