Features

Projects

Projects are a collection of copied modules.

Within projects std-require calls are "delayed", not executed.

After having loaded the project you have to initiliaze the library by yourself by calling (stdlib-project-init). This is different to using plain modules.

not ready yet!

Usage

Include STD%PRJ.LSP at the top of your project.

Call (stdlib-project-init) by yourself after having loaded all required stdlib modules.

Modules within Projects

A project is a collection of lisp files loaded at once. Therefore we don't need modules if you use projects. Otherwise modules are handy for testing and upgrading parts.

When loading projects we set a magic global variable *STD:%PROJECT* to on-nil. Then all required load calls are delayed, that means not executed until *STD:%PROJECT* is reset to nil. The delayed modules are gathered in the list *DELAYED-MODULES*.

If you use the stdlib modules in your own code you may check if you correctly included all needed modules in your project by comparing the two lists *DELAYED-MODULES* and the return value of (std-modules).

I usually define my projects like this:

STD%PRJ, STDINIT, STDMODUL, STDLIST, STDSTR, STDMATH, ...

MYPROG1, MYPROG2, MYPROG3, ...

STDLIB

One major problem is the execution of top-level calls while loading the library. Any failure on executing these calls will fail initializing any ViLL or VLISP RTS project. So be sure to call your top-level calls after all modules are loaded, best done with a seperate initialization function, which calls stdlib-project-init. I usually also include a function which initializes *MODULE-PATH*

Therefore the important stdlib top-level calls in STDINIT2, STDMATH are executed only when *STD:%PROJECT* is nil. Be sure to call stdlib-project-init function to correctly initialize your project!

The functions called by STDLIB-PROJECT-INIT are (so far) in particular:

(std-%top-level-1) from STDINIT2

(std-%locale-init) from STDLOCAL, STDLOCAL requires STDMISC