F: Warum hat elisp keine Namespaces und wie können wir sie bekommen?
Elisp hat keine anderen Namespaces als den globalen, was zu der Kodierungskonvention geführt hat, dass allen globalen Funktionen, Variablen und Konstanten ein eindeutiges Präfix vorangestellt wird.
Abgesehen von dem Ärgerfaktor scheint es mir auch ein Problem zu sein, das angesichts 1) der ständig wachsenden Anzahl großartiger Bibliotheken und Pakete und 2) der fortbestehenden Existenz von Legacy-Funktionen und -Variablen, die entweder die Präfixkonvention nicht respektieren, oder sind so eigenwillig, dass es keine wirklich gute Präfixoption gibt, die sie verwenden könnten. Dies bedeutet auch, dass regelmäßige Versuche, älteren Code (wie beim Übergang von cl
nach cl-lib
) zu rationalisieren, nicht trivial sind. (Obwohl ich für das Aufräumen froh bin, vergieße ich trotzdem jedes Mal eine Träne, wenn ich so etwas schreibe cl-find
).
Ich stöberte herum, um herauszufinden, warum elisp nach einigen Jahrzehnten der Nutzung immer noch keine Namespaces hat, war aber ein wenig überrascht über die bescheidene Ernte. Die Wiki-Seite zu Namespaces ist recht kurz. Nic Ferrier hat eine etwas längere Behandlung des Problems und es gibt auch einen relativ neuen Thread über Emacs-Entwicklung . Es gibt einen alten Stapelüberlauf-Thread aus dem Jahr 2010, in dem die Möglichkeit der Verwendung von Makros zum Implementieren von Namespaces erörtert wird. Ein weiteres Beispiel für den Makroansatz finden Sie hier . Es gibt mindestens ein paar Implementierungen ( hier und hier , mit einer Beschreibung der letzteren hier) da draußen, aber sie haben seit ein paar Jahren nicht mehr viel Aktivität gesehen, und ich bin nicht auf Bibliotheken gestoßen, die sie verwenden.
Ich nehme an, wenn das Hinzufügen von Namespaces einfach wäre, wäre dies bereits erledigt. Damit:
- Was sind die technischen Hindernisse für das Hinzufügen von Namespaces zu elisp?
- Würde das Hinzufügen von Namespaces einen Großteil des vorhandenen Codes beschädigen?
- Muss diese Funktionalität organisch sein (Änderungen am Interpreter selbst), oder kann sie wirklich über Makros aufgebaut werden?