Spidermonkey学习笔记

Spidermonkey build and test

 

1.how to build.

去哪下?如果你不是高手,还是去下载发行版吧:

       http://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz

tar xzf js- 1.7.0 .tar.gz

       如果你是个高手,可以去下载cvs版本,这里不讨论。

       生成:

       cd mozilla/js/src

make -f Makefile.ref

       默认是debug版本,如果要优化版本,添加BUILD_OPT=1make命令行。

       linux下,编译后,在Linux_All_DBG.OBJ文件夹下生成了js可执行程序,进入,./js就可以看到js shell的提示符了。

 

2.use the shell.

       内容不少,shell能方便我们测试javascript的功能,敲入help();可以得到一个命令简介列表。细节就不介绍了,参见:

       http://developer.mozilla.org/en/docs/Introduction_to_the_JavaScript_shell

       不过得强调一下,如果你想研究脚本解释引擎的内部工作的话,在阅读代码前,不妨先使用shell看看。尤其是dis([function])dissrc([function])这些函数(这些函数只能在调试版本中使用)。这可以得到反汇编字节码内容哦,可以一窥内部的执行原理。

       比如:

function test() {

var i = 3;

print(i+2);

}

       shell中运行dis(test);得到:

main:

00000:  uint16 3

00003:  setvar 0

00006:  pop

00007:  name "print"

00010:  pushobj

00011:  getvar 0

00014:  uint16 2

00017:  add

00018:  call 1

00021:  pop

00022:  stop

 

Source notes:

  0:     0 [0] newline

  1:     3 [3] decl     offset 0

  2:     7 [ 4] newline

  3:    18 [11] xdelta 

  4:    18 [ 0] pcbase   offset 11

       多试一下!

       又比如:

function doStuff(input) {

       print("Enter a number: ");

       var n1 = readline();

       print("Enter another one: ");

       var n2 = readline();

       print("You entered " + n1 + " and " + n2 + "/n");

}

调用dissrc(doStuff);得到:

;-------------------------  10:         print("Enter a number: ");

00000:  10  name "print"

00003:  10  pushobj

00004:  10  string "Enter a number: "

00007:  10  call 1

00010:  10  pop

;-------------------------  11:         var n1 = readline();

00011:  11  name "readline"

00014:  11  pushobj

00015:  11  call 0

00018:  11  setvar 0

00021:  11  pop

;-------------------------  12:         print("Enter another one: ");

00022:  12  name "print"

00025:  12  pushobj

00026:  12  string "Enter another one: "

00029:  12  call 1

00032:  12  pop

;-------------------------  13:         var n2 = readline();

00033:  13  name "readline"

00036:  13  pushobj

00037:  13  call 0

00040:  13  setvar 1

00043:  13  pop

;-------------------------  14:

;-------------------------  15:         print("You entered " + n1 + " and " + n2 + "/n");

00044:  15  name "print"

00047:  15  pushobj

00048:  15  string "You entered "

00051:  15  getvar 0

00054:  15  add

00055:  15  string " and "

00058:  15  add

00059:  15  getvar 1

00062:  15  add

00063:  15  string "//n"

00066:  15  add

00067:  15  call 1

00070:  15  pop

00071:  15  stop

       此外,还有一些函数也很有用。参见help();

 

3. JSAPI User Guide.

       有点累,留作下一次吧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值