4

我正在尝试更多地了解 Dart,所以我想阅读 dart 的来源。dart vm 是用 c++ 编写的,代码库非常庞大。

我从https://github.com/dart-lang/bleeding_edge获得源代码

以下只是runtime包内的代码,你可以看到它有超过 180K 行的 c++ 代码。

➜  runtime git:(master) ✗ cloc .
     752 text files.
     746 unique files.
      47 files ignored.

http://cloc.sourceforge.net v 1.58  T=6.0 s (117.7 files/s, 52169.5 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C++                            375          32722          21436         180070
C/C++ Header                   238          10936           8753          36452
Dart                            76           2785           1340          16661
Python                          13            254            211           1113
C                                2             28             28            107
Bourne Shell                     1             16             11             85
Assembly                         1              1              3              5
-------------------------------------------------------------------------------
SUM:                           706          46742          31782         234493
-------------------------------------------------------------------------------

学dart一个月,也有几年Java开发经验,但是不懂c++。有人可以给我一些关于学习 dart vm 的建议吗?我有一个学习 dart vm 的长期计划。

我的问题是,要学dart vm,什么样的知识比较重要,那我还是花点时间学吧:

  1. 是不是需要精通c++才能真正读懂dart vm的源码?
  2. 我需要阅读一些有关 VM 设计的书籍吗?如果有的话?
  3. 我应该阅读有关 Dart VM 的任何文档、书籍或博客吗?
  4. 和任何其他建议
4

2 回答 2

4

这是我的看法。仅仅通过阅读源代码来学习源代码的结构和功能是困难的,并且需要时间。如果有一些设计文件来指导你,那会更容易,但仍然很难。

最好(根据我的经验......所以也许这不是一个好的 stackoverflow 问题)将你的精力集中在使用 VM 做一些事情上。选择一个特定的错误或增强功能并尝试实施它。通过实际尝试维护代码而不是仅仅阅读它,您将学到更多。

我提到“以我的经验”。和你一样,我主要是 Java / C# 开发人员,并且 15 年没有真正研究过 C++。

在 Dart VM 的早期,有一个错误阻止我做一些特定的事情(我现在不记得是什么了)。我有一个堆栈跟踪来指出我正确的方向,并通过阅读代码并尝试一些事情(使用谷歌检查我不确定的特定语法)。我能够修改虚拟机并解决我眼前的问题(无论如何,该错误在后来的提交中被其他人重构)。这里的重点是,有一个可以坚持学习的目标是件好事。

为了完整起见,回答您问题的“我应该阅读的任何内容”部分:

几年前, 我还写了一篇关于设置 Dart 构建环境的博客。提示: 如果您是 Windows 用户,请使用 Ubuntu 虚拟机 - 这将节省数小时。

Google I/O 2013 上的“ Fast Code is Always in Fashion ”视频是一个很好的观看 - 它让 Dart VM 的主要设计者谈论 VM。它可能会给你一些概述。

最后,Dart 语言规范值得一读,因为 Dart VM 是规范的实现。

于 2013-08-13T14:26:22.540 回答
1

我想说一种与 dart vm 亲密接触的实用方法(除了阅读源代码之外)是编写简单的扩展并使用调试器来遍历 vm。这类任务将帮助您了解 dartvm 如何引导、加载库、解析 dart 代码、查找函数、创建隔离等……我还发现阅读 V8 源代码可以很好地参考 dart vm 的布局,它在代码结构和风格上有一些相似之处。对于一些 vm 工程师来说,一份有影响力的 vm 相关书籍的清单将是一个很好的问题,如果你确实得到了一份清单,请重新发布。

于 2013-08-14T16:30:18.150 回答