[asdf-devel] Semantic of ASDF Dependencies
Assume we have files "packages" "macros" "classes" "methods" "functions" and we want the following dependencies: 1. In order to compile or load any of the other files the file "packages.fasl" must be loaded. 2. In order to compile or load "methods" the file "classes.fasl" must be loaded. 3. The file "macros" contains macros used in "methods" and "functions" and hence "macros.fasl" must be loaded before any of these 2 files is compiled or loaded. Furthermore when "macros" is changed also "methods" and "functions" have to be recompiled even if they are unchanged. 4. There shall be no more dependencies, i.e. when a file different from "macros" is changed, only this file shall be recompiled. With the Symbolics System Construction Tool (SCT) one would use (:USES-DEFINITIONS-FROM macros) for methods and functions and (:IN-ORDER-TO (:COMPILE :LOAD) (:LOAD packages ...)) for the other dependencies. (asdf:defsystem :test1 :description "Test Dependency Processing" :components ( (:file "packages") (:file "macros" :in-order-to ((asdf:compile-op (asdf:load-op "packages")) (asdf:load-op (asdf:load-op "packages")))) (:file "classes" :in-order-to ((asdf:compile-op (asdf:load-op "packages")) (asdf:load-op (asdf:load-op "packages")))) (:file "methods" :depends-on ("macros") :in-order-to ((asdf:compile-op (asdf:load-op "packages" "classes")) (asdf:load-op (asdf:load-op "packages" "classes")))) (:file "functions" :depends-on ("macros") :in-order-to ((asdf:compile-op (asdf:load-op "packages")) (asdf:load-op (asdf:load-op "packages")))) )) Unfortunately this does not work. All of the ASDF dependencies :DEPENDS-ON and :IN-ORDER-TO seem to behave like the SCT :USES-DEFINITIONS-FROM. For example when "classes" is changed it will recompile "methods" too. Is there anything in ASDF that provides the functionality of the SCT :IN-ORDER-TO ? -- Benjamin Benninghofen Systemanalytiker EADS Defence & Security Military Air Systems Application Software and Processes - OPEM22 Rechliner Straße 85077 Manching - Germany Telephone: +49 (0) 8459 81 78125 Telephone: +49 (0) 89607 78125 Fax: +49 (0) 8459 81 78105 e-Mail: Benjamin.Benninghofen@eads.com EADS Deutschland GmbH Registered Office: Ottobrunn District Court of Munich HRB 107 648 Chairman of the Supervisory Board: Dr. Thomas Enders Managing Directors: Dr. Stefan Zoller (chairman), Michael Hecht NOTICE: This message, together with any attachments, may contain privileged and/or confidential information. If you have received this e-mail in error or are not an intended recipient, you may not use, reproduce, disseminate or distribute it; do not open nor save any attachments, delete it immediately from your system and notify the sender promptly by e- mail that you have done so. Thank you.
On 6 July 2010 05:08, Benjamin Benninghofen <Benjamin.Benninghofen@eads.com> wrote:
Assume we have files "packages" "macros" "classes" "methods" "functions" and we want the following dependencies:
1. In order to compile or load any of the other files the file "packages.fasl" must be loaded.
2. In order to compile or load "methods" the file "classes.fasl" must be loaded.
3. The file "macros" contains macros used in "methods" and "functions" and hence "macros.fasl" must be loaded before any of these 2 files is compiled or loaded. Furthermore when "macros" is changed also "methods" and "functions" have to be recompiled even if they are unchanged.
4. There shall be no more dependencies, i.e. when a file different from "macros" is changed, only this file shall be recompiled.
With the Symbolics System Construction Tool (SCT) one would use (:USES-DEFINITIONS-FROM macros) for methods and functions and (:IN-ORDER-TO (:COMPILE :LOAD) (:LOAD packages ...)) for the other dependencies. [...] For example when "classes" is changed it will recompile "methods" too. Is there anything in ASDF that provides the functionality of the SCT :IN-ORDER-TO ?
Dear Benjamin, I don't think this is currently possible in ASDF, and moreover, I don't think it would be a good idea to add this feature. Indeed, not recompiling when something change means you introduce more non-deterministic state-dependence in compilation, and that things will fail in subtle ways when the declarations from files other that macros.lisp change - for instance, when you modify a class, an inline definition, etc. In these cases, I suppose the SCT relied on the user to force the recompilation, moving some of the dependency state from the machine to the user's head. Except that this doesn't scale to a half-a-million line program by tens of programmers. I think this is bad practice. It would be more interesting if one could automatically extract fine-grained dependency and change information, and use that to drive recompilation. ASDF-DEPENDENCY-GROVEL tries to do that, but it's making crazy approximations, requires some user help, and only scales so well. Something based on actual code coverage could be better, but we don't have it. [ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] ... Any resemblance between the above views and those of my employer, my terminal, or the view out my window are purely coincidental. Any resemblance between the above and my own views is non-deterministic. The question of the existence of views in the absence of anyone to hold them is left as an exercise for the reader. The question of the existence of the reader is left as an exercise for the second god coefficient. (A discussion of non-orthogonal, non-integral polytheism is beyond the scope of this article.)
participants (2)
-
Benjamin Benninghofen
-
Faré