I'm glad to see the tighter code being generated for keyword
arguments, but I'm afraid there's a problem. If a default value is
provided, it is now being evaluated whether it's needed or not:
(defun blah (&key (param (long-running-computation)))
(foo param))
=>
function blah() {
var param = longRunningComputation();
var _js10 = arguments.length;
// ...
return foo(param);
};
Compare this to:
(defun blah (&optional (param (long-running-computation)))
(foo param))
=>
function blah(param) {
if (param === undefined) {
param = longRunningComputation();
};
return foo(param);
};
I think the above keyword behavior is incorrect and the optionals have
it right. Yet I like the fact that all the sludge of the "if
variable remains undefined after sucking out the optional arguments
then set it to null" sort has been removed.
Is there a compromise? For example, could we do it the simpler way
where the default value is a constant?
Daniel