Питання: Чому у Elisp немає просторів імен, і як ми могли їх отримати?
У Elisp немає просторів імен, крім глобальних, що призвело до конвенції кодування префіксації всіх глобальних функцій, змінних та констант унікальним префіксом.
Окрім фактора роздратування, це також вражає мене проблемою закипання, що дається 1) постійно зростаючою кількістю великих бібліотек та пакетів та 2) постійним існуванням спадкових функцій та змінних, які або не дотримуються конфігурації префікса, або є достатньо ідіосинкратичними, що насправді не існує хорошого варіанта префікса, який вони могли б використати. Це також означає, що періодичні спроби раціоналізувати старіші коди (як і при переході від cl
до cl-lib
) є нетривіальним обсягом роботи. (Хоча я радий за прибирання, я все одно проливаю сльозу кожен раз, коли я набираю щось на кшталт cl-find
).
Я пішов обдумувати, щоб дізнатись, чому після кількох десятиліть використання у Elisp все ще немає просторів імен, але трохи здивувався скромному врожаю. Сторінка вікі в просторах імен досить коротка. Nic Ferrier має дещо довше питання щодо вирішення цього питання, і на ньому також є доволі недавня тема щодо emacs-devel . Є стара нитка переповнення стека з 2010 року, яка обговорює можливість використання макросів для реалізації просторів імен; інший приклад макро підходу можна знайти тут . Існує хоча б пара реалізацій ( тут і тут , з описом останніх тут) там, але вони не спостерігали особливої активності протягом двох років, і я не натрапляв на жодні бібліотеки, які ними користуються.
Я припускаю, що якби додати простори імен було легко, це вже було б зроблено. Тому:
- Які технічні бар'єри для додавання просторів імен до elisp?
- Чи додавання просторів імен порушить багато існуючого коду?
- Це функціональність, яка повинна бути органічною для elisp (зміни самого інтерпретатора), чи вона справді може бути побудована зверху за допомогою макросів?