7 Erlang 工具
7.1 是否有 Erlang 的漂亮打印机?
如果您使用 emacs 模式(它随开源版本一起提供,在 lib/emacs/erlang.el 中),您还可以通过从 emacs 打印来获得漂亮打印机。
7.2 是否有用于 CI 的 erlang 格式化程序?
vim-erlang-runtime 可以做到这一点。
7.3 LEEX(erlang 词法分析器)的源代码在哪里?
Erlang 的库为 YACC 提供了一个名为 YECC 的 Erlang 等效项,并为 LEX 提供了一个名为 LEEX 的等效项。 Robert Virding 维护一个单独的 LEEX 应用程序,该应用程序可通过 Git 在 GitHub 上获得。
7.4 是否有专门用于 Erlang 的图表工具?
没有。大多数人使用通用图表工具。
有些人认为 SDL 是用图表表达电信问题的自然方式,而 Maurice Castro 在 1999 年的 Erlang 用户会议上展示了一些关于 替代表示法的有趣工作。
基于 UML 的工具在 Erlang 世界中从未流行起来。 这是来自 邮件列表存档 的一篇文章,讨论了其中一些原因。
7.5 Erlang/OTP 中和存在哪些代码测试工具和套件?
测试套件对于确保对系统的“改进”没有破坏某些东西特别有用。 Erlang 的 测试系统 可用于测试您的项目,它包括 Erlang 模拟器和 Erlang stdlib 的测试套件。
标准 Erlang/OTP 安装包括 cover,一种测试覆盖率工具。
QuickCheck 是一种商业工具,用于从 Erlang 本身编写的属性自动生成随机测试用例。 当检测到失败的测试用例时,此测试用例会自动减少到最小的失败用例,以简化故障分析。
有几种开源工具要么受到 QuickCheck 的启发,要么基于与 QuickCheck 类似的想法,包括 Proper 和 Triq。
7.6 是否有办法对 Erlang 实现进行基准测试?
Bjorn 的基准测试是 免费提供的。 较旧的 ESTONE 基准测试几乎完全消失了。
7.7 有人有 Erlang 的魔术文件吗?
魔术文件在 unix 系统上与名为“file”的工具一起使用,以识别文件。 以下是对 /etc/magic 的补充,它允许“file”识别 BEAM 和 JAM 文件。
7.8 我应该使用哪个 IDE 进行 Erlang 开发?
您喜欢哪个就用哪个; Erlang 可以与任何处理纯文本文件的 IDE/编辑器一起使用。
Eclipse:有一个 Erlang 的 Eclipse 插件。
Emacs:Erlang 发行版包含一个 Erlang 模式(在 lib/emacs/erlang.el 中)。
VIM:VIM 包括一个 Erlang 插件。 GitHub 上提供了更高级的 erlang VIM 插件。 vimerl 也可通过 vundle 获得,在您的 vimrc 中指定 Bundle 'jimenezrick/vimerl' 并执行 BundleInstall。
Ultraedit:Danie Schutte 提供了一个 wordfile,它提供语法突出显示。
BBEdit:一个 BBEdit 模块
Textmate:一个 Textmate 捆绑包
IntelliJ IDEA:一个 Erlang 插件
7.9 是否有 Erlang 编码指南?
是的。 它们可以在 这里 找到
7.10 有哪些用于 Erlang 的重构工具
有几种第三方工具可以帮助进行代码重构。 它们还可以用于其他一系列目的。
语法工具 可以执行正确的源到源转换。 除此之外,它们还可以用于修改旧代码,使其不再使用已弃用的函数。语法工具应用程序 是 Erlang 的标准组成部分。
Distel/EMACS 支持重构和交互式调试。 主页 上有更多信息。
7.11 有哪些静态代码分析工具?
有一些工具可以检测 Erlang 代码中各种类型的潜在编程错误。
XREF 查找一组模块中所有未定义的模块调用,即它可以捕获因键入错误模块或函数名称等导致的错误。
Erlang 编译器 具有多个内置选项,可帮助检测问题。 其中大多数(例如,报告未使用的变量、未使用的函数和某些类型的死代码)默认情况下都是启用的。
Dialyzer 是一种专门的静态代码分析工具,用于检查 .beam 对象文件。 除此之外,它还会进行全局分析并报告死代码和某些类型的类型错误。 强烈推荐。
7.12 是否有用于 BEAM 文件的“反编译器”?
或者:我丢失/删除/不管什么原因删除了项目的 .erl 文件,我可以从 .beam 文件中重新创建它吗?
如果 代码使用 debug_info 标志编译,则 .beam 文件包含源的“部分编译”表示形式,基本上是解析树。
这是一个简单的模块
-module(hw). -export([go/0]). go() when true -> "this is my function".
以及相应的抽象代码
3> {ok, {hw, [{abstract_code, Abs}]}} = beam_lib:chunks("hw.beam", [abstract_code]), Abs. {raw_abstract_v1,[{attribute,1,file,{"./hw.erl",1}}, {attribute,1,module,hw}, {attribute,2,export,[{go,0}]}, {function,4, go, 0, [{clause,4, [], [], [{string,5,"this is my function"}]}]}, {eof,6}]}
编写一个可以将上述示例转换回源代码的反编译器只需 15 分钟。 编写一个可以处理更复杂的 Erlang 代码的反编译器需要更多时间,但难度不大。 syntax_tools 应用程序可以完成大部分繁重的工作。
如果抽象代码不存在于 beam 文件中,则问题会变得更加困难。 可以研究剩余的信息并得出一些关于原始 .erl 文件可能的样子结论,例如导出了哪些函数。 但是,很多其他重要的信息,例如变量名,都不存在。 一般来说,在没有抽象代码的情况下从 beam 文件重新创建源代码是不切实际的。