所有的erlang书籍似乎都说export_all是不好的做法,但没有给出理由.最后,大多数模块将大部分时间花在compile(export_all)上,因为不断更新模块列表以删除辅助函数是一件麻烦事.这是不好的做法,因为我应该关心我向其他开发者公开的功能?或者这是不好的做法,因为模块所具有的功能数量会有某种性能成本,因为可能会出现热代码加载等问题.如果填充具有大量功能的模块会影响性能,那么它有多糟糕?
Ada*_*erg 23
有几个原因:
清晰度:更容易看出哪些功能是在模块外部使用的.
当您在Erlang shell中完成选项卡时,您将获得仅列出导出函数的列表,而不会列出其他函数.当您重构模块时,您知道哪些功能可以在没有外部用户的情况下安全地重命名,具体取决于它们.
代码气味:您会收到有关未使用功能的警告.
因此,您将避免死代码.
优化:编译器可能能够进行更积极的优化,因为并非所有函数都必须导出.
ala*_*rik 10
虽然我不确定使用是否有任何实际的性能影响-compile(export_all).
,但我怀疑它们是否足够重要.
但是,明确声明出口清单会带来好处.通过这样做,每个人都可以通过查看.erl
文件的第一页来找出模块的界面.此外,与我们倾向于记下的许多其他内容一样,模块接口的显式声明有助于保持其清晰度.
随着中说,当我开始一个新的Erlang模块上工作,我总是输入-module(...). -compile(export_all).
界面变得足够成熟,我想补充一个明确后-export([...])
,同时保持了export_all
编译选项.