Ich stelle fest, dass einige namhafte Paketbetreuer das Emacs-Paketverwaltungssystem (ESS?) Nicht verwenden oder sich über dessen Einschränkungen (Helm) beschweren.
Zitiert aus Helm ‚s README.md :
WARNUNG : Aufgrund eines schlechten Konzepts von package.el, das für das Abrufen und Kompilieren von Helmdateien zuständig ist, hatten Benutzer die meiste Zeit Fehler beim Upgrade von melpa und list-package. Um dies zu vermeiden, wurde Async als Abhängigkeit von helm hinzugefügt, um package.el zu zwingen, seine Dateien in einer sauberen Umgebung zu kompilieren. Personen, die von git installieren und die make-Datei verwenden, leiden nicht unter diesem Problem und benötigen kein Async, obwohl dies empfohlen wird, da es die Installation aller anderen Pakete behebt, die Sie möglicherweise mit package.el von (m) elpa installieren. Weitere Informationen finden Sie in den FAQ.
Welche genauen technischen Einschränkungen weist das aktuelle Paketverwaltungssystem auf, auf die sie anspielen könnten, und warum sollten Pakete async
als Abhängigkeit verwendet werden müssen?
quelle
Antworten:
Das Problem, auf das Sie sich beziehen, besteht wahrscheinlich darin, dass beim Aktualisieren eines Pakets aus einer Emacs-Sitzung, in der dieses Paket bereits verwendet wird, die alte Version des Pakets manchmal beim Kompilieren der neuen Version stört, was zu falsch kompilierten Dateien führt.
In Emacs-25 gibt es eine vorläufige Lösung dafür, aber AFAIK, das Problem ist in 24.5 immer noch vorhanden.
quelle
Mit Ausnahme von ProofGeneral sind mir keine wichtigen Emacs-Pakete bekannt, die in einigen ELPA-Archiven nicht verfügbar sind. Insbesondere ist ESS seit drei Jahren bei MELPA . Und PG ist eine Geschichte für sich und definitiv nicht repräsentativ für das gesamte Emacs-Ökosystem.
ELPA hat sicherlich seine Mängel, aber für die überwiegende Mehrheit der Pakete funktioniert es einwandfrei, selbst für große wie Magit. Helm ist das einzige Paket, bei dem ich mich über ELPA beschwere. Ich bin mir nicht sicher, worüber sie sich genau beschweren, aber ich denke, es geht um die Zusammenstellung:
Während eines Upgrades kompiliert Emacs die neue Version des Pakets in einer Umgebung, in der die alte Version noch geladen ist. Normalerweise schadet dies überhaupt nicht, kann jedoch in bestimmten Situationen Makros beschädigen. Emacs kompiliert die neue Version mit der alten Implementierung des Makros, was zu einem Bruch führen kann, wenn der neue Code auf einer bestimmten Änderung in diesem Makro beruht.
Da ich selbst Paketbetreuer bin, stimme ich dieser Aussage jedoch nicht zu. Ich beschuldige eher Helm als ELPA oder Emacs. Meiner Meinung nach ist die Aussage eine Übertreibung, und das Problem ist nur ein Symptom für die Über- und Ab-Verwendung von Makros.
Wenn Sie viele Makros verwenden und - noch schlimmer - nicht trivialen Code in den Makrokörper einfügen, müssen Sie sich lediglich der Auswirkungen bewusst sein, die dies auf die Bytekompilierung hat, und Sie müssen darauf achten, die Abwärtskompatibilität mit Ihren eigenen Makros aufrechtzuerhalten innerhalb Ihres Pakets. Das nicht zu tun und stattdessen die Schuld weiterzugeben, ist keine sehr schöne Sache. Meine 2 Cent.
quelle