Namespaces and Bindings
GOO is a lexically scoped language. Bindings contain values and are
looked up by name. Lexical bindings are
visible from only particular textual ranges in a program. Lexical
bindings shadow visible bindings of the same name.
At the topmost level, GOO provides simple modules that map from
names to bindings. Each file introduces a new module with the same
name as the file. Nested modules are supported by way of slashes in
module names. Modules can import bindings exported by other modules,
but currently there is no way to selectively exclude or rename
imported bindings. Furthermore, no cycles can occur in the module use
heterarchy.
DV | (DV ,var ,form) | S |
| defines a global variable named (var-name ,var) with an
initial value ,form (cf. Scheme's DEFINE). | |
DEF | (DEF ,var ,val) | S |
| locally binds ,var to ,val and evaluates
remainder of current body in the context of that binding. | |
| (DEF (TUP ,var ...) ,val) | S |
| parallel binding can also be specified using TUP on the lhs of
a DEF binding. For example
(DEF (TUP x y) (TUP 1 2)) | |
LET | (LET ((,var ,val) ...) ,@body) | S |
| == (SEQ (DEF ,var ,val) ... ,@body) | |
|
where
,var | == ,name | (,name ,type) | L |
| with ,name | ,type == (,name ,type) within lists. | |
|
SET | (SET ,name ,form) | S |
| sets ,name binding to value of evaluating ,form
(cf. Scheme's SET!) | |
| (SET (,name ,@args) ,form) | S |
| == (,name ## -setter ,form ,@args) | |
USE | (USE ,name) | S |
| loads the module ,name (if it hasn't been loaded
already) and aliases
all the exported bindings into the current namespace. | |
EXPORT | (EXPORT ,name) | S |
| makes the binding ,name available to code which uses
this module in the future. | |
USE/EXPORT | (USE/EXPORT ,name) | S |
| same as USE plus reexports all imported bindings. | |
|