新手应该如何读Google V8引擎源代码?

一直在学习C++,也想阅读点开源的C++项目,发现网上对Google V8评价不错,于是上Github上找到了源代码,发现有很多branched和tags,不知道都表示啥。想好好看看源代码,求知乎大神们给个建议! 附上引擎github地址 : github.com/v8/v8
关注者
575
被浏览
20217
题主只是想学习C++,并不是对JavaScript引擎的实现本身感兴趣对不对?
如果是的话,请不要从V8开始学习。这不是适合新手阅读的东西。特别是新的版本简直复杂,没足够知识储备看了也是白看。

硬要看的话,请从非常早期的版本开始看。这是0.1.5的tag:Release 0.1.5: Made the prototype property of functions enumerable. · v8/v8 · GitHub
要浏览文件的话,在这里:v8/v8 at 3a1ab8c626dfee28a5cafb6632b28e284c4cffb3 · GitHub
此时的V8还相对简单一些,但已经包含许多在当时的JavaScript引擎看来非常先进的做法了,例如tagged pointer。而V8实现tagged pointer用的是很奇妙的C++奇技淫巧,真的不太适合新手用来上手…题主看下面这个函数能看懂不?
v8/objects-inl.h at 3a1ab8c626dfee28a5cafb6632b28e284c4cffb3 · v8/v8 · GitHub
bool Object::IsSmi() {
  return HAS_SMI_TAG(this);
} 
HAS_SMI_TAG宏的定义在:v8/globals.h at 3a1ab8c626dfee28a5cafb6632b28e284c4cffb3 · v8/v8 · GitHub
#define HAS_SMI_TAG(value) \
  ((reinterpret_cast<int>(value) & kSmiTagMask) == kSmiTag)
如何?

网上有不少介绍V8的特性的文章其实写的都是初期的V8,配合它们读初期的V8代码倒是不错。如果真要读的话,有啥具体问题欢迎在知乎提问讨论 ^_^
我这儿有个老帖,或许能对题主有用:[链接帖] 各JavaScript引擎的简介,及相关资料/博客收集帖