只是想知道是否有人尝试嵌入并实际将任何js引擎集成到.net环境中.我可以找到并实际使用(经过很多痛苦和努力,因为它已经过时而且还没完成)spidermonkey-dotnet项目.有这方面经验的人吗?发动机如SquirrelFish,V8 ..
并不是说我对Mozilla的Spidermonkey不满意(将它用于核心ASP.NET应用程序中的自定义组件的Rails式miniframework),但我仍然喜欢进一步探索这些选项.命令行解决方案不是我需要的,我不能依赖CLR以外的任何东西,我需要从/到JavaScript/C#对象调用方法.
// c# class
public class A
{
public string Hello(string msg)
{
return msg + " whatewer";
}
}
// js snippet
var a = new A();
console.log(a.Hello('Call me')); // i have a console.log implemented, don't worry, it's not a client-side code :)
Run Code Online (Sandbox Code Playgroud)
只是为了澄清 - 我不是试图在服务器端javascript中实际编写应用程序本身.它仅用于编写自定义用户子应用程序(可以看作是某种DSL).允许普通人在js中编程比C#更容易(也更安全).
我现在对JavaScript引擎感到困惑.我知道V8是一个大问题,因为它将JavaScript编译为本机代码.
然后我开始阅读Mozilla SpiderMonkey,据我所知,它是用C语言编写的,可以编译JavaScript.那么这与V8有什么不同呢?如果这是真的,为什么Firefox不这样做呢?
最后,Rhino是否真的将JavaScript编译为Java字节代码,以便您获得Java的所有速度优势?如果没有,为什么人们在桌面上编写脚本时不能运行V8?
我目前正在使用spidermonkey来运行我的JavaScript代码.我想知道是否有一个从控制台获取输入的函数,类似于Python的工作方式:
var = raw_input()
Run Code Online (Sandbox Code Playgroud)
或者在C++中:
std::cin >> var;
Run Code Online (Sandbox Code Playgroud)
我环顾四周,到目前为止我发现的是如何使用prompt()和confirm()函数从浏览器获取输入.
是否可以找到JavaScript变量的内存地址?JavaScript代码是普通应用程序的一部分(嵌入),其中JavaScript用作C++的前端,不能在浏览器上运行.使用的JavaScript实现是SpiderMonkey.
编辑:因为chrome已经更新了浏览器 - 这个问题是多余的,因为他们修复了内部错误,这意味着不再出现此问题.
我有一个固定在画布中心的圆圈动画.
圆越大,运动越不稳定.但不仅如此,对我来说至少在Chrome到Firefox方面要差得多.
数学在这个函数中完成:
function update(deltaTime){
var centerX = canvas.width/2;
var centerY = canvas.height/2;
i.currentAngle = (i.currentAngle || 0) + (deltaTime/1000 * i.rotationSpeed);
if(i.currentAngle>2*Math.PI){
i.currentAngle-=2*Math.PI;
}
i.x = centerX + (i.radius*i.factor) * Math.cos(i.currentAngle);
i.y = centerY + (i.radius*i.factor) * Math.sin(i.currentAngle);
}
Run Code Online (Sandbox Code Playgroud)
这是工作示例中的代码:
Chrome输出:

Firefox输出:

Firefox似乎最接近我的目标,但Chrome只是古怪.
为什么我会得到这样不同的结果?我应该提到我已经问了几个人他们看到了什么,每个人都看到了不同的不准确性.
我处在一个尴尬的境地,
我使用纯JavaScript已经有近3年了,我知道JavaScript是单线程语言,你可以使用setInterval和setTimeout函数来模拟异步执行,
但当我想到他们如何工作时,我无法清楚地理解它.那么这些函数如何影响执行上下文?
我想在特定时间内只运行代码的一部分,然后切换到另一部分.如果是这样,那么很多setInterval或者setTimeout
电话会影响性能吗?
我想知道如何在Javascript引擎(V8,Spidermonkey等)的引擎下实现对象.它们真的只是哈希表吗?如果是这样,他们如何处理碰撞?
我注意到ubuntu 10.04删除了spidermonkey包.犀牛看起来仍然在那里.犀牛和蜘蛛侠之间有什么区别(除了他们写的是什么语言).他们为什么要删除蜘蛛侠?
javascript之间的区别Array,Object并不是很大.实际上它似乎Array主要添加了length字段,因此您可以将Arrays和Objects用作数字数组:
var ar = new Array();
ar[0] = "foo";
ar["bar"] = "foo";
var ob = new Object();
ob[0] = "foo";
ob["bar"] = "foo";
assert(ar[0] == ob[0] == ar["0"] == ob["0"] == ar.bar == ob.bar); // Should be true.
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,在流行的JavaScript引擎(V8,JavaScriptCore,SpiderMonkey等)中,这是如何处理的?显然,我们不希望我们的数组实际存储为具有键值的哈希映射!我们怎样才能合理地确定我们的数据是否存储为实际数组?
据我所知,引擎可以采取一些方法:
Array实现方式与Object- 使用字符串键的关联数组完全相同.Array是一个特殊情况,一个std::vector支持数字键的类似数组,以及一些密度启发式,以防止疯狂的内存使用ar[100000000] = 0;Array是相同的Object,并且所有对象都获得启发式,以查看使用数组是否更有意义.如果有一个合适的阵列类型(咳嗽 WebGL类型阵列咳嗽),这真的会更简单.
我成功编译了spidermonkey(在windows上),我现在如何链接它(嵌入它)?
链接到静态库应该更容易,但我甚至不知道它是哪个文件.我已经mozglue.lib, mozjs-43a1.lib, nspr4.lib, plc4.lib, plds4.lib在dist/sdk/lib和nspr4.lib, plc4.lib, plds4.lib中dist/lib.
更新
js-config因为我有这个问题(-bash: '\r': command not found因为Windows/Unix换行符问题,我跑了dos2unix js-config,我可以运行它),因此无法正常工作.
但是,输出没有帮助(在Windows上):
$ ./js-config --cflags
-std=gnu++0x -include /usr/local/include/mozjs-43a1/js/RequiredDefines.h -I/usr/local/include/mozjs-43a1 -Ic:/Users/Yvain/Documents/mozilla-central/js/src/build_OPT.OBJ/dist/include/nspr
$ ./js-config --libs
${libdir}/${JS_LIBRARY_NAME}.lib c:/Users/Yvain/Documents/mozilla-central/js/src/build_OPT.OBJ/dist/lib/nspr4.lib c:/Users/Yvain/Documents/mozilla-central/js/src/build_OPT.OBJ/dist/lib/plc4.lib c:/Users/Yvain/Documents/mozilla-central/js/src/build_OPT.OBJ/dist/lib/plds4.lib kernel32.lib user32.lib gdi32.lib winmm.lib wsock32.lib advapi32.lib psapi.lib
笔记
我用以下命令编译:
g++ -std=c++11 -I<objdir>/dist/include -L<objdir>/dist/lib helloworld.cpp -o helloworld -lmozjs-31 -lz -lpthread -ldl
Run Code Online (Sandbox Code Playgroud)
我知道这不是编译它的正确方法,因为那些库不在<objdir>/dist/lib.它返回以下错误:
[...]/jscpucfg.h:121:3: erreur:
#error …Run Code Online (Sandbox Code Playgroud) spidermonkey ×10
javascript ×9
v8 ×5
rhino ×2
arrays ×1
browser ×1
c# ×1
c++ ×1
chakra ×1
compilation ×1
console ×1
firefox ×1
input ×1
math ×1
performance ×1
ubuntu-10.04 ×1