I started a Javascript + HTML application some time back. I decided that I wanted to get some Lisp on. So, it was time to pull out Hunchentoot, CL-WHO, and Parenscript.
It’s been awkward slogging so far. I still don’t have a good user-model of when exactly I need to wrap something in a (cl-who:str ...)
or when Parenscript will expand my macro rather than convert it into a function call or how I managed to get the cl-who:*attribute-quote-char*
to finally stick for a few REPLs.
The other half of the awkwardness is that I started writing the application in idiomatic javascript with prototype-based objects.
this.myfirst = undefined;
this.myarray = [ ];
}
MyClass.prototype.mymethod = function (arg1, arg2) {
this.myfirst = arg1;
this.myarray.push(arg2);
};
This makes for some awkward javascript when converted directly into Parenscript because:
- The method
mymethod()
will try to return the result ofArray.push()
(which, technically, is fine, but not really the intent of the method). - Almost every statement on the Lisp side ends up wrapping just about everything in
(parenscript:chain ...)
. (Edit: Of course, I discovered right after posting this that the dot is left untouched in the Parenscript symbol conversion, so I can do(this.myarray.push arg2)
instead of(parenscript:chain this my array (push arg2))
. I’m certainly pleased with the brevity, but it pegs mysomething’s fishy here, Batman
meter.) - I have an aversion to using any package other than
COMMON-LISP
, so everything is way clunkier than all of the tutorials and examples online.
I think that I’m going to scratch all of the Javascript and Parenscript code that I have right now and start over with a mindset of How would I do this if it were just in Lisp? Now, what extra hoops do I need to get Parenscript to make usable Javascript?
rather than How would I do this in Javascript? Oh, and then, how can I make Parenscript say exactly that?
And, I may bite the bullet and (use-package ...)
both CL-WHO and Parenscript.