软件包维护者不使用Emacs软件包管理器的技术考虑?


10

我注意到一些著名的软件包维护者选择不使用Emacs软件包管理系统(ESS?)或抱怨其局限性(Helm)。

引用HelmREADME.md

警告:由于package.el的概念不正确,该概念负责获取helm文件并对其进行编译,因此从melpa和list-package升级时,大多数时间用户都出错。为了避免这种异步现象,已添加了对Helm的依赖关系,以强制package.el在干净的环境中编译其文件。从git安装并使用make文件的人不会遇到这个问题,尽管建议使用Async,但是它不需要Async,因为它修复了所有其他可能由(m)elpa的package.el安装的软件包的安装。有关更多信息,请参见常见问题解答。

当前的软件包管理系统可能暗示哪些确切的技术限制async?为什么需要将软件包用作依赖项?


1
我认为,对于这个网站来说,这个问题应该涵盖得太广了。最好是针对讨论论坛。尝试help-gnu-emacs@gnu.org或emacs-devel@gnu.org或Emacs reddit或类似的东西。“ 确切的问题是什么? ”假定存在一个这样的问题,并且问任何软件包(或任何软件包维护者)可能出现的问题太广泛了。
Drew

2
ESS托管在Melpa上:melpa.org/ #/ ess,也许只是文档方面的事情。我知道很多项目,这些项目通常可以通过系统软件包管理器安装,但是出于没有真正的原因,请选择不提及该选项(也许假设如果您打算从该站点下载源代码/二进制文件,那么您必须拥有这样做的理由)。我不知道Helm有什么问题。
wvxvw 2015年

你的头衔对我来说有点奇怪。您是要写两次“经理”,还是要维护者?
马拉巴巴

1
以ESS开发人员的身份进行撰写,一定要让我们知道我们如何改进事务-正如其他人所评论的那样,ESS在MELPA中。
Stephen Eglen

Answers:


19

您所指的问题可能是,当您从已经在使用该软件包的Emacs会话中升级该软件包时,该软件包的旧版本有时会在新版本的编译过程中产生干扰,从而导致文件编译错误。

Emacs-25中有一个临时性修复程序,但AFAIK在24.5中仍然存在该问题。


9

除了ProofGeneral明显例外,我不知道某些ELPA档案文件中没有任何主要的Emacs软件包。特别是,自三年以来,ESS就在MELPA上。PG本身就是一个故事,绝对不能代表整个Emacs生态系统。

ELPA肯定有其缺陷,但是对于绝大多数的程序包来说,它工作得很好,即使对于像Magit这样的大型程序包也是如此。Helm是我看到的唯一抱怨ELPA的包裹。我不确定他们到底在抱怨什么,但是我想这与编译有关:

在升级期间,Emacs在仍加载旧版本的环境中编译软件包的新版本。通常,这完全没有害处,但是在某些情况下会破坏宏。Emacs将针对宏的实现编译新版本,如果新代码依赖于该宏中的特定更改,则可能导致破坏。

作为我自己的软件包维护者,我几乎不同意这一说法。我倾向于指责头盔而不是ELPA或Emacs。在我看来,该语句是夸张的,而且问题只是过度使用和滥用宏的症状。

如果您使用大量宏,甚至将更平凡的代码放入宏主体中,则只需要了解其对字节编译的影响即可,并且必须小心保持与自己的宏的向后兼容性在您的包裹中。不这样做,而要怪罪别人,这不是一件好事。我的2美分。


2
FWIW,我不同意您的不同意见:虽然我同意最好避免过度使用宏,但编译问题是真实的,比宏调用可能会影响更多(例如,它们的影响也可以由不可移植的函数或称为的函数触发在宏扩展过程中)。当您被这个问题咬伤时,您的.elc文件不正确,并且可能以各种有趣的方式出现异常,因此可能很难诊断出问题,并且要修复此问题,需要先卸载再重新安装该软件包(问题并且其包需要被重新安装。
斯蒂芬

1
@Stefan我不否认编译问题。我被咬了 但是我不喜欢这种说法所表达的态度,也缺乏我所谓的“平衡观点”。赫尔姆之所以被咬伤,是因为他们也犯了很多错误,但他们的声明并不承认这一点。以我的拙见,在宏体中调用函数是这样的错误。宏仅用于语法,而不能用于功能。但是我确实知道,这似乎是Emacs Lisp社区对此有很多不同意见的主题。
lunaryorn

ropmacsjdee-emacsexcorporate是值得注意的软件包,它们不在任何ELPA存档中(取决于您对主要软件包的标准)。不过,绝大多数软件包都是。
Wilfred Hughes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.