You are looking at historical revision 42898 of this page. It may differ significantly from its current revision.

dynamic-import

Documentation

A dynamic import facility for CHICKEN Scheme.

Usage

(import dynamic-import)

Note strongly suggest warnings be disabled before using dynamic-import: (enable-warnings #f).

"Warning: imported identifier doesn't exist in module ..." can occur due to missing exported identifiers during module search. Also, warnings from dynamic-import flow thru a different channel.

dynamic-import

[syntax] (dynamic-import MDs IDs (default DEF))
[syntax] (dynamic-import MDs IDs [DEF])

Defines the identifiers IDs, imported from the first available module in MDs, using the default specification DEF when all modules are unproductive.

MD ; (or symbol (list symbol fixnum) (list-of (or symbol number)))
ID ; (symbol)
MDs ; (or MD (list-of MD)) ; single, or multiple, module specifications
IDs ; (or ID (list-of ID)) ; single, or multiple, identifiers
DEF
(default * ...) ; default is * ...
DEF
procedure ; default is the result of (DEF IDs)

The IDs are assigned from the default list, w/ an element for each ID.

dynamic-import-warning

[parameter] (dynamic-import-warning [WARN]) -> procedure

: WARN ; (#!rest -> void) ; warning procedure; default warning : WARN ; #t ; default : WARN ; #f ; void

Examples

(import dynamic-import)

;see note in documentation above
(enable-warnings #f)

;tcp-listen ... from tcp6 else (chicken tcp) else stub
;default here is procedure and called unlike the example below
(dynamic-import (tcp6 (chicken tcp))
  (tcp-listen tcp-listener-fileno tcp-listener-port
   tcp-accept tcp-accept-ready? tcp-close
   tcp-abandon-port tcp-buffer-size tcp-connect
   tcp-read-timeout tcp-write-timeout)
   (lambda (ids) (map (lambda (id) (lambda _ (error id "no dynamic import"))) ids)))
;
;NOTE on import failure: (tcp-read-timeout ...)
;=> Error: (tcp-read-timeout) no such import

;ssl-connect* from openssl else stub
;default here is literal, a procedure but not called as above
(dynamic-import openssl ssl-connect* (default (lambda _ (values #f #f))))
;
;NOTE on import failure: (ssl-connect* ...)
;=> #f #f

Bugs & Limitations

Notes

Requirements

test test-utils srfi-1

Author

Kon Lovett

Repository

This egg is hosted on the CHICKEN Subversion repository:

https://anonymous@code.call-cc.org/svn/chicken-eggs/release/5/dynamic-import

If you want to check out the source code repository of this egg and you are not familiar with Subversion, see this page.

Version history

1.0.2
Do not drop unknown error conditions.
1.0.1
srfi-1 is a test dependency only.
1.0.0
Swap module & import arguments, support extended module-name syntax, remove dynamic-importer export.
0.1.0
Removed tabulated-list-of}. Public Domain.
0.0.3
Drop warning-on; see error-utils warning-on.
0.0.2
Restrict import list, add warning-on.
0.0.1
Initial Release.

License

This code is in the public domain.