问:为什么elisp没有名称空间,我们如何获得它们?
Elisp除了全局名称空间外没有其他名称空间,这导致了编码约定,即为所有全局函数,变量和常量加上唯一的前缀。
除了烦人的因素外,考虑到以下因素,这还令我感到震惊:1)强大的库和程序包数量不断增加,以及2)遗留不遵守前缀约定的传统函数和变量的持续存在,或者具有足够的特质,因此实际上并没有一个好的前缀选项可以使用。这也意味着定期尝试对较旧的代码进行合理化(例如从cl
到的转换cl-lib
)是一项艰巨的工作。(尽管我为清理感到高兴,但每次输入诸如此类的文字时,我还是会流下眼泪cl-find
。)
我四处逛逛,看看是否能找出为什么elisp在使用了几十年后仍然没有命名空间,但对适度的收获感到有些惊讶。关于名称空间的Wiki页面很短。 Nic Ferrier对这个问题的处理时间稍长,并且在emacs-devel上也有一个相当新的话题。从2010年开始就有一个旧的Stack Overflow线程,讨论使用宏实现名称空间的可能性。宏方法的另一个示例可以在这里找到。至少有两种实现(在这里和这里,并在此处描述后者)。),但他们已经有两年没有看到太多活动了,而且我还没有遇到任何使用它们的图书馆。
我认为,如果添加名称空间很容易,那就已经可以了。所以:
- 向elisp添加名称空间的技术障碍是什么?
- 添加名称空间会破坏很多现有代码吗?
- 此功能是否需要有机地消除(对解释器本身的更改),还是真的可以通过宏在顶部构建?