Re: More on meta-ness (long)

Will Partain <[email protected]> Tue, 19 Mar 2002 10:44:06 +0000
Newsgroups gmane.comp.sysutils.ark.devel
Message-ID <[email protected]>
I want to chip in a thought or two, keying off Jonathan H's
old message; but quite relevant to Daniel H's recent poking...

Parenthetical remark first:

> So I've got a new syntax for 'once-per':
> 
>     <foo>
>         <code once-per="host:ALL"> ... </code>
>     </foo>

Could that be changed to (I don't know) host=.:ALL, simply because
<team>:<thing> has been a "long" way to name a thing for a while...?

I am wondering if our "push"/"pull" `problems' do not stem
from our `virtue' of "site-at-a-time thinking".  Our goal
has always been to have a notation that is good for
describing a *site*, not just a single thing (host,user,
...)

So when we have

   <foo><code ...>some code here</code></foo>

we say "execute the code wherever required to make 'foo'
true for the whole site", and the once-per=, proxy-hosts and
all that are ways to make the process sane.  (e.g. to do a
compile just once for a platform, rather than on every
host-instance of that platform).

Tying in with what Jonathan's been saying: what's so special
about hosts for making something right "for a whole site"?
If I have hosts, users, websites, and routers as "things",
should the semantics not be "execute the code across as many
hosts, users, websites and routers as required to make 'foo'
true for the whole site"?

Put slightly more formally, if I have things of type A, B,
C, ..., Z, and 'foo' is a field in a type A thing, then
forall B, C, ... Z, (note other A's omitted) make sure that
'foo' is true.  (Waves hands furiously...)

Aside from the possibility of making things run even slower
(every time we look at a field, we have to wander across
*all other objects* seeing if there's something to be
done...), we still have at least one major horribleness,
which we currently have with non-code-valued things:

   <foo>
   <constraint><host-spec> hostA </host-spec></constraint>
   <string>I am String A</string>
   </foo>

   <foo>
   <constraint><host-spec> hostB </host-spec></constraint>
   <string>I am String A</string>
   </foo>

At present, if you write thing.foo(), it's pretty random
which value you'll get.  I wish we could define this problem
away.

(Note to scared readers: don't let these ruminations scare
you -- I am actually *pretty happy* with present ARK
semantics/behavior.  But I can't resist the hunt for
something Quite a Bit Better.)

Will