top
up

14.3The racket/load LanguageπŸ”— i

The racket/load language supports evaluation where each top-level form in the module body is separately passed to eval in the same way as for load .

The namespace for evaluation shares the module registry with the racket/load module instance, but it has a separate top-level environment, and it is initialized with the bindings of racket. A single namespace is created for each instance of the racket/load module (i.e., multiple modules using the racket/load language share a namespace). The racket/load library exports only #%module-begin and #%top-interaction forms that effectively swap in the evaluation namespace and call eval .

For example, the body of a module using racket/load can include module forms, so that running the following module prints 5:

(module mracket/base
(provide x)
(define x5))
(module nracket/base
(require 'm)
(display x))
(require 'n)

Definitions in a module using racket/load are evaluated in the current namespace, which means that load and eval can see the definitions. For example, running the following module prints 6:

(define x6)
(display (eval 'x))

Since all forms within a racket/load module are evaluated in the top level, bindings cannot be exported from the module using provide . Similarly, since evaluation of the module-body forms is inherently dynamic, compilation of the module provides essentially no benefit. For these reasons, use racket/load for interactive exploration of top-level forms only, and not for constructing larger programs.

top
up

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /