Archive

Archive for June, 2013

[Howto] 修订github仓库中的提交信息

June 22nd, 2013 No comments

如果提交(commit)了代码并且已经推送(push)到了github之后,发现自己的作者名字(Author)需要修改,怎么办?用这个命令试试:

如果在你第一次错误的 push 之后,没有人 pull 过那个仓库,那么你的修改就完成了。如果已经被人 pull 过了你的改动,就不太可能改过来了(“The already pushed change, if people have pulled it, is something you’ll have to live with. [1]”)。

有此需求的同学可以参考[1]、[2]和[3],希望对你有帮助。 😉

[1]: stackoverflow: amend-username-for-a-pushed-commit-on-github

[2]: stackoverflow: github-doesnt-show-the-right-author-of-a-commit

[3]: github help: can-i-delete-a-commit-message

Baseline Compiler in V8

June 21st, 2013 1 comment

http://wingolog.org/archives/2013/04/18/inside-full-codegen-v8s-baseline-compiler

这个链接介绍了 Google V8 的 baseline JIT 引擎结构, 并对比了 Webkit/JSC 和 Firefox/SpiderMonkey 中对应的实现.

[SpiderMonkey] 基于 Compartment 的内存管理

June 17th, 2013 No comments

Firefox 浏览器内部的内存管理是基于”Compartment”的.

提出这个概念的背景, 是 Firefox 既是一个单进程多线程的架构, 又支持多 Tab 页面浏览. 这就导致了不同的网页的内容出现在同一个虚拟地址空间中. Firefox 3.5 之前的内存组织方式是一视同仁的散布在堆中. 这样如果 Firefox 有内存方面的漏洞, 导致恶意页面可以访问到敏感页面(例如银行支付页面)的内存信息, 就悲剧了. 性能上使得页面浏览的时候无法利用缓存访问的局部性, Cache Miss 高一点点对于软件的速度影响是很可观的(1).

于是 Mozilla 把单个进程的堆, 以网页为单位分成了子堆, 在浏览器的内部实现了一套隔离和通信机制. 你可以认为 Mozilla 把操作系统对于进程所做的工作, 在线程的层次上做了一层实现. 具体的实现原理和示意图可以参考文后的相关文献.

相关文献:

[1]: Andreas Gal 的博客

[2]: MDN上的介绍

[3]: 论文: Compartmental memory management in a modern web browser. 里面的配图很好, 看起来很直观. ACM链接. PDF下载的地址

 

尾注:

(1) 这里有一个研究问题: 在单核的架构中, 编译器优化的主要目标之一就是减少 CPU Cache Miss, 但是在多核中, CPU Cache 还是编译器优化的主要目标么? 我并不知道答案.

从头写一个JIT?从这篇文章开始吧 :-)

June 15th, 2013 No comments

http://blog.reverberate.org/2012/12/hello-jit-world-joy-of-simple-jits.html

JIT非常的复杂——我学了好多年都没有学会 🙂 ——但是如果你想象一下最简单的JIT是什么样子, 那么它其实就是一个printf语句而已. 根据一些输入, 打印一些二进制的字符串到内存, 恰好这个内存是可执行的, 事就这样成了. 作为Demo, 作者在这篇文章中为 Brainf_ck 这种异类的语言实现了一个简单的JIT.

谁在为SpiderMonkey提交代码

June 13th, 2013 No comments

Ehsan Akhgari 在自己的一篇博客[1]中介绍了如何通过 git 的 log 日志统计得到了各个开发人员的提交统计. 并给出了Mozilla SpiderMonkey 引擎开发人员2012年上半年的提交统计, 这是一部分结果:

Ehsan 在博客中同时提供了生成数据的(一行)命令脚本, 并对各个参数进行了详细的解释. 只要是 git 仓库就可以使用这种脚本进行统计(需要改一下起始时间和结束时间). 如果你有兴趣, 可以看看自己的仓库中谁最努力. 🙂

[1]: Data about people’s contribution to the Mozilla code base