The idea of third party packages is that you can install them
independently of the core. 

So when you upgrade Felix,
the packages should continue to work in particular
you may need to hand configure packages and it is really
horrible having to edit the configuration every time a 
new Felix core install clobbers it.;

Of course packages themselves may need to be upgraded because

        (a) new core felix isn't compatible with them
        (b) the underlying C/C++ package has been upgraded 

Most packages of most package managers have versioning.
On Linux a crude method:

        major.minor.patch

is often used. This means: 

        * changes in patch fix bugs and don't require recompilation
                dynamic loading, no changes needed at all
                static linkage, programs need to be relinked
        * changes in minor
                generally the same as patch
                significant changes in algorithms 
                only upgrades to interfaces
        * major
                interface changes

Although this is great for major components like gcc, it's useless for packages
without a LOT of human intervention by packagers (to see what works with what
and then specify it).

What I am thinking instead is this: I have already changed Felix to use

        YY.MM.DD

Every change when you install Felix you get:

        /usr/local/lib/felix/felix-YY.MM.DD/*
        /usr/local/lib/felix/felix-latest # symbolic link

I think packages should do the same. Only I am now thinking of a 
slightly different scheme. Instead of putting the version number in
the package .. get rid of it!

When you install, the version number is simply the install (or build) date!

When changes are made to packages a history is kept in a known place.
It says things like:

        11.07.20: Version 1.0.5
        11.04.03: fixed silly bug

By consulting the history, the build date can be translated to the packages
internal "version".

My original idea for packages was that you only had one copy.
Similar to a Linux package manager. For things like Python 
separate versions have separate packages, i.e. if it matters
the version number becomes part of the package (and packages
depending on it have to be upgraded just to use the new package)

However there's a more complex option: shadow directories.
We install packages like Felix: into a directory with the install
date and a link to the latest one.

The difference is, we search all the history for components.
I call this "shadow directories". For example if you want to use
the gnu/gmp binding package, you start looking in 

        packages/packages-latest

and if it's not there try in

        packages/packages-YY.MM.DD

for all the directories you have in "packages".

There is an even better way to manage the sources.....

Just use git. The main problem is that this doesn't handle
configuration.


--
john skaller
skal...@users.sourceforge.net
http://felix-lang.org




------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to