为什么 -compile(export_all) 是不好的做法?

2024-02-20

所有的erlang书籍似乎都说export_all是不好的做法,但没有给出理由。最后,大多数模块将大部分时间都花在了compile(export_all)上,因为不断更新模块列表以删除辅助函数是很麻烦的。这是不好的做法吗,因为我应该关心我向其他开发人员公开的功能?或者这是不好的做法,因为模块具有的功能数量会带来某种性能成本,可能是因为热代码加载之类的事情。如果在模块中填充大量函数会对性能造成影响,那么情况有多严重呢?


有几个原因:

  • 清晰度:更容易看出哪些函数打算在模块外部使用。

    当您在 Erlang shell 中按 Tab 键完成时,您将获得仅包含导出函数的列表,而不会获得其他函数的列表。当您重构模块时,您知道可以安全地重命名哪些函数,而无需外部用户依赖它们。

  • 代码味道:您会收到未使用函数的警告。

    因此,您将避免死代码。

  • 优化:编译器可能能够进行更积极的优化,因为知道并非所有函数都必须导出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 -compile(export_all) 是不好的做法? 的相关文章

  • rabbitmq-erlang-client,使用 rebar 友好的 pkg,在开发环境上工作在 rebar 版本上失败

    我成功地将rabbitmq erlang client的rebar友好包用于一个简单的Hello World rebarized和OTP 兼容 应用程序 并且在开发环境中工作正常 我能够启动 erl 控制台并执行我的操作applicatio
  • Erlang 代码的持续集成服务器

    您使用什么类型的敏捷工具进行 Erlang 开发 什么持续集成 http en wikipedia org wiki Continuous integration您使用 CI 服务器来构建 Erlang 代码吗 我得到的唯一参考来自 Quo
  • 构建 Erlang 服务器场(用于业余爱好项目)最便宜的方法是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 假设我们有一个 本质上并行 的问题需要用 Erlang 软件来解决 我们有很多并行进程 每个进程都执行顺序代码 不是数字运算 并且我们向它们投入的 C
  • Erlang 生成问题

    我在 erlang 中遇到了 spawn 问题 似乎进程在一段时间后就死掉了 这是简单的代码 module simple export server 1 client 1 owner 1 spawn n 2 start 1 main 1 s
  • Erlang 17推荐使用地图替换记录,但是如何让mnesia支持地图?

    在 joe 的 Erlang 的重大改变 中http joearms github io 2014 02 01 big changes to erlang html http joearms github io 2014 02 01 big
  • Node.js 或 Erlang

    当谈到它们可以处理的并发级别时 我真的很喜欢这些工具 Erlang OTP 看起来是更稳定的解决方案 但需要更多的学习和深入研究函数式语言范例 看起来 Erlang OTP 在多核 CPU 方面做得更好 如果我错了 请纠正我 但我应该选择哪
  • 我们如何有效地处理 mnesia 记录的时间相关约束?

    我正在将记录写入mnesia 该记录应该保存在那里 仅在允许的时间 24 小时 内 24小时后 在用户修改其中的一部分之前 系统应该自动删除它们 例如 用户获得免费通话时间 用于语音通话 他们应该在给定时间内使用它们 如果他们不使用它 24
  • 在erlang中打印数字的每个数字的问题

    我正在尝试编写一个程序 该程序将读入一个数字 然后将该数字的每个数字输出到列表中 然而 在我尝试使用数字 8 和 9 之前 大多数事情看起来都很好 该程序仅输出 b t反而 如果输入的数字包含8或9 同时还有其他数字 例如283 就可以正常
  • 将 erlang shell 作为守护进程/服务运行

    显然 我有一个在 Erlang shell 中运行的 Erlang 程序 我想监视它 这就是我要的 当机器启动时 Erlang shell 应该随之启动 并且在 shell 中运行的程序也应该随之启动 如果 Erlang shell 由于某
  • Erlang get_tcp:recv数据长度

    I user gen tcp recv Socket 0 用于数据接收 但我只能接收1次1418字节 我怎样才能收到发送的数据量 in gen tcp recv Socket 0 您正在询问内核 给我接收缓冲区中现在可用的所有数据 不过 内
  • Erlang Mnesia 中的分页搜索

    例如 给定记录 record item id time status 我想搜索 1000 到 1100 个项目 按时间和顺序排序status lt lt finished gt gt 有什么建议么 这取决于您的查询是什么样的 如果您需要按许
  • 使用自定义 mysql 模式的模块扩展 ejabberd?

    代替ejabberd sql https github com processone ejabberd blob master sql mysql sql L95 我正在使用自定义 MySQL 架构 由于遗留原因 我将对某些活动执行一些数据
  • 如何限制Erlang VM(BEAM)使用的核心数量?

    我正在具有 2 个四核 Xeon E5520 2 2GHz 24 0GB RAM 和 Erlang R15B02 启用 SMP 的节点上运行实验 我想知道是否可以限制Erlang VM使用的核心数量 以便我可以暂时禁用一些核心并逐步增加数量
  • Erlang 中的接受器池和负载平衡?

    From http www erlang org doc man gen tcp html accept 1 http www erlang org doc man gen tcp html accept 1 值得注意的是 accept 调
  • Erlang 中的变量

    我有一个非常简单的 Erlang 程序 module test export start 0 Code Z00887 start gt io fwrite Code 我有以下两个错误 c erl6 1 dev test erl 4 之前的语
  • 在 Erlang 中实现图灵机

    我有一个小项目 与实现图灵机非常相似 我遇到的基本问题是保存当前配置 例如头部的位置和更多信息 对我来说特别重要的是保留头部位置以使其向前或向后移动 Erlang 解决这个问题的方法是什么 我是 Erlang 新手 但据我探索 OTP ge
  • 无法启动使用 rebar 生成的示例 erlang 版本

    一般来说 我是 rebar 和 erlang 的初学者 我试图根据本教程使用 rebar 创建一个 erlang 版本 http www metabrew com article erlang rebar tutorial generate
  • 如何在 gen_servers 中进行选择性接收?

    我将大部分应用程序移植到 OTP 行为 但我陷入困境 我不知道如何使用 gen server 进行选择性接收 如果没有任何回调函数子句与消息匹配 则不会将消息放回邮箱 而是会出错 现在 无论我走到哪里 人们都称赞选择性接收 无论我走到哪里
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • 获取ERLANG中的最长公共子序列

    我是这个 ERLANG 的新手 我了解基础知识 这就像计划 但范围更广 我知道如何创建一个函数 但在创建一个获取最长公共子序列的函数时遇到问题 lcs str1 str2 是一个接受两个字符串并输出一个整数的函数 lcs algorithm

随机推荐