August 2nd, 2010
With (((parentheses))). Just like other dialects of Lisp. If (((parentheses))) bother you, I posit that you don't "get" Lisp and, more importantly, Lisp's macros and metaprogramming facilities. But this is a non-issue, so I suggest you read the following and continue:
Vladimir Sedach, maintainer of ParenScript, comments on Hacker News:
The entire point of programming is automation. The question that immediately comes to mind after you learn this fact is - why not program a computer to program itself? Macros are a simple mechanism for generating code, in other words, automating programming. Unless your system includes a better mechanism for automating programming (so far, I have not seen any such mechanisms), not having macros means that you basically don't understand why you are writing code.
I love ParenScript. I truly feel that "ParenScript is an Acceptable Lisp".
ParenScript is practical. You can use it anywhere: server-side with
CommonJS, client-side with
<script> tags, as a database query language with
CouchDB. And it's fast. Maybe not as fast as the code generated from the popular
faster. Faster than Python's or Ruby's implementations. Deployment is like
tried for a long time to use CL and Hunchentoot as the backend for
TryParenScript.com. Hell. I was up and running within minutes when I decided
to use ParenScript and NodeJS instead.
Module system missing from JS and everything is global? Write macros. Don't like
prototypes and want class-based OO? Write macros. Want Python's
in client side code? Write macros. Browser inconsistencies cluttering your
logic? Write macros. Haskell/ML style pattern matching and destructuring? Write
macros. Asynchronous timeouts and callbacks becoming a mess of confusion? Don't
make me repeat myself.
The sad fact is that I won't reap the benefits of open source using ParenScript. Contributors won't come; developers won't read my source. The ParenScript community is very friendly, but very small. I could rewrite wu.js to be more concise, straightforward, and maintainable with ParenScript, but if any other developer found a bug or wanted to add a new feature, they wouldn't want to learn ParenScript (and probably Lisp as well) just to contribute.
Opportunity cost is a bitch.
When I want to Lisp, ParenScript will be my go-to dialect. When I want to be social... well, ParenScript's day hasn't come.
Come work with me on Firefox Developer Tools on July 8th, 2014
Debugging Web Performance with Firefox DevTools - Velocity 2014 on June 26th, 2014
Beyond Source Maps on March 12th, 2014
Memory Tooling in Firefox Developer Tools in 2014 on March 4th, 2014
Hiding Implementation Details with ECMAScript 6 WeakMaps on January 13th, 2014
Re-evaluate Individual Functions in Firefox Developer Tools' Scratchpad on November 22nd, 2013
Testing Source Maps on October 2nd, 2013
Destructuring Assignment in ECMAScript 6 on August 15th, 2013
My Talk from Front Trends 2013 on June 21st, 2013