在Emacs Lisp中,函数名称中的internal是什么意思?

6

有些人使用双横线来表示函数可能会发生变化:Emacs Lisp 中函数名中的双横线 (--) 表示什么意思?

在函数名中包含 internal 是否意味着类似的含义?

两个例子:

where-is-internal
internal-make-var-non-special

函数where-is-internal有详细的文档字符串,并且在手册中也有提到。那么,where-is-internal是否是一个例外?

使用-internal作为后缀和使用internal-作为前缀有什么区别吗?

更让人困惑的是,还有以internal--(双破折号)作为前缀的函数名称。

2个回答

5
混淆不仅在于命名约定(由于历史和可能有时的心血来潮而产生的可变性)。混淆在于自由软件中“内部”这个概念,其中源代码对每个人都是开放的,可以随意使用或修改(甚至分支)。
从Emacs Dev的角度回答你的问题,并以底层意图为基础: “内部”意味着使用此类函数的人可能比非“内部”函数更有可能遇到未来Emacs-Dev实现中该函数的更改和使用。换句话说,您可能不希望指望它保持现状。就是这样。
但是里面有很多“也许”,“更有可能”和“可能”。实际上,一些非“内部”函数的变化比一些“内部”函数更加根本或更快。对于前者,可能会有一个弃用宽限期,在此期间容忍先前的情况,即仍然有效。这可能不适用于某些“内部”内容。但是再次强调,在实践中,“内部”的黑色和非“内部”的白色之间存在一些灰色。
来自Emacs Dev的人(例如@Stefan)可能会以不同的方式表达或更正我的解释。
我个人的看法是:有时候(经常)会有作者不希望用户直接使用的函数和变量,因此自然地认为是“内部”的,但用户仍然会很好地利用它们,甚至“必须”使用它们(除了重写大量代码之外)。某些这样的内容已经取消了其“内部”状态(不,我没有记住示例)。或者有时会添加新的非“内部”函数以使行为可用 - 例如,已添加包装器或函数值参数(同样,我没有现成的示例可提供)。
换句话说,对于Emacs Dev来说,什么应该被视为“内部”并不总是清楚的。只需将标签视为一个指示,您可能不希望过多依赖该函数或变量。
关于各种符号:我的印象是--约定最近似乎被更多使用(尽管也有一些旧代码使用它);使用internal是一个较旧的约定,大多数情况下如此。

我不同意你的开头段落。内部和外部函数之间是否有区别是库接口的一个方面,而它是自由软件还是开源软件则适用于其实现。 - Rörd
  1. 这是Lisp,不是Java或C。
  2. 这是Emacs,一个交互式的、面向用户的程序,旨在由用户积极定制和重新编程。这不是控制核电站的Lisp代码。
  3. 一个人的内部函数对于另一个人可能是可在其他地方调用的有用函数。
  4. 原作者有时并不欣赏他认为只是“内部”或“工作实现”的函数,可以在其他地方发挥作用。
  5. 我们可以同意不同意。
- Drew

5
“internal”和“--”约定类似。基本上,“internal”用于没有前缀可放置双破折号的情况(通常是在C中实现函数的情况)。
是的,正如Drew所解释的那样,“internal”背后的意图只是建议人们不要直接使用它。换句话说,如果他们需要相应的功能,则应报告错误请求将其状态提升为“非内部”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接