Chinaunix首页 | 论坛 | 博客
  • 博客访问: 471954
  • 博文数量: 142
  • 博客积分: 4126
  • 博客等级: 上校
  • 技术积分: 1545
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-22 10:03
文章分类

全部博文(142)

文章存档

2011年(8)

2010年(7)

2009年(64)

2008年(63)

我的朋友

分类:

2009-03-16 10:01:46

  1月份接了一javascript引擎移植的活,虽然没有最后做完,但是在其中也收获了不少东西,现在该写点东西总结一下了:
  大概内容就是给一款web浏览器(小日本的)做个“心脏搭桥手术”,把它现在用的js引擎(自主研发的),换成firefox的tracemonkey.
  原先引擎封装的可真叫一个烂,源代码看了一个月才彻底搞明白。然后开始“做手术”,tracemonkey的资料较少,就先用spidermonkey做试验。因为spidermonkey的调用方式有两种,一种是XPconnect,另外一种是使用jsapi。firefox使用的是前一种方式,我猜想这样的效率可能更高,但是用在自己的程序中的复杂性可能会更高,所以我还是使用了第二种方式,使用jsapi给完成runtime context的建立和销毁后,就尝试把window对象作为引擎的全局对象,并把它的属性和方法添加到新建的context中。再然后就是把dom对象和一些这个浏览器需要的其他对象添加进来。然后再模拟一些其他的函数,比如引擎暂停和恢复运行的功能等等。这个工作就可以大体上做完了。
  可惜移植工作做到一半的时候(差不多window对象加入完了),小日本变卦不想做了(可能是经济危机的原因吧),所以也只好提前停工了。可惜是可惜了一点,但是这中间收获的经验和信心却是非常宝贵:
  1) 我看过的源代码不少,但基本上都有比较清楚注释,但这回的代码一条有用的注释都没有,有几条日文的注释翻译过来也不像人话了。这确实加大了读代码的难度,可还是坚持着读下来了。以后再遇到多么复杂的代码我多有信心去读了
  2) 我一直认为自己对于脚本语言(包括:perl,javascript等等)还算有点研究。起码日常的应用没问题,别人写的脚本一般也能看懂。可在研究完这个js引擎后才惊讶的发现,自己以前对脚本语言的认识真的只停留在应用的层次上。对于一些重要的概念并没有彻底的搞明白(比如: 闭包,作用域链,原型链等等)。我现在才真正明白:要想彻底搞懂一门语言,看它的编译器(解释器)绝对是必要的。
  3) 这个引擎是用纯c语言写的。它当中的有些算法确实非常的精妙,而且作者对于数据结构的应用也恰到好处,做到了使用最少的资源,来达到最高的效率。所以这段时间发现自己的c语言功底又加深了不少。
 
  总之: 虽然项目并没有真正做完并交付使用,但是实施的过程却是积极并富有成效的。呵呵。
 
  这段时间真的够累, 还是先修整一下,然后再考虑下一步的学习计划。前两天我去驾校报了名,修整阶段去学一学车也不错,毕竟早晚要学的。
阅读(1189) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-03-24 13:59:42

灰太郎好! 我现在也在接手一个js引擎移植的活儿,很巧的是也是将鬼子的一个WEB浏览器中自主开发的js引擎替换成TraceMonkey。刚开始没多久,还在调查阶段。看了你上面的介绍,简直以为咱们干的是同一个活儿。前辈呀~~ BT的是,鬼子让出的TraceMonkey的调查报告,要求涵盖JIT的特性,包括到具体什么情况下开始编译JS,编译过的代码的寿命多长,JIT的优缺点等等。JIT这方面的东西网上的资料是在很少,前辈有啥好资料或者心得么,拜托指点一下吧,多谢多谢......