I’ve been working on an odd Emacs package recently — not ready for release — which has turned into more than the usual morass of prefixed names and double hyphens.
So, I took another look at Nic Ferrier’s namespace proposal.
Suddenly it didn’t seem all that hard to implement something along these lines, and after a bit of poking around I wrote emacs-module.
The basic idea is to continue to follow the Emacs approach of prefixing symbol names — but not to require you to actually write out the full names of everything. Instead, the module system intercepts
load and friends to rewrite symbol names as lisp is loaded.
The symbol renaming is done in a simple way, following existing Emacs conventions. This gives the nice result that existing code doesn’t need to be updated to use the module system directly. That is, the module system recognizes name prefixes as “implicit” modules, based purely on the module name.
I’d say this is still a proof-of-concept. I haven’t tried hairier cases, like
defclass, and at least
declare-function does not work but should.
Here’s the example from the docs:
(define-module testmodule :export (somevar)) (defvar somevar nil) (defvar private nil) (provide 'testmodule)
This defines the public variable
testmodule-somevar and the “private” function