探索 Erlang 编程:依赖图、切片技术与领域特定语言重构
1. Erlang 依赖图基础
在 Erlang 编程中,依赖图是进行静态分析和程序切片的重要工具。下面我们先来看一段简单的 Erlang 代码:
-export(f/1).
f(X) -> g(X).
g(1)-> a;
g(X)-> b.
在确定可以与调用进行模式匹配的所有可能子句时,这是一个不可判定的问题。因为调用可能依赖于函数调用的终止,而证明终止性是不可判定的。为了解决这个问题,我们概念上假设存在一个函数 clauses(call) ,它能返回与给定调用匹配的所有子句。在实际实现中,我们使用 Typer 工具,它利用 Dialyzer 的类型推理系统来进行完整的近似。
2. 依赖图的边定义
对于一个图 (N, C) ,我们定义了以下几种边:
- 输入边(I) :它是有向边的集合。对于每个函数调用图调用,我们会将调用中的每个参数子图与属于 clauses(call) 的子句中的每个参数子图进行图匹配。每对匹配的节点之间都有一条输入边,并且从调用的返回节点到子句的 clausein 节点也有一条边。
- 输出边(O) :同样是有向边的集合。对于每个函数调用图调用和属于 clauses(call) 的每个子句,从子句图的每个最终节点到
超级会员免费看
订阅专栏 解锁全文
89

被折叠的 条评论
为什么被折叠?



