[vwnc] Feedback on New Prerequisite Engine

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[vwnc] Feedback on New Prerequisite Engine

thomas.hawker

Some time back (I can’t find it in my email) someone posted a note about the new prerequisite engine.  I’ve been trying to use it, and wanted to provide some feedback.

 

The Good News:

 

  1. It’s very fast – so fast that it’s done almost before you remove your finger from the mouse.  That’s an amazing improvement.
  2. For the most part, it’s accurate.  Combine that with its speed and this is a very useful tool indeed.

 

The Not-So-Good News:

 

  1. I think you need to be able to remove any prerequisite because sometimes the derivation thinks there’s a dependency when there really isn’t.  For example, we have a lot of GemStone and Opentalk client and server code in our development image.  A dependency may be “computed” between a client code package sending a message to the server code package.  This is not a valid dependency because of the forwarding nature of proxies. 
  2. Prerequisites that are determined solely by literal bindings (specifically, #{…}), should be ignored or mark the dependency as optional.  That’s because literal bindings tend to be weak references used to check whether something is loaded before actually using the particular object.  I’m not sure, but it may mean that the derivation of a dependency may need several possible states which “escalate” to the strongest type of reference.  This may complicate message send derivations above.  In fact, should message send derivations, even if they are only found in a single package, be considered “weak” (optional) dependencies?
  3. Duplicate removal appears to be incomplete or inappropriately depth-limited.  We have a number of packages that override or extend Opentalk-HTTP or -SOAP, but the computed dependencies show them, plus -Core, -Core-support, and -Prerequisites.  Since -SOAP requires -HTTP which requires the other, only the top-most should be left after duplicate removal.
  4. The “reduce to bundles” option could use some secondary switches.  If you turn on the reduction, you get the bundle that is the most “inclusive.”  What I think you really want is the one that has the most “containment.”  We have a top-level development bundle that loads everything by prerequisite, having no contents, yet when we turn on this switch, universally our dependencies compute to this one bundle rather than the actual containing bundle(s).  I’d like to suggest the following:
    1. I think bundle dependencies should only resolve to those that actually contain dependent packages and never to those that might reference them through other inclusion.  If you want to take into account inclusion, that should be a separate option.  I think this is independent of but related to duplicate removal.
    2. I think you need to be able to select whether a computed prerequisite to a bundle is the nearest (least inclusive) or farthest (most inclusive) bundle that actually contains a prerequisite package.  This would affect only bundles with depth > 1 (that is, bundles of bundles of arbitrary depth).
    3. For this last switch, I think you need to be able to set it differently for package or for bundle prerequisite computation.  For packages, I usually want things to reference other packages, but for bundles, I usually want things to reference bundles.  There are cases where I want things to reference peers of the same depth.
    4. Because the low-level computation is to packages, I think you need a switch to control how computation works in the presence of parcels that have bundle structure, or at least be able to “mark” certain parcels as being “atomic” – that is, resolution always is to the top-most bundle.  This would support, for example, loading the GemStone client code, which is three parcels [bundles] rather than 20-odd packages.  Because they’re loaded from a parcel, you can’t even find the individual packages to load unless you do reference the bundle.
    5. If these aren’t feasible, and even if they are, I think it would be nice to be able to select various computed prerequisites and have a menu item that would replace them with their [common] parent containing bundle or the top-most including bundle.

 

Great job!

 

Cheers!

 

Tom Hawker

Senior Framework Developer

Home

+1 (408) 274-4128

The Environment:

We take it personally

Office

+1 (408) 576-6591

Mobile

+1 (408) 835-3643

 

IMPORTANT NOTICE
Email from OOCL is confidential and may be legally privileged.  If it is not intended for you, please delete it immediately unread.  The internet cannot guarantee that this communication is free of viruses, interception or interference and anyone who communicates with us by email is taken to accept the risks in doing so.  Without limitation, OOCL and its affiliates accept no liability whatsoever and howsoever arising in connection with the use of this email.  Under no circumstances shall this email constitute a binding agreement to carry or for provision of carriage services by OOCL, which is subject to the availability of carrier's equipment and vessels and the terms and conditions of OOCL's standard bill of lading which is also available at http://www.oocl.com.

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Feedback on New Prerequisite Engine

thomas.hawker

One more item.

 

If you have a package inside a bundle and you compute it’s prerequisites with “reduce to bundle” enabled, then the bundle(s) containing the package should be eliminated from the set of possible bundles available as a prerequisite.  After all, you don’t want to compute to a circular dependency.  I’m not sure if it does this or not.

 

Cheers!

 

Tom Hawker

Senior Framework Developer

Home

+1 (408) 274-4128

The Environment:

We take it personally

Office

+1 (408) 576-6591

Mobile

+1 (408) 835-3643

 

IMPORTANT NOTICE
Email from OOCL is confidential and may be legally privileged.  If it is not intended for you, please delete it immediately unread.  The internet cannot guarantee that this communication is free of viruses, interception or interference and anyone who communicates with us by email is taken to accept the risks in doing so.  Without limitation, OOCL and its affiliates accept no liability whatsoever and howsoever arising in connection with the use of this email.  Under no circumstances shall this email constitute a binding agreement to carry or for provision of carriage services by OOCL, which is subject to the availability of carrier's equipment and vessels and the terms and conditions of OOCL's standard bill of lading which is also available at http://www.oocl.com.
IMPORTANT NOTICE
Email from OOCL is confidential and may be legally privileged.  If it is not intended for you, please delete it immediately unread.  The internet cannot guarantee that this communication is free of viruses, interception or interference and anyone who communicates with us by email is taken to accept the risks in doing so.  Without limitation, OOCL and its affiliates accept no liability whatsoever and howsoever arising in connection with the use of this email.  Under no circumstances shall this email constitute a binding agreement to carry or for provision of carriage services by OOCL, which is subject to the availability of carrier's equipment and vessels and the terms and conditions of OOCL's standard bill of lading which is also available at http://www.oocl.com.

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Feedback on New Prerequisite Engine

Terry Raymond
In reply to this post by thomas.hawker

A few years ago I modified the prereq engine to separate load prereqs

from runtime prereqs. IMHO most enterprise applications care about load

prereqs whereas library applications also care about runtime prereqs.

 

If you separate them then you can more easily satisfy them. Load

prereqs must be satisfied for loading to occur but runtime prereqs only

need to be satisfied before code is going to be executed.

 

Terry

===========================================================
Terry Raymond
Crafted Smalltalk
80 Lazywood Ln.
Tiverton, RI  02878
(401) 624-4517      [hidden email]
<http://www.craftedsmalltalk.com>
===========================================================


From: [hidden email] [mailto:[hidden email]] On Behalf Of [hidden email]
Sent: Monday, February 09, 2009 2:59 PM
To: [hidden email]
Subject: [vwnc] Feedback on New Prerequisite Engine

 

Some time back (I can’t find it in my email) someone posted a note about the new prerequisite engine.  I’ve been trying to use it, and wanted to provide some feedback.

 

The Good News:

 

  1. It’s very fast – so fast that it’s done almost before you remove your finger from the mouse.  That’s an amazing improvement.
  2. For the most part, it’s accurate.  Combine that with its speed and this is a very useful tool indeed.

 

The Not-So-Good News:

 

  1. I think you need to be able to remove any prerequisite because sometimes the derivation thinks there’s a dependency when there really isn’t.  For example, we have a lot of GemStone and Opentalk client and server code in our development image.  A dependency may be “computed” between a client code package sending a message to the server code package.  This is not a valid dependency because of the forwarding nature of proxies. 
  2. Prerequisites that are determined solely by literal bindings (specifically, #{…}), should be ignored or mark the dependency as optional.  That’s because literal bindings tend to be weak references used to check whether something is loaded before actually using the particular object.  I’m not sure, but it may mean that the derivation of a dependency may need several possible states which “escalate” to the strongest type of reference.  This may complicate message send derivations above.  In fact, should message send derivations, even if they are only found in a single package, be considered “weak” (optional) dependencies?
  3. Duplicate removal appears to be incomplete or inappropriately depth-limited.  We have a number of packages that override or extend Opentalk-HTTP or -SOAP, but the computed dependencies show them, plus -Core, -Core-support, and -Prerequisites.  Since -SOAP requires -HTTP which requires the other, only the top-most should be left after duplicate removal.
  4. The “reduce to bundles” option could use some secondary switches.  If you turn on the reduction, you get the bundle that is the most “inclusive.”  What I think you really want is the one that has the most “containment.”  We have a top-level development bundle that loads everything by prerequisite, having no contents, yet when we turn on this switch, universally our dependencies compute to this one bundle rather than the actual containing bundle(s).  I’d like to suggest the following:
    1. I think bundle dependencies should only resolve to those that actually contain dependent packages and never to those that might reference them through other inclusion.  If you want to take into account inclusion, that should be a separate option.  I think this is independent of but related to duplicate removal.
    2. I think you need to be able to select whether a computed prerequisite to a bundle is the nearest (least inclusive) or farthest (most inclusive) bundle that actually contains a prerequisite package.  This would affect only bundles with depth > 1 (that is, bundles of bundles of arbitrary depth).
    3. For this last switch, I think you need to be able to set it differently for package or for bundle prerequisite computation.  For packages, I usually want things to reference other packages, but for bundles, I usually want things to reference bundles.  There are cases where I want things to reference peers of the same depth.
    4. Because the low-level computation is to packages, I think you need a switch to control how computation works in the presence of parcels that have bundle structure, or at least be able to “mark” certain parcels as being “atomic” – that is, resolution always is to the top-most bundle.  This would support, for example, loading the GemStone client code, which is three parcels [bundles] rather than 20-odd packages.  Because they’re loaded from a parcel, you can’t even find the individual packages to load unless you do reference the bundle.
    5. If these aren’t feasible, and even if they are, I think it would be nice to be able to select various computed prerequisites and have a menu item that would replace them with their [common] parent containing bundle or the top-most including bundle.

 

Great job!

 

Cheers!

 

Tom Hawker

Senior Framework Developer

Home

+1 (408) 274-4128

The Environment:

We take it personally

Office

+1 (408) 576-6591

Mobile

+1 (408) 835-3643

 

IMPORTANT NOTICE
Email from OOCL is confidential and may be legally privileged.  If it is not intended for you, please delete it immediately unread.  The internet cannot guarantee that this communication is free of viruses, interception or interference and anyone who communicates with us by email is taken to accept the risks in doing so.  Without limitation, OOCL and its affiliates accept no liability whatsoever and howsoever arising in connection with the use of this email.  Under no circumstances shall this email constitute a binding agreement to carry or for provision of carriage services by OOCL, which is subject to the availability of carrier's equipment and vessels and the terms and conditions of OOCL's standard bill of lading which is also available at http://www.oocl.com.

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc