Hi Stephan,

this is very helpful, so thank you.

I am going to explain my use-case fully, because its pretty easy once
explained, (I am a bad explainer) and forgive me if my explanations
are overly simplistic, I am just a fanatic on clarity, so I write
things as dumbed down as possible.

A.) AlchemyDB has SQL commands
  1.) SELECT * FROM tbl WHERE user_id = 33 AND name = 'sally'
  2.) UPDATE tbl SET count = count + 1 WHERE id = 1234
B.) AlchemyDB has redis commands
  1.) SET session_77 'name:bill;age:22'
  2.) HGET user_77 name
C.) AlchemyDB currently has some commands to call the embedded LUA
  This will add the file "functions.lua" to the embedded lua
environment (used to populate lua libraries)
    1.) CONFIG ADD LUA functions.lua
  This will pass the string 'return 1*2*3' to the embedded lua parser/
executor which will perform the action '1*2*3' and pass the results
back to AlchemyDB
    2.) LUA 'return 1*2*3;'
  This will call AlchemyDB's SQL and Redis commands from w/in LUA
     First the session is checked for existence, and if it exists all
rows from the table 'user_data' are returned, otherwise return an
empty-string
    3.) LUA 'sess = client('GET', 'session_77'); if (sess == nil)
return "" else return client('SELECT','*','FROM',;user_data', ' WHERE
id = 77'); end'

The lua function "client()" makes internal calls to AlchemyDB's SQL
and redis commands, and is VERY useful for avoiding network hops, and
placing trivial logic datastore side. Its like a sane stored
procedures implementation.

I want to have the exact same thing in Javascript, because Javascript
is really gaining in momentum, has 1000s of good libraries, and
Node.js's Alchemy users would backflip at the possiblity of
arbitrarily doing javascript logic at any point in their architecture.

So I need a very lightweight embedding of V8 and the single javascript
function "client()" that can call C to internally reach into
AlchemyDB.

I can have options to make AlchemyDB in C++ to be able to include V8,
that is acceptable.

I understand everything you wrote, I am just a little bit leery of how
much time it will take to figure out all the finer details of
embedding one language in another in another, it was actually tricky
to do w/ Lua, and lua is made for embedding ease. Any idea how many
man-days embedding V8 and then using v8-juice to implement the JS func
"client" would take? (just ballpark: is it a day, a week, a month?)

What would be REAL helpful is if there was a hello-world for embedding
v8 in C and then using v8-juice to define a hello-world JS-calling-C
function along w/ a how to compile and test for dummies, so I could
start playing around w/ it. This is my work style, if I can build
something, I can start glueing things together, but this initial
learning curve of libraries internals/peculiarities takes me a long
time.

thanks,
 Jak

On Jan 17, 7:10 am, Stephan Beal <[email protected]> wrote:
> On Mon, Jan 17, 2011 at 2:51 PM, Jak Sprats <[email protected]> wrote:
> > This seems to be what I am looking for ... some questions:
> > 1.) AlchemyDB is written in ANSI-C, what are the requirements for your
> > bindings (C++ at a minimum, any specifics on that)
>
> Whatever requirements v8 has, basically. i don't remember v8-juice have any
> requirements above what v8 needs.
>
> > 2.) I just need one function wrapped, the function is called
> > "client()" and it can take between 1 and 6 arguments.
>
> The code demonstrated on that page accepts up to 10 arguments, and more can
> be generated via a script.
> You don't need all of v8-juice for what you're doing: you can get by with
> only some of the header files:
>
> Go to:http://code.google.com/p/v8-juice/source/browse/#svn/trunk/src/includ...
>
> grab:
>
> - convert.h
> - forwarding.h
> - forwarding-*.h (generated code)
> - TypeList.h
> - TypeList_*.h ( generated code)
>
> And that should do it. The primary advantage, over using the whole v8-juice
> lib, is that you need only headers, not .cpp files. All of the type
> conversion/function-forwarding code is templates, and implemented in their
> header files.
>
> Your code should include convert.h and/or forwarding.h, and the rest are
> implementation details. Those files assume an includes path of
> <v8/juice/foo.h>, and you will need to replace those if you plan to use a
> different structure.
>
> > And on a long shot, do you know of any C programs that embedded V8 and
> > then the embedded v8 calls a C function via your bindings. This is
> > what I am trying to reproduce in AlchemyDB (the C function would be
> > "client()").
>
> i don't know of any programs which reach into v8 from C. i have implemented
> v8 add-ons on top of C libraries (like libcurl and libsqlite3), but that's
> going the other direction. C cannot call directly into JS because it can't
> use the objects needed by v8. It can, of course, use a C++ API which has
> been wrapped in (extern "C" {...}), which then can pass on the calls to v8.
> So the call chain would look like: C -> C++ -> JS
>
> i hope this helps a bit,
>
> --
> ----- stephan bealhttp://wanderinghorse.net/home/stephan/

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to