On Wed, May 18, 2016 at 7:57 AM, Alessio Stalla alessiostalla@gmail.com wrote:
Can you elaborate on that?
Not really yet. I haven't though enough about it at this point, the idea is still too fresh. But I will at least mention my main source of inspiration on the subject, coming from my Smalltalk days (of somewhat fading memory): the ENVY/Developer system.
The stance on packages found in the mentioned Quora post is based on the old misconception about packages being modules, or "software packages" in the Linux distribution sense. They're not. They are really just namespaces, containers of symbols. So it does not make any sense, to me, that they have versions. Software has versions, not names.
Well, "packages" seem to me to be the only system structuring device offered by the CL spec. So you have to work from there toward something more appropriate, I'd say. In a somewhat upward compatible manner I'd hope.
I think it *is* already possible, even if no convenient machinery for it exists, to load the same symbols under different packages (i.e. to use different names for different versions of the same concepts).
(defpackage p ...) (load (compile-file "p-1.0.lisp")) (rename-package "P" "P-1.0") (defpackage p ...) (load (compile-file "p-1.1.lisp")) (rename-package "P" "P" "P-1.1")
p-*.lisp start with (in-package :p)
Then you can compile code against p (latest version), p-1.0 and/or p-1.1. Of course each p-*.lisp must be "nice" - only define things in package p.
This is an interesting line of argument you've got here...
Thanks,