|  |  | Namespaces and Bindings

# 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.

`D.` | `(D. ,var ,form)` | `S`
| defines a global constant named `(var-name ,var)` with an initial value `,form` (cf. Dylan's `DEFINE CONSTANT`). |
`DV` | `(DV ,var ,form)` | `S`
| defines a global variable named `(var-name ,var)` with an initial value `,form` (cf. Dylan's `DEFINE VARIABLE`). |
`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. |

|  |  | Namespaces and Bindings