【发布时间】:2011-04-14 21:44:48
【问题描述】:
我有兴趣深入研究 Erlang 的 C source code 并尝试了解幕后发生的事情。我在哪里可以找到有关代码设计和结构的信息?
【问题讨论】:
标签: c erlang code-structure
我有兴趣深入研究 Erlang 的 C source code 并尝试了解幕后发生的事情。我在哪里可以找到有关代码设计和结构的信息?
【问题讨论】:
标签: c erlang code-structure
这里的聚会有点晚了。如果你只是从GitHub 下载源代码,内部文档真的很好。您必须使用make 生成其中的一些。
获取构建的文档,大部分相关来源都在/erts(Erlang Run Time System)下
编辑:BEAM Wisdoms 也是一个非常好的指南,但它可能是也可能不是你所追求的。
【讨论】:
梁的漂亮打印机可以通过'erlc -S'完成,相当于Daniel提到的hipe:c(M, [pp_beam])。
我还使用erts_debug:df(Module).来反汇编加载的beam代码,这些代码实际上是由VM解释的指令。
有时我会使用调试器。 OTP 提供了很好地支持 gdb 的工具。查看http://www.erlang.org/pipermail/erlang-questions/2008-September/037793.html的示例用法
【讨论】:
简短的回答是没有好的指南。而且代码没有很好的记录。
我建议在你附近找一个相当了解代码的人,然后请他们吃饭以换取闲聊。
如果您无法做到这一点,那么我建议从加载程序开始。
./erts/emulator/beam/beam_load.c
通过漂亮地打印光束表示也可以找到一些有用的信息。不知道OTP有没有办法这样做,但是HiPE项目有一些秘籍。
hipe:c(MODULE, [pp_beam]).
应该让你开始。
(我也推荐乔的书。)
【讨论】:
首先,您可能想看看Joe Armstrong's thesis,从高层次介绍Erlang。了解语言背后的想法是有用的。然后,您可以专注于 Erlang 运行时系统 (erts)。 erlang.erl 模块可能是一个好的开始。然后,我将重点介绍构成所谓最小版本、内核和stdlib的应用程序。在标准库中,查看如何实现行为。我可以建议 gen_server.erl 模块作为开始吗?
【讨论】:
【讨论】: