[parenscript-devel] Package system, new reader, compilation interface changes, and more refactoring
Red Daly
reddaly at stanford.edu
Fri Jul 27 03:47:08 UTC 2007
Sorry for clobbering features during the code overhaul. I'm glad you
spotted what I wiped out. Maybe you can give me some examples of dual
Lisp/ParenScript macro definitions. I am wary to make them, though I
have not tried it out.
Red
Vladimir Sedach wrote:
> I finally got around to looking at the changes today. Neat! I pushed
> some patches that cleaned up a few of the deprecated bits, and
> restored the Lisp/ParenScript macro defining stuff (I'm surprised you
> haven't made use of them - that stuff is IMO one of the best features
> of PS).
>
> Vladimir
>
> On 7/25/07, Red Daly <reddaly at gmail.com> wrote:
>> Dear Parenscripters,
>>
>> I have made some significant changes to the source code. The impetus
>> for
>> most of my changes was the creation of a package system for Parenscript.
>> This is a brief, rambling explanation of my changes to the code base
>> and is
>> by no means a full documentation of new features.
>>
>> The compilation interface is now contained in
>> 'compilation-interface.lisp'.
>> The main functions for compiling Parenscript to Javascript are
>> COMPILE-SCRIPT, COMPILE-SCRIPT-FILE, and the macro SCRIPT.
>>
>> The package system is very similar to Lisp's package system because it
>> works on the symbol level. A script package has an associated lisp
>> package
>> that it uses to intern all of that script package's symbols. This
>> way, the
>> parenscript package of any (lisp) symbol can be determined by looking
>> at the
>> lisp package of any lisp symbol. The Parenscript compiler mandates that
>> every symbol have an associated script package. As a result, the
>> compiler
>> now assigns semantic meaning to both a symbol's name and package--before
>> only the string name of a symbol had any bearing on the resultant code.
>>
>> There are a few packages that come standard issue (see
>> builtin-packages.lisp). The macros provided by the Parenscript
>> language are
>> split into two package: PARENSCRIPT and JAVASCRIPT. JAVASCRIPT contains
>> special forms that are eventually translated directly to Javascript (
>> e.g.
>> defvar, lambda, with). The PARENSCRIPT package is the package most
>> users
>> will use and contains the rest of the special forms/macros described
>> in the
>> documentation (e.g. macrolet, let, html).
>>
>> There is now a Parenscript reader thanks to the BSD-licensed Sacla
>> project[SACLA]. Parenscript can use either the Lisp reader or the
>> Parenscript reader to read objects from source text. Generally,
>> Parenscript
>> embedded in Lisp will use the Lisp reader, and Parenscript in
>> Parenscript
>> files (*.paren) will use the Parenscript reader. (Though perhaps in the
>> future the Parenscript reader will be preferred.) It is possible to
>> use the
>> Lisp reader within the Parenscript reader with the reader macro
>> #L(lisp-form), which may be useful for some reason. Parenscript does
>> not
>> currently interfere with the Lisp reader by introducing reader
>> macros. There
>> are only a few differences between the readers:
>> # The Parenscript reader will not obey defined reader macros from
>> the Lisp
>> reader
>> # The Parenscript reader understands Parenscript package names as
>> package
>> prefixes and
>> does NOT understand Lisp package names as package prefixes.
>> # The Lisp reader does not understand Parenscript package names but
>> does
>> understand Lisp package names as symbol prefixes.
>>
>> I broke up source-model.lisp into js-source-model.lisp and
>> ps-source-model.lisp to correspond to the underlying Javascript and
>> Parenscript special forms. I broke up parser.lisp into parser.lisp,
>> js-macrology, and ps-macrology: the macrology files define macros for
>> javascript and parenscript; parser.lisp contains the functionality for
>> parsing S-expressions into the objects defined in the source-model
>> files. I
>> moved js-html and js-css to the lib/ subdirectory; eventually these
>> should
>> probably be members of other packages.
>>
>> All tests currently pass and I am adding more tests. More on the
>> package
>> system later, after I have made use of it myself.
>>
>>
>> Happy hacking,
>> Red Daly
>>
>> [SACLA]
>> http://homepage1.nifty.com/bmonkey/lisp/sacla/index-en.html
>>
>> _______________________________________________
>> parenscript-devel mailing list
>> parenscript-devel at common-lisp.net
>> http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
>>
>>
> _______________________________________________
> parenscript-devel mailing list
> parenscript-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
More information about the parenscript-devel
mailing list