Я заметил, что некоторые известные разработчики пакетов предпочитают не использовать систему управления пакетами Emacs (ESS?) Или жалуются на ее ограничения (Helm).
ВНИМАНИЕ : из-за неправильной концепции package.el, которая отвечает за выборку helm-файлов и их компиляцию, пользователи чаще всего имели ошибки при обновлении с melpa и list-package. Чтобы избежать этого, Async был добавлен как зависимость от helm, чтобы заставить package.el компилировать свои файлы в чистой среде. Люди, устанавливающие из git и использующие файл make, не пострадают от этой проблемы и не нуждаются в Async, хотя это рекомендуется, поскольку он исправляет установку всех других пакетов, которые вы можете установить с помощью package.el из (m) elpa. Смотрите FAQ для получения дополнительной информации.
На какие именно технические ограничения имеет нынешняя система управления пакетами, на которые они могут ссылаться, и почему пакеты нужно использовать async
в качестве зависимости?
источник
Ответы:
Проблема, на которую вы ссылаетесь, вероятно, заключается в том, что когда вы обновляете пакет из сеанса Emacs, где этот пакет уже используется, старая версия пакета иногда будет мешать во время компиляции новой версии, что приводит к неправильной компиляции файлов.
В Emacs-25 есть предварительное исправление, но в AFAIK проблема все еще присутствует в 24.5.
источник
За исключением заметного ProofGeneral, я не знаю ни одного крупного пакета Emacs, которого нет в каком-либо архиве ELPA. В частности, ESS находится на MELPA с трех лет . И PG - это отдельная история, и она определенно не репрезентативна для всей экосистемы Emacs.
У ELPA, безусловно, есть свои недостатки, но для подавляющего большинства пакетов он работает просто отлично, даже для крупных, таких как Magit. Хелм - это единственная посылка, в которой я вижу жалобы на ELPA. Я не уверен, что именно они жалуются, но я думаю, что это о компиляции:
Во время обновлений Emacs компилирует новую версию пакета в среде, в которой старая версия все еще загружается. Обычно это не приносит никакого вреда, но в определенных ситуациях может нарушать работу макросов. Emacs скомпилирует новую версию со старой реализацией макроса, что может привести к поломке, если новый код зависит от конкретного изменения в этом макросе.
Будучи самим сопровождающим пакета, я не согласен с этим утверждением. Я склонен винить Хелма, а не ELPA или Emacs. По моему мнению, это утверждение является гиперболой, а проблема - лишь симптомом чрезмерного и недопустимого использования макросов.
Если вы используете много макросов и - что еще хуже - помещаете нетривиальный код в тело макроса, вам просто нужно знать о последствиях, которые это имеет для байтовой компиляции, и вы должны быть осторожны, чтобы поддерживать обратную совместимость с вашими собственными макросами. в вашем пакете. Не делать этого, а вместо этого распространять вину, это не очень хорошая вещь. Мои 2 цента.
источник