我有兴趣深入研究Erlang的C source code并尝试了解幕后发生的事情。我在哪里可以找到有关代码设计和结构的信息?
答案 0 :(得分:16)
首先,您可能希望了解Joe Armstrong's thesis,从高层次介绍Erlang。了解该语言背后的想法将是有用的。然后,您可以专注于Erlang运行时系统( erts )。 erlang.erl 模块可能是一个好的开始。然后,我将专注于构成所谓的最小版本,内核和 stdlib 的应用程序。在stdlib中,查看行为的实现方式。我可以建议 gen_server.erl 模块作为开始吗?
答案 1 :(得分:9)
答案 2 :(得分:2)
简短的回答是,没有好的指南。并且代码没有很好的记录。
我建议在附近找一个能够比较熟悉代码的人,然后给他们买晚餐以换取一些聊天。
如果你没有可能这样做,那么我建议从装载机开始。
./erts/emulator/beam/beam_load.c
通过漂亮打印光束表示也可以找到一些有用的信息。我不知道OTP是否有任何方法可以提供,但HiPE项目有一些作弊。
hipe:c(MODULE, [pp_beam]).
应该让你开始。
(我也推荐Joe的书。)
答案 3 :(得分:2)
漂亮的光束打印机可以通过'erlc -S'完成,这相当于丹尼尔提到的hipe:c(M,[pp_beam])。
我还使用erts_debug:df(Module).
来反汇编加载的梁代码,这些代码实际上是由VM解释的。
有时我使用调试器。 OTP提供了非常好的支持gdb的工具。请参阅http://www.erlang.org/pipermail/erlang-questions/2008-September/037793.html
上的示例用法答案 4 :(得分:0)
在这里参加聚会有点晚。如果您只是从GitHub下载源代码,则内部文档确实很棒。您必须使用make
生成其中的一些。
构建文档,大部分相关资源位于/erts
(Erlang运行时系统)下