Next: libutils compiling, Previous: libutils file-system, Up: libutils [Index]
It is possible to dynamically load a Scheme library after the program has been compiled. Here is an example of: creating a library, importing it, then dynamically loading its syntactic bindings:
(import (vicare) (prefix (vicare libraries) libs.)) (library (demo-01) (export fun var) (import (rnrs)) (define (fun a b) (+ a b)) (define var 123)) (import (demo-01)) (let* ((lib (libs.library-dynamic-load-and-intern '(demo-01))) (fun (libs.library-dynamic-retrieve lib 'fun)) (var (libs.library-dynamic-retrieve lib 'var))) (values (fun 1 2) var)) ⇒ 3 123
another example which loads the installed (vicare pregexp)
:
(import (vicare) (prefix (vicare libraries) libs.)) (define-values (pregexp-match) (let ((lib (libs.library-dynamic-load-and-intern '(vicare pregexp)))) (values (libs.library-dynamic-retrieve lib 'pregexp-match)))) (pregexp-match "[a-z]+" "ciao hello ciao") ⇒ ("ciao")
Search for a library whose name matches the library reference
libref, intern it and invoke it. When successful return a
<library>
object. If an error occurs: raise an exception.
This function makes use of find-library-by-name
to search and
intern the requested library.
Search in the GLOBAL-ENV of the <library>
object lib an
exported syntactic binding whose public name is the symbol name.
When successful: return the value bound to the syntactic binding. If an
error occurs: raise an exception.