[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Proposal: An OOC Package Tool
Hallo!
> What you rather might wanna have, is individual version numbers for individual
> entities, such as procedures, or variables. You then just import
> edu.uci.ics.lagoona.core.Collections and if some entities require a
> special version number
> (e.g., because you work around a specific bug) then you might still
> be able to check
> the version number of the entity in the program at runtime:
> IF VERSION (foo.bar) < 5 THEN
> Bailout ("Need at least version 5 of foo.bar");
> ELSIF VERSION (foo.bar) > 7 THEN
> foo.do (); (* without the fix, assuming the error has been corrected *)
> ELSE (* for versions 5, 6, and 7 the fix is needed *)
> (* "prefix" *)
> foo.do ();
> (* "postfix" *)
> END;
This look like the C++ version of the solution.
STOP!
Before offering possible solutions to the problem we should first
define what the problem is!
Ok, here some questions we should answer (and there are very likely
much more :-)):
* What is the problem? Obviously it has something to to with packages
and versions.
* What is a package. Some people told that we need versioning for
modules, some spoke of "packages". While I have some idea what it is,
I havn´t yet heard a detailed definition.
* Why do we need a package system? What do we like to gain from a
package system (Sounds like a easy question, but who knows?)
* What about dependencies between module in a package / between
packages?
* How about dependencies between packages, are they defined via the
module dependencies or are they different.
* Some spoke about a directory for each package. Why do we need it? For
compilation, installation? Should the knowledge about module
placement be shown to the programmer or is this a implementation
detail of the compiler, totaly hidden?
Note, that I think a language should use a database-like interface
to the modules. Each module has an absolute path within a virtual
filesystem (perhaps a versioned file system), however the
implementation of this database is totaly hidden from the user.
Object and symbol file are stored in a - for the user unknown -
seperate space. Perhaps even the *.Mod file should be copied
elsewhere for automatic rebuilding purposes? During the (re)building
process the user only sees its own modules and the resulting
executable.
There should be no limitations for a pathpart or total parth length.
Module shortcuts ("IMPORT D := LongModuleName") are great.
* MvA has not yet spoke about installation details for its package
system. As a result - while I´m in favour of reusing existing package
systems like Readhat or Debian has - I´m not sure if these tools are
sufficient. Perhaps You could give a list of keyfeatures (without
implementation details, yet) you have in mind?
* How often is version a problem, must we find a powerfull solution or
is a workaround, a simple solution adaquate?
In my opinion the need of exessive versioning is a result of bad
start design (changes to the interface break compability) and back
hacking (versioning as a need for bug fixes). Normaly newer
module/package version should enhance the interface while keeping
compatibility with older version. As a result exessive versioning is
a workaround for bad design/hacking as since we do not ddo such things
we do not need it.
Note, I´m not against it, I just think something as powerfull as the
current Linux shared library versioning should be sufficent.
* How does the automatism work if no explicite version of a
module/package is given (likely take the highes version).
--
Gruß...
Tim.