Greetings,
I've made a number of improvements to the ParenScript code base. What's the best way for us to merge these changes into the darcs repo on common-lisp.net?
Most of the updates fall into five basic broad categories:
* Rewriting PS special forms to better match their CL equivalents. For example, DO now does parallel assignment, supports a return value, and can properly initialize variables that don't increment.
* Improving coverage of CL by adding such forms as SETQ and PSETF.
* Improving access to JS capabilities, such as labeled for loops.
* Documentation and test case updates.
* Miscellaneous code cleanups, whitespaceification, and global standardizations.
The changes are fully backward compatible, as long as you weren't relying on the 'broken' sequential assignment that DO and LET were doing. ;) DO* and LET* are now available for that purpose, of course.
Looks like in total I added somewhere around 350 lines and removed 210 lines from the code base, excluding documentation and test cases. To the documentation I added 368 lines and removed 227.
The changes are reasonably tested and have been in use on my production systems for a couple of months. I've included the darcs changelog below my signature.
Since I use ParenScript rather heavily, it's very likely that I'll be making more substantial changes on an ongoing basis. I'd be happy to help maintain the project. Let me know.
Cheers,
-- Travis
P.S. My branch of parenscript can currently be found here:
http://darcs.tcross.org/parenscript/
$ darcs chan --reverse
[snip...]
Tue Feb 26 22:59:53 UTC 2008 Travis Cross <tc@tra...> * Corrected spelling error.
Tue Feb 26 23:09:02 UTC 2008 Travis Cross <tc@tra...> * Whitespace standardization in src/package.lisp.
Sun Mar 30 01:46:18 UTC 2008 Travis Cross <tc@tra...> * Added support for breaking and continuing to arbitrary labels.
Sun Mar 30 02:05:25 UTC 2008 Travis Cross <tc@tra...> * Greatly simplified implementation of lexical-let*.
Sun Mar 30 02:08:29 UTC 2008 Travis Cross <tc@tra...> * Added lexical-let.
Sun Mar 30 02:14:00 UTC 2008 Travis Cross <tc@tra...> * Added simple-let* and aliased let* to it.
Sun Mar 30 02:22:18 UTC 2008 Travis Cross <tc@tra...> * Added simple-let, which does parallel binding without a lambda.
Sun Mar 30 02:23:16 UTC 2008 Travis Cross <tc@tra...> * Aliased let to simple-let.
Sun Mar 30 02:25:53 UTC 2008 Travis Cross <tc@tra...> * Added psetf.
Sun Mar 30 02:27:55 UTC 2008 Travis Cross <tc@tra...> * Added setq and psetq.
Sun Mar 30 02:33:34 UTC 2008 Travis Cross <tc@tra...> * Updated let1-dynamic to clean up its temporary stack variable after use.
Sun Mar 30 19:35:12 UTC 2008 Travis Cross <tc@tra...> * Improved, extended, and refactored iteration special forms.
* Added support for DO*.
* DO now does parallel assignment.
* DO/DO* now correctly support init-forms such as:
(do (a (b) (c 1) (d 1 (1+ d))) ...)
* DO/DO*/DOTIMES/DOLIST/DOEACH now support return values via a lambda transform.
* DOEACH now supports implicit key/value destructuring, e.g.:
(doeach ((key val) arr res) ...)
* Added labeled-for to facilitate creating labeled for loops.
* Restructured low level printer operators to better match the underlying JS.
Sun Mar 30 19:57:12 UTC 2008 Travis Cross <tc@tra...> * Whitespaceification: removed indentation tabs throughout project.
...and replaced each tab with 8 spaces. Tab indentation had previously been used inconsistently and was dominated by space-based indentation.
In the future, disable indent-tabs-mode in emacs!
(setq indent-tabs-mode nil)
Sun Mar 30 20:11:34 UTC 2008 Travis Cross <tc@tra...> * Some minor comment and whitespace cleanup.
Sun Mar 30 22:28:56 UTC 2008 Travis Cross <tc@tra...> * Updated the documentation and test cases.
Sun Mar 30 22:35:50 UTC 2008 Travis Cross <tc@tra...> * Cleaned up and rearranged the package exports a bit.
Sun Mar 30 22:38:31 UTC 2008 Travis Cross <tc@tra...> * Removed deprecated exports that are no longer implemented.
Sun Mar 30 22:51:16 UTC 2008 Travis Cross <tc@tra...> * Added a mechanism for expanding parenscript forms in a clean environment.
Sun Mar 30 22:53:08 UTC 2008 Travis Cross <tc@tra...> * Added myself to the list of contributors.
Sun Mar 30 23:39:49 UTC 2008 Travis Cross <tc@tra...> * Cleaned up and standardized indentation of JS code in the reference documentation.
Hi Travis,
That looks pretty awesome. I've asked the common-lisp.net admin to give you an account and add you to the project. You'll need to send your PGP public key to admin@common-lisp.net.
Out of curiosity, what kind of production system are you using Parenscript for?
Thank you, Vladimir
On 3/30/08, Travis Cross travis@travislists.com wrote:
Greetings,
I've made a number of improvements to the ParenScript code base. What's the best way for us to merge these changes into the darcs repo on common-lisp.net?
Most of the updates fall into five basic broad categories:
- Rewriting PS special forms to better match their CL equivalents.
For example, DO now does parallel assignment, supports a return value, and can properly initialize variables that don't increment.
Improving coverage of CL by adding such forms as SETQ and PSETF.
Improving access to JS capabilities, such as labeled for loops.
Documentation and test case updates.
Miscellaneous code cleanups, whitespaceification, and global
standardizations.
The changes are fully backward compatible, as long as you weren't relying on the 'broken' sequential assignment that DO and LET were doing. ;) DO* and LET* are now available for that purpose, of course.
Looks like in total I added somewhere around 350 lines and removed 210 lines from the code base, excluding documentation and test cases. To the documentation I added 368 lines and removed 227.
The changes are reasonably tested and have been in use on my production systems for a couple of months. I've included the darcs changelog below my signature.
Since I use ParenScript rather heavily, it's very likely that I'll be making more substantial changes on an ongoing basis. I'd be happy to help maintain the project. Let me know.
Cheers,
-- Travis
P.S. My branch of parenscript can currently be found here:
http://darcs.tcross.org/parenscript/
$ darcs chan --reverse
[snip...]
Tue Feb 26 22:59:53 UTC 2008 Travis Cross <tc@tra...>
- Corrected spelling error.
Tue Feb 26 23:09:02 UTC 2008 Travis Cross <tc@tra...>
- Whitespace standardization in src/package.lisp.
Sun Mar 30 01:46:18 UTC 2008 Travis Cross <tc@tra...>
- Added support for breaking and continuing to arbitrary labels.
Sun Mar 30 02:05:25 UTC 2008 Travis Cross <tc@tra...>
- Greatly simplified implementation of lexical-let*.
Sun Mar 30 02:08:29 UTC 2008 Travis Cross <tc@tra...>
- Added lexical-let.
Sun Mar 30 02:14:00 UTC 2008 Travis Cross <tc@tra...>
- Added simple-let* and aliased let* to it.
Sun Mar 30 02:22:18 UTC 2008 Travis Cross <tc@tra...>
- Added simple-let, which does parallel binding without a lambda.
Sun Mar 30 02:23:16 UTC 2008 Travis Cross <tc@tra...>
- Aliased let to simple-let.
Sun Mar 30 02:25:53 UTC 2008 Travis Cross <tc@tra...>
- Added psetf.
Sun Mar 30 02:27:55 UTC 2008 Travis Cross <tc@tra...>
- Added setq and psetq.
Sun Mar 30 02:33:34 UTC 2008 Travis Cross <tc@tra...>
- Updated let1-dynamic to clean up its temporary stack variable after
use.
Sun Mar 30 19:35:12 UTC 2008 Travis Cross <tc@tra...>
Improved, extended, and refactored iteration special forms.
Added support for DO*.
DO now does parallel assignment.
DO/DO* now correctly support init-forms such as:
(do (a (b) (c 1) (d 1 (1+ d))) ...)
DO/DO*/DOTIMES/DOLIST/DOEACH now support return values via a lambda transform.
DOEACH now supports implicit key/value destructuring, e.g.:
(doeach ((key val) arr res) ...)
Added labeled-for to facilitate creating labeled for loops.
Restructured low level printer operators to better match the underlying JS.
Sun Mar 30 19:57:12 UTC 2008 Travis Cross <tc@tra...>
- Whitespaceification: removed indentation tabs throughout project.
...and replaced each tab with 8 spaces. Tab indentation had previously been used inconsistently and was dominated by space-based indentation.
In the future, disable indent-tabs-mode in emacs!
(setq indent-tabs-mode nil)
Sun Mar 30 20:11:34 UTC 2008 Travis Cross <tc@tra...>
- Some minor comment and whitespace cleanup.
Sun Mar 30 22:28:56 UTC 2008 Travis Cross <tc@tra...>
- Updated the documentation and test cases.
Sun Mar 30 22:35:50 UTC 2008 Travis Cross <tc@tra...>
- Cleaned up and rearranged the package exports a bit.
Sun Mar 30 22:38:31 UTC 2008 Travis Cross <tc@tra...>
- Removed deprecated exports that are no longer implemented.
Sun Mar 30 22:51:16 UTC 2008 Travis Cross <tc@tra...>
- Added a mechanism for expanding parenscript forms in a clean
environment.
Sun Mar 30 22:53:08 UTC 2008 Travis Cross <tc@tra...>
- Added myself to the list of contributors.
Sun Mar 30 23:39:49 UTC 2008 Travis Cross <tc@tra...>
- Cleaned up and standardized indentation of JS code in the reference
documentation.
Vladimir Sedach wrote:
Out of curiosity, what kind of production system are you using Parenscript for?
Currently parenscript generates the JS for our (that is, OfficeTone's http://www.officetone.com) customer self-service and payment portal, as well as some back-end management and provisioning systems.
In development is a system where customers/visitors can `build' their own hosted VoIP phone system in their browser and get an instant service quote, order equipment, and make payment in a rather seamless fashion.
Cheers,
-- Travis
parenscript-devel@common-lisp.net