21.09.2010 03:11, NotFound writes:
* The problem *

   Extracting a representative set of dependencies using the described
method is only possible when a high-level language compiler that
produces a code of the module translates the set of static module
requirements (i.e. the "import" section entries or "use Module::Name"
expressions) into the corresponding load instructions and places the in
the module initialization section (:init :load), not the "main" module code.

* The proposition. Questions *

  From my point of view, that policy seems logical and natural. Is it
the same for you?

No. Just an example: a module should be able to choose what to load
during its initialization, depending on environment variables,
arguments passed to a initialization sub...

That is a striking example of a dynamic dependence: if the desired module is not found, the error is probably in the program command line or the setup of environment variables. In this case, an installation of the program itself can still be correct.


  Anyway I don't like policies. Instead of that I propose to make some
modifications to the PCT in such a way that any properly defined
compiler would produce a code with all static module loading procedures

PCT is just a set of tools. Is not the only way of writing compilers
targeting parrot.

Yes. When a programmer writes such a compiler with no help of special tools he/she is responsible for all of the conventions and/or policies to be applied.


Another point of view: this is just a matter of using an appropriate
definition. If a module is loaded via PIR directives or during :load /
:init phase, is "static" and is a dependency. If not, is dynamically
loaded ans should not be considered a dependency.


Yes again. But that is a little reverse of the problem: if the :load/:init phase contains some "dynamic load" code (as you stated above) then the resulting set of dependencies is not stable nor static. But I try to find a way to encode true static dependencies into the bytecode.

Information about static dependencies is a very important if you want to get a stable software distribution. If one program can not be run without another program you should install both of them. In the form of a high-level language source code the static dependencies a explicitly stated: if we read "use File::Temp;" at the beginning and the program is compiled successfully, then there is a good reason to treat the module File/Temp.pm as a static dependency.


When such a program is translated into a bytecode module the information that was explicitly stated is lost: without some policy or convention there is no way to distinguish "File/Temp.pm" from a dynamic dependency.


There is still a way to extract the reliable information about static dependencies from the original high-level language files, i.e. Perl or Python module sources. That approach is in an active use in Sisyphus now. Many languages, same problem, different solutions. Why not to unify and simplify all of them? One of the Parrot goals is unification, isn't it?

--
Paul Wolneykien,
  ALT Linux, Ltd.
_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev

Reply via email to