В: Почему у elisp нет пространств имен, и как мы можем их получить?
У Elisp нет пространств имен, кроме глобального, что привело к соглашению о кодировании, заключающемуся в том, что все глобальные функции, переменные и константы имеют префикс с уникальным префиксом.
Помимо фактора раздражения, это также поразило меня как проблему, которая проявляется в связи с 1) постоянно растущим числом замечательных библиотек и пакетов и 2) продолжающимся существованием унаследованных функций и переменных, которые либо не соблюдают соглашение о префиксах, либо достаточно уникальны, так что на самом деле нет хорошего префикса, который они могли бы использовать. Это также означает, что периодические попытки рационализировать старый код (как при переходе от clк cl-lib) - это нетривиальный объем работы. (Хотя я рад за уборку, я все еще плачу каждый раз, когда набираю что-то вроде cl-find).
Я начал ковыряться, чтобы узнать, смогу ли я узнать, почему elisp все еще не имеет пространств имен после нескольких десятилетий использования, но был немного удивлен скромным урожаем. Вики - страница на пространствах имен является довольно короткой. У Ник Ферье есть немного более длительный подход к этой проблеме, и на emacs-devel также есть довольно свежая ветка . Существует старый поток Stack Overflow 2010 года, в котором обсуждается возможность использования макросов для реализации пространств имен; другой пример макроподхода можно найти здесь . Существует как минимум пара реализаций ( здесь и здесь , с описанием последних здесь), но они не видели много активности в течение нескольких лет, и я не сталкивался с библиотеками, которые их используют.
Я предполагаю, что, если бы добавить пространства имен было легко, это уже было бы сделано. Так:
- Каковы технические барьеры для добавления пространств имен в elisp?
- Не нарушит ли добавление пространств имен существующий код?
- Является ли эта функциональность чем-то, что должно быть органичным для elisp (изменения в самом интерпретаторе), или она действительно может быть построена поверх макросов?