This is similar to something I've been wanting to do for quite some time. In contrast to your approach (binding JavaScriptCore at the Objective-C level) I want to start with the JavaScriptCore's command-line interpreter. It's currently a barebones interpreter. I would start by adding some missing primitives to the interpreter getting it closer to the V8 developer console (d8). Then work from there.
Good work though. It's nice to see that I'm not the only person that has thought about a Node-like system built on JSC rather than V8. I wonder if you looked at the source for both V8 and JSC, and then concluded JSC would be much nicer to work with? That's what I did initially.
I did some evaluation a while ago about bundling a Javascript engine with mobile apps on iOS and concluded JSC was way easier to compile and integrate. This is in fact what e.g. Appcelerator Titanium does currently.
However, this bundling results in huge binaries, which is not very nice for mobile platforms.
The thing that got me into hacking the prototype was the release of JSC as a public system framework on iOS7, eliminating the need to separately bundle JSC.
So its not really a platform preference, I'm just trying to work with what's currently there...
Please reconsider this. Libuv rocks, and without it, well, you don't really have Node. It's not dependent on v8 in any way, so it makes little sense to not use it.
My initial plan was to provide the node features using Foundation.framework features only. Now, this could turn out to be
more boilerplate code than I intended to write and if it does, I'm
now pretty sure I'd go with libuv.
I'm not quite sure about using libuv from the start, though. My consideration was that a) this is not targeted at server applications, so you don't necessarily need very high performance and b) libuv is a cross-platform library, while I'm targeting darwin only, so it might be a bit overkill.
Do you have experience with libuv? If so, do you have experience regarding footprint / conciseness? Can you confirm/deny my presumptions?
This is very rough and no IO is supported yet. However, I think it serves well as a proof-of-concept that a lightweight node-compatible interface can be done for mobile apps using javascript.
JavaScriptCore is a cross-platform javascript engine on it's own that is used by default in WebKit browsers (Safari, Mobile Safari, Konqueror, etc.).
The new thing on iOS 7 is that this framework is exposed as a public API you can code against. So you don't have to initialize a heavy-weight WebView just to execute Javascript.
Safari gets Nitro, Apple's JIT, but historically it has been unavailable to apps (via UIWebView) for security reasons. I'm unsure if the new Objective-C JavaScriptCore API gets Nitro.
eddieh|12 years ago
Good work though. It's nice to see that I'm not the only person that has thought about a Node-like system built on JSC rather than V8. I wonder if you looked at the source for both V8 and JSC, and then concluded JSC would be much nicer to work with? That's what I did initially.
I wish I had time to pitch in right now...
srijs|12 years ago
The thing that got me into hacking the prototype was the release of JSC as a public system framework on iOS7, eliminating the need to separately bundle JSC. So its not really a platform preference, I'm just trying to work with what's currently there...
erichocean|12 years ago
Please reconsider this. Libuv rocks, and without it, well, you don't really have Node. It's not dependent on v8 in any way, so it makes little sense to not use it.
srijs|12 years ago
My initial plan was to provide the node features using Foundation.framework features only. Now, this could turn out to be more boilerplate code than I intended to write and if it does, I'm now pretty sure I'd go with libuv.
I'm not quite sure about using libuv from the start, though. My consideration was that a) this is not targeted at server applications, so you don't necessarily need very high performance and b) libuv is a cross-platform library, while I'm targeting darwin only, so it might be a bit overkill.
Do you have experience with libuv? If so, do you have experience regarding footprint / conciseness? Can you confirm/deny my presumptions?
srijs|12 years ago
Tell me what you think! :)
SchizoDuckie|12 years ago
zekenie|12 years ago
srijs|12 years ago
The new thing on iOS 7 is that this framework is exposed as a public API you can code against. So you don't have to initialize a heavy-weight WebView just to execute Javascript.
zw|12 years ago
outside1234|12 years ago
srijs|12 years ago