<html>
<head>
<title>asdf system dependency use cases</title>
</head>
<body>
<hr />
<p>simple dependency intends this behaviour:
<table>
<tr><th><th colspan="2">component status</th><th rowspan="2" valign="top">effect</th></tr>
<tr><th>expression</th><th>component a</th><th>component/feature b</th></tr>
<tr><td>a (:depends-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">present</td><td>(operate b), (operate a)</td>
<tr><td>a (:depends-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">absent</td><td>error</td>
<tr><td>a (:depends-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">present</td><td> error</td>
<tr><td>a (:depends-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">absent</td><td> error</td></tr>
</table>
</p>
<hr />
<p>given the code in parse-component-form, :weakly-depends-on would appear to effect this behaviour:
<table>
<tr><th><th colspan="2">component status</th><th rowspan="2" valign="top">effect</th></tr>
<tr><th>expression</th><th>component a</th><th>component/feature b</th></tr>
<tr><td>a (:weakly-depends-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">present</td><td> (operate b), (operate a)</td>
<tr><td>a (:weakly-depends-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">absent</td><td> (operate a)</td>
<tr><td>a (:weakly-depends-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">present</td><td> error</td>
<tr><td>a (:weakly-depends-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">absent</td><td> error</td></tr>
</table>
</p>
<hr />
<p>there are cases, where it is useful to cause a third behaviour:
<table>
<tr><th><th colspan="2">component status</th><th rowspan="2" valign="top">effect</th></tr>
<tr><th>expression</th><th>component a</th><th>component/feature b</th></tr>
<tr><td>a (:contingent-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">present</td><td> (operate b), (operate a)</td>
<tr><td>a (:contingent-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">absent</td>
<tr><td>a (:contingent-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">present</td><td> error</td>
<tr><td>a (:contingent-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">absent</td><td> error</td></tr>
</table>
</p>
<hr />
<p>
perhaps there are others. this one is useful when building a system where the components are contingent on the runtime and/or o/s.
</p>
</body>
</html>