[ 
https://issues.apache.org/jira/browse/COUCHDB-1397?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13198732#comment-13198732
 ] 

Jason Smith commented on COUCHDB-1397:
--------------------------------------

## Facts

1. All documentation, all books, all online resources, and almost all code use 
the "function expression" style to program CouchDB:
    { "views":{"people":{"map":
      "function(doc) { emit(doc.name, 1) }"
    }}}

2. The code in the string is an invalid JavaScript statement, and also an 
invalid program.

3. (Computer scientists, divert your gaze!) The code is a valid expression, or 
perhaps an r-value. You can copy and paste it to the right-hand side of an 
assignment statement, or paste it as a parameter in a function call.

4. CouchDB inadvertently exploited a now-fixed SM bug where you can just eval() 
the expression, it is treated as a statement, and eval returns the compiled 
function object.

5. Distinct from Fact 4, CouchDB users inadvertently exploited the bug by 
writing what are more properly called "programs", with helper functions, and a 
final (incorrect JavaScript) function expression serving as the entry point for 
Couch to call into.

6. There may be, if the community wants, a distinction between valid 
*JavaScript* programming and valid *CouchDB* programming.

## Opinions

Those clever anonymous function expressions are relaxing. They make intuitive 
sense. Learning how map/reduce works is one of the major emotional payoffs 
CouchDB provides to a learner.

Asking the wiki maintainers, the book authors, and the CouchDB users to change 
anything, even one character, is not relaxing, major release or no.

Instead we should ask something else:

1. CouchDB should support the same old same-old. Even on newer SpiderMonkey.
2. People who wrote full-on programs (helper functions, global state, etc.) 
must adhere to the longstanding documentation and change their code. Perhaps 
CouchDB or its community might show how.

Finally, unless someone can show otherwise, we should assume that very few 
people wrote *programs* instead of *expressions* and so CouchDB can justifiably 
start throwing errors on their code in the 1.2.x branches.
                
> Function expressions, evals in SpiderMonkey
> -------------------------------------------
>
>                 Key: COUCHDB-1397
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1397
>             Project: CouchDB
>          Issue Type: Bug
>          Components: JavaScript View Server
>    Affects Versions: 1.2
>         Environment: All
>            Reporter: Jason Smith
>
> New SpiderMonkey releases do not eval() a sole anonymous function expression. 
> That is not a valid JavaScript statement, and so it is not a valid JavaScript 
> script.
> COUCHDB-1302 addressed this for 1.1 and the 1.1.x branch. This ticket is for 
> 1.2. (Sorry to spam COUCHDB-1302. I saw "Unassigned" and read "Unresolved.")

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to