On Apr 22, 2009, at 3:31 PM, Michele Simionato wrote:

I was wondering ... what's the difference between the Ikarus
module system and the module system provided by the good old
psyntax?  From the user point of view, I do not see big
differences.  Am I correct?

An R6RS library and a Chez top-level module have similarities:
they both have bodies that contain variable and syntax
definitions, some of which can be exported, and you can import
one module into another.  So, they're similar on the surface.
But there are major differences.

1. Outer scope
Chez modules exist in some environment (typically, in the
interaction-environment, but that can change) that contains
bindings that include the module keyword itself.  The outer
scope in the environment in which the module is expanded is
visible inside the module (unless you restrict it using the
import-only keyword).  R6RS/Ikarus libraries do not exist
in an environment: they are stand-alone entities with their
own syntax and so on.

2. Expansion and Evaluation
Ikarus libraries are automatically expanded/compiled when
you import them (thus, there's a mapping from library names
to some storage that contains libraries' code).  Chez
modules are not associated with any storage: if you import
a module and it doesn't already exist in the environment,
you get an error.  This means that in Chez, it is your
duty to ensure that modules are "loaded" before they are
used.  Now "loaded" is a loaded term as it implies all of
"compiled", "visited", and "invoked" (or "revisited" in
the Chez lingua).  Moreover, the load, compile, visit, and
revisit are operations that operate on files, not modules,
(such files may contain any code, not just modules) and
work by modifying the environment in which such files are
loaded, compiled, visited, or revisted.  Operations on
libraries in Ikarus do not modify the environment since no
environment is required for performing these operations.
In short, you need to manage the phase dependencies (when
files are loaded/compiled/visited/revisited) yourself so
that compile-time and run-time information are available
when needed.

Aziz,,,

Reply via email to