dynamic-import

  1. dynamic-import
  2. Documentation
    1. Usage
    2. dynamic-import
    3. dynamic-import-warning
    4. Examples
  3. Bugs & Limitations
  4. Notes
  5. Requirements
  6. Author
  7. Repository
  8. Version history
  9. License

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])

Attempts to import the identifiers IDs from a module, in the listed MDs order. Should no module succeed, the default specification DEF is used to bind the IDs.

The extend module identifier syntax, ex: (srfi 1) & (main sub1 sub1-1), is supported. However, use does need to be as ((srfi 1) (main sub1 sub1-1)), to prevent misunderstanding.

MD ; (or symbol (list symbol fixnum) (list-of (or symbol number)))
ID ; (symbol)
MDs ; (or MD (list-of MD)) ; one or many module specifications
IDs ; (or ID (list-of ID)) ; one or many 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

Examples

(import dynamic-import)

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

; tcp-listen ... from tcp6 else (chicken tcp) else stub
;
; default 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)
  ; make, named, failure defaults for the imports
  (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 is literal, a procedure but not called as above.
;
; only one import so only one default; one per import.
(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.1.0
dynamic-import-warning accepts only a procedure.
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.