gump-general mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefano Mazzocchi <stef...@apache.org>
Subject [revelation!!] circular dependencies do NOT exist!
Date Thu, 16 Dec 2004 23:51:17 GMT
It came to me as a revelation today: one of the problems with gump that 
I could never figure out is the fact that circular dependencies prevent 
the ability to "bootstrap" after a certain point.

Example, subversion is stored in a subversion repository, thefore, 
before building, we need to update the repository... but then how can we 
do that?

So

  A --(needs)--> B

and

  B --(needs)--> A

Until today, i thought that no matter how well maintained, a dependency 
graph would always be a general graph, and cycles would develop, sooner 
of later (it is still amazing that gump reached 750 projects without 
explicit circular dependencies).

I was also starting to think at a way to map the concept of 
'autocatalysm' that incurs in networks of genes and proteins interaction 
(and is the most acclaimed theory that explains the emergence of life 
out of primordial broth)

Turns out I was wrong: there is no such thing as circular dependency.

NEVER! It's physically impossible!

Let me explain.

Let's start with changing the above diagram a little:

  ---------A----------------------------->
          /
       needs
        /
       v
  -----B--------------------------------->
                                        time

let's call them A:1 and B:1 to indicate their name and their time 
coordinate (1 could be a timestamp or a version, doesn't matter), so

  --------A:1----------------------------->
          /
       needs
        /
       v
  ----B:1--------------------------------->

no, the previous diagram said that A needs B and B needs A... but the 
fact is that at the time of B:1, A:1 was not even existing, so it's 
impossible to draw the above "uses" line bidirectionally. The 
appropriate diagram is

  A:0-------A:1----------------------------->
   ^        /
    \      /
   needs needs
      \  /
       \v
  -----B:1--------------------------------->

and we can continue like that backwards until we reach the *initial 
stage* of one of the projects where one of them did *NOT* exist at all, 
therefore the thing.

Now.

This seems to imply that in order to bootstrap anything we need to 
"regenerate" the entire history of buildings. Well, turns out that is 
not the case since we can take a snapshot of a previous build and 
continue from there.

In fact, a particular version is the crystallization of all the time 
dependencies across the above trallis, but if we take into consideration 
the time axis, there is no such a thing as circular dependencies.

:-D

-- 
Stefano.


---------------------------------------------------------------------
To unsubscribe, e-mail: general-unsubscribe@gump.apache.org
For additional commands, e-mail: general-help@gump.apache.org


Mime
View raw message