|
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>
===========================================================
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:
- It’s
very fast – so fast that it’s done almost before you remove
your finger from the mouse. That’s an amazing improvement.
- 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:
- 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.
- 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?
- 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.
- 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:
- 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.
- 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).
- 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.
- 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.
- 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
|