Erlang Thursday – c:xm/1

今天的Erlang Thursday我们换一个方向,我们来看看 c 模块的 c:xm/1.

c:xm/1 有一个入参,这个入参是表示一个模块名字的原子,或者这个入参是表示一个文件名单字符串,该函数检查模块没有使用和没有定义的函数以及废弃的函数。

首先让我们检查一下erlang模块,看看它是否有废弃的函数。

1
2
c:xm(erlang).
% [{deprecated,[]},{undefined,[]},{unused,[]}]

结果是没有调用废弃的函数,没有未定义的函数,也没有未被使用的函数在erlang模块里。注:上述结果我是在Erlang 17.3.4 下得到的,根据你使用不同的erlang版本,你可能得到不一样的结果,因为 erlang:now/0 在18.0版本里已经是废弃的函数。(译者注:这句话有点费解,官网对 c:xm/1 对解析是:This function finds undefined functions, unused functions, and calls to deprecated functions in a module by calling xref:m/1. )

为了找到符合这样标准的现存模块,我查看 Erlang 17.0 的 README 来搜索 deprecated 这个词。 找到如下这句:

pg 模块已经废弃,它将在Erlang/OTP 18中被删除。

那么让我们把这个模块名传给 c:xm/1 看看有什么结果。

1
2
3
4
5
c:xm(pg).
% [{deprecated,[{{pg,create,1},{pg,master,1}},
% {{pg,create,2},{pg,master,1}}]},
% {undefined,[]},
% {unused,[]}]

我们可以看到我们得到了pg模块里有关废弃的函数信息。

虽然你在日常工作中需要使用这个函数的几率很低,因为erlang相关的工具通常都非常注意这些方面,这足够引起人们的好奇,看起来调用这个函数似乎很值得,尤其如果那个时间Erlang代码的编译是Erlang内部完成的。

原文链接: https://www.proctor-it.com/erlang-thursday-c-xm-1/