On Tue, May 15, 2012 at 4:26 PM, Sam Steingold sds@gnu.org wrote:
- Faré snuerr@tznvy.pbz [2012-05-15 12:58:29 -0400]:
Note that for the sake of being able to simultaneously support several implementations on the same computer (or network), asdf has taken the route of trying to segregate fasl files and any other build output (e.g. C files and Lisp files generated by CFFI) to directories the name of which depend on the implementation, its version, the operating system and architecture, etc.
I know, and I am not sure this is TRT. This approach leads to a propagation of directories and files which might uselessly duplicate each other on one hand, while not providing the appropriate flexibility on the other.
1) there is no fully reliable way to detect beforehand whether the file will be actual portable bytecode, or something that has platform-specific information, not only because of magic escapes (if they exist), but also because of cffi-extracted constants or other clever read-time, macroexpansion-time or compile-time evaluations.
2) I don't know what you mean by "not providing the appropriate flexibility". ASDF (and XCVB) make it fully user-configurable, and seggregate according to a wide variety of criteria that can be further compounded with e.g. hostname.
E.g., CLISP compiles to platform-independent byte-code whose format changes relatively rarely, so having separate directories for clisp-ver-arch-os is a total waste, which also gives the users an impression that they cannot distribute clisp-fas files to different arches.
How do you avoid the issues with embedded cffi constants? Certainly, a clever enough system could track that no non-portable operations happened during a compilation and validate fasls as portable after-the-fact. That's more clever than either CLISP or ASDF is. Or you could be optimistic until things break badly. Which is frankly a dumb way to save disk space -- but ASDF allows you to configure your system that way if you desire.
If you want some non-trivial feature, that would be more useful: a way to track whether a file was compiled portably, and/or a way to declare that it should and to trap it if it doesn't.
As for namespace issues. Should CDR's be available through (require :cdr3) with their contents in (find-package :cdr3) ?
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org It's possible to program a computer in English. It's also possible to make an airplane controlled by reins and spurs. — John McCarthy