Technische Überlegungen für Paketbetreuer, den Emacs-Paketmanager nicht zu verwenden?


10

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 asyncals Abhängigkeit verwendet werden müssen?


1
Diese Frage sollte als zu weit gefasst für diese Seite geschlossen werden, denke ich. Es ist besser auf ein Diskussionsforum ausgerichtet. Versuchen Sie help-gnu-emacs@gnu.org oder emacs-devel@gnu.org oder Emacs reddit oder ähnliches. " Was genau ist das Problem? " Geht davon aus, dass es ein solches Problem gibt, und die Frage, welche möglichen Probleme für ein Paket (oder einen Paketbetreuer) vorliegen, ist zu weit gefasst.
Drew

2
ESS wird auf Melpa gehostet: melpa.org/#/ess , vielleicht ist es nur eine Dokumentationssache. Ich kenne viele Projekte, die normalerweise über einen Systempaket-Manager installiert werden können, erwähne diese Option jedoch nicht ohne wirklichen Grund (möglicherweise unter der Annahme, dass Sie eine haben müssen, wenn Sie die Quellen / Binärdateien von der Site heruntergeladen haben) Grund dafür). Ich weiß nicht, welches Problem Helm hatte.
wvxvw

Ihr Titel liest sich für mich etwas seltsam. Wollten Sie zweimal "Manager" schreiben, oder meinten Sie Betreuer?
Malabarba

1
Lassen Sie uns als ESS-Entwickler wissen, wie wir die Dinge verbessern können - wie andere kommentiert haben, ist ESS in MELPA.
Stephen Eglen

Antworten:


19

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.


9

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.


2
FWIW, ich bin mit Ihrer Meinungsverschiedenheit nicht einverstanden: Obwohl ich der Meinung bin, dass es besser ist, zu vermeiden, dass Makros übermäßig verwendet werden, sind die Kompilierungsprobleme real und können mehr als nur Makroaufrufe betreffen (z. B. können sie auch durch inlinierbare Funktionen oder durch aufgerufene Funktionen ausgelöst werden während der Makroexpansion). Und wenn Sie von diesem Problem gebissen werden, sind Ihre .elc-Dateien falsch und können sich auf alle möglichen interessanten Arten schlecht verhalten. Daher kann es schwierig sein, das Problem zu diagnostizieren. Um es zu beheben, muss das Paket deinstalliert und neu installiert werden (sobald Sie es sich vorgestellt haben) das Problem und welches Paket muss neu installiert werden.
Stefan

1
@Stefan Ich bestreite die Kompilierungsprobleme nicht. Ich wurde selbst gebissen. Aber ich mag die Haltung, die durch diese Aussage zum Ausdruck kommt, und das Fehlen einer "ausgewogenen Sichtweise" nicht. Helm wird so schlimm gebissen, weil sie auch auf ihrer Seite viele Fehler gemacht haben, aber ihre Aussage erkennt das nicht an. Meiner bescheidenen Meinung nach ist das Aufrufen von Funktionen im Makrokörper ein solcher Fehler. Makros dienen nur der Syntax, niemals jedoch der Funktionalität. Aber ich verstehe, dass dies ein Thema zu sein scheint, zu dem die Emacs Lisp-Community viele verschiedene Meinungen hat.
Mondhorn

ropemacs , jdee-emacs und excorporate sind bemerkenswerte Pakete, die sich in keinem ELPA-Archiv befinden (abhängig von Ihren Kriterien für Hauptpakete). Die überwiegende Mehrheit der Pakete ist jedoch.
Wilfred Hughes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.