incubator-couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jason Smith (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (COUCHDB-1397) Function expressions, evals in SpiderMonkey
Date Thu, 02 Feb 2012 12:33:53 GMT

    [ 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

        

Mime
View raw message