3

我们希望static code analyser为 Elixir 开发一个以检测并发问题(主要是死锁和竞争条件)。我们对分析器的结构有一些基本的想法,但我们的问题是哪种 AST 更适合这项任务。正如我们所了解的,Elixir 编译过程创建了 Expanded Elixir AST、Abstract Erlang Format 和 Core Erlang。

我的问题是扩展 Elixir AST 或 Core Erlang 是否更适合创建调用图和控制流图。如果我们使用 Core Erlang,是否有可能从 Core Erlang 向后工作,以在 Elixir 代码中找到分析器识别的问题的源代码?

如果有人对此有所了解,我们将非常感谢您的帮助。:)

4

1 回答 1

1

如果目的是教育,我可能会选择 erlang。将 erlang 编译为 Beam 可能会更简单一些(如果不是更多的话),并且随着您开发工具,您可能会发现更多关于 erlang AST 的资源/文档。它比大多数人所做的要低,您会在 erlang 社区中找到更多答案(几年后可能不会是真的)。总的来说,你的工具在 erlang 中会更简单,移动部件更少。

我还发现了那个项目:https ://github.com/rrrene/credo

更具体地说,我认为让你回到长生不老药代码实际上是很困难的。从您的角度来看,在实现了您的工具之后,这将是有意义的。但对于普通的 elixir 开发人员来说,情况可能并非如此。长生不老药越成熟,它就越倾向于偏离核心的 erlang 概念。它在 erlang 之上构建了许多功能,以至于您可以构建整个 Web 应用程序,而无需了解一点 erlang。可能不是最好的方法,但它可能告诉你两种语言之间的差距有多大。

于 2020-05-24T03:38:48.047 回答