Subject: Re: macro functionality in embedded languages.
From: rpw3@rpw3.org (Rob Warnock)
Date: Fri, 06 Apr 2007 06:07:42 -0500
Newsgroups: comp.lang.lisp
Message-ID: <KJCdnZZaE-FjtIvbnZ2dnUVZ_rKvnZ2d@speakeasy.net>
Tim Bradshaw <tfb+google@tfeb.org> wrote:
+---------------
| ...  DTML ...  does do some probably-unneeded optimisation such that
| macros only get recompiled when it knows they might have changed.
| Typically the macros call Lisp functions which then do a lot of
| backquote-based rewriting of the parsed DTML they get passed.
| 
| Previous to DTML I briefly used something which was file-based but
| used sexps.  It used READ and then HTOUT's printing support...
+---------------

My "LHP" ("Lisp-Handled Pages", as in the example I mentioned
before, <http://rpw3.org/hacks/lisp/appsrv-demo.lhp>) does a
similar recompilation/caching, but of essentially pure CL code
[albeit using HTOUT for HTML-generation] rather than DTML or
some other tailored syntax. If the application server is handed
a path suffixed with ".lhp", it checks the modification dates
of the corresponding file and the same file with a FASL suffix
(".x86f" for CMUCL), and only recompiles and/or reloads the file
if the source is newer than the internally-cached copy of the
(compiled) page. [Compilation is done only if there's already
a compiled FASL there, so the user can control which LHP pages
get compiled and which ones only get interpreted.]

Development is *very* fast with this model, since to recompile
recently-edited code you need only hit "Refresh" (or "Reload")
button on your browser...


-Rob

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607