org-protocol
org-protocol是一个外部程序调用emacsclient的协议,目前提供的三个应用全部为浏览器设计,实现了与正在浏览的网页的URL相关的一些功能。其中的org-protocol-remember实现了部分Evernote Web Clipper的功能,只不过只能保存文字,无法保存图片。
把开源进行到底!
org-protocol是一个外部程序调用emacsclient的协议,目前提供的三个应用全部为浏览器设计,实现了与正在浏览的网页的URL相关的一些功能。其中的org-protocol-remember实现了部分Evernote Web Clipper的功能,只不过只能保存文字,无法保存图片。
GCC使用Subversion管理源代码,如果想做一个镜像的话,git svn是一个方法。然而GCC这么古老的项目,svn版本号已经是15万级别,做一次完整的镜像可能对服务器的负载造成一定影响,友善一点的方法就是一次只拿一小部分版本信息,然后等待一段时间,再继续下去。还有就是只取trunk的代码,忽略branch和tag。下面的bash脚本每次取5000个版本,然后休息50分钟。克隆完成之后别忘了再rebase一下,因为workspace里面的内容只是第一次fetch的结果。
#!/bin/bash
set -o verbose
SVN_HEAD_REV=$1
if [ $SVN_HEAD_REV -le 5000 ]
then
echo "svn revision number must be at lease 5001."
exit 1
fi
git svn init http://gcc.gnu.org/svn/gcc -T trunk
for ((i=5000; i < $SVN_HEAD_REV; i+=5000))
do
echo "git svn fetch -r $(( $i-4999 )):$i"
git svn fetch -r $(( $i-4999 )):$i || exit 2
sleep 50m
done
if [ $(( $i-4999 )) -lt $SVN_HEAD_REV ]
then
echo "git svn fetch -r $(( $i-4999 )):$SVN_HEAD_REV"
git svn fetch -r $(( $i-4999 )):$SVN_HEAD_REV
fi
第一次阅读v8的代码,由于文档缺乏,读起来很累,快速浏览了几个文件,仍然没有什么概念。后来更改了阅读习惯,很快就对垃圾收集一块有了初步的了解。
首先学习了相应的理论,庆幸自己多年前买了《垃圾收集》一书,并一直压箱底,这回终于派上用场,认真学习了mark compacting和Cheney's algorithm(切尼算法——经典节点复制算法),没有这一块的学习,想光凭阅读代码来理解实现对我来说几乎是不可能的。
然后就是改变阅读代码习惯。以前就是逐行扫描过来;现在则记录下不懂的地方,然后在告一段落之后再去学习。在Emacs的帮助下,这一行为容易到极点,只需创建一个orgmode任务并链接到相应代码行即可,整个过程只需要几秒钟。在解决了三四个这样的任务之后,开始对v8的垃圾收集实现有了一点概念。