gnu: Add cl-hooks.
* gnu/packages/lisp.scm (cl-hooks, ecl-cl-hooks, sbcl-cl-hooks): New variables.
This commit is contained in:
		
							parent
							
								
									0b2396b6c6
								
							
						
					
					
						commit
						cc16f90a07
					
				
					 1 changed files with 63 additions and 0 deletions
				
			
		| 
						 | 
					@ -6779,3 +6779,66 @@ power of CXML is available when necessary.")
 | 
				
			||||||
      (description "This is a Common Lisp library that allows to publish D-Bus
 | 
					      (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.")
 | 
					objects as well as send and notify other objects connected to a bus.")
 | 
				
			||||||
      (license license:bsd-2))))
 | 
					      (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 a new issue