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!
Include STD%PRJ.LSP
at the top of your project.
Call (stdlib-project-init)
by yourself after having loaded all required stdlib modules.
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