Both Node.js and V8 are a make away, so the question is what else each
brings to the table.

I'm of the opinion that the big win of Node.js is npm. I would love to see
CouchDB extensible by npm modules. I've done some experiments along those
lines, but the problem comes back to sandboxing. As you pointed out Jason,
CouchDB's javascript security has not been an issue, because the
SpiderMonkey sandbox is solid. Hopefully someone with deeper knowledge of
Node.js than myself will prove me wrong, but I haven't found a way to
securely sandbox it and still allow the use of require for npm modules.

Couple of alternative ideas:

Option F: Distinguish between core "database" level functionality and
"application" level logic.

- The internal view engine needs to be simple, efficient and secure. Have
this use V8 directly or a DSL on top of Erlang.
- Abstract CouchApp level logic from the core view engine. Things like list
and show functions are perfect for Node.js and npm. I would love to see
this extended further to make it even easier to create user defined
functionality. There are so many common patterns, like the user
registration thread that popped up yesterday, where the current approach is
to build a little external service, that in my opinion would be better
served by a more capable CouchApp engine. I'm not saying we should try and
replace all potential application level logic, but at the very least add in
a concept of a "worker" functions that can filter on different event types
(new user, new doc, updated doc, failed validation function, etc etc) and
execute some user defined function.

There are admittedly problems with this approach. Where do filters,
validation functions and update handlers go? This would also require
depending on both V8 and Node.js, which I think is not as big of a problem
if the CouchApp engine is structured in a way to be replaceable with other
implementations.

Option G: Make all user defined functionality execute in an isolated
context using a remote protocol, and basically turn it into a remote
service. This would make it even easier to build custom engines, but has
some interesting properties like allowing you to have the engine running on
a separate server. Or fun stuff like spinning up a larger EC2 instance when
you need to rebuild a view, and then rolling back down when the full view
build is done.

Option H: Build something like JInterface for Javascript, creating a stand
alone Javascript node and switching over to message passing for all the
jobs. This has some interesting properties for bulk and parallel view
builds.


I'm glad to see this conversation coming along. Jason, cool stuff, thanks
for taking the initiative on this!


-Russell


On Fri, Jan 25, 2013 at 10:01 AM, Jason Smith <j...@iriscouch.com> wrote:

> Hi, David. Yes, you make very good points. I even think you (and Benoit)
> may be ultimately correct
>
> I dispute that Node.js is V8. Node is not V8. Node.js is a direct link to
> God. When I pray to God in the JavaScript language, God moves electrons
> around inside my computer. He writes files to my disk, and He sends packets
> out my Ethernet cable.
>
> A thought experiment: Find some computer power users or sysadmins. Break
> them into two groups, with one task each:
>
> 1. "Install Node.js on your computer, by any means"
> 2. "Install V8 on your computer, by any means"
>
> Which group would self-report more success? Which group would register more
> frustration?
>
> That is the sort of question I hope to answer (or at least supply some
> data). With any luck I can falsify my theory and theology.
>
>
> On Fri, Jan 25, 2013 at 11:35 PM, david martin <
> david.mar...@lymegreen.co.uk
> > wrote:
>
> > On 25/01/13 11:18, Jason Smith wrote:
> >
> >> My **tentative** position is that V8 is a waste of time. We should use
> >> Node.js, not V8. In other words, we should not change couchjs to link
> >> against libv8.so instead of libmozjs.so. Instead, we should **remove**
> the
> >> couchjs binary and build a 100% compatible node version. Again, this is
> my
> >> *suspicion*  but I want to explore it more.
> >>
> >> Embedding V8 is, roughly, the same work as embedding SpiderMonkey. It
> does
> >> not change much. We still depend on an obscure VM with a quirky build
> >> system.
> >>
> > According to Wiki
> >
> > "Node.js is a packaged compilation of Google's V8 JavaScript engine, the
> > libUV platform
> > abstraction layer, and a core library, which is itself primarily written
> > in JavaScript."
> >
> > "We still depend on an obscure VM ( so V8 is an obscure VM although it is
> > embedded in Node.js ) with a quirky build system."
> >
> > Get rid of all quirky build systems, use rebar which builds everything
> AND
> > produces an installable relocatable executable package containing Erlang
> VM
> > and V8  VM and C routines as NIF's where required for speed.
> >
> > So Node "is" V8 plus a lot more which is not required
> >
> >
> > --
> > David Martin
> >
> >
>
>
> --
> Iris Couch
>

Reply via email to