On Sat, Jul 27, 2013 at 1:27 PM, David Jeske <[email protected]> wrote:

> below are some brainstorms. terrible names for communication purposes
> only..
>
> NoThreadSpawn - does not create any OS level threads
>

If those threads survive to escape the call, it's an escape. If they are
all cleaned up before the thread is done, why is this any business of the
caller? What is the real-world concern?

I can see uses for this. What I'm really trying to get at is whether this
wants to be an effect or whether the real thing we want is to be able to
type the fact that access to a given [graph of] object[s] is unique (i.e.
non-concurrent).


> NoRingSwitch - does not call any kernel-call
>

Again, why is this any business of the caller? What is the real-world
concern?


> NoBlock - does not call any blocking kernel calls
>

I don't think this one is meaningful without NoPreempt. Can you give a
real-world use case?


> I'm tempted to add:
>
> NoGlobals - does not depend on any static module global region/BSS -- is
> this the same as NoDetect?
>

Not quite. The only reason to preclude dependence on globals is isolation.
It is sufficient to preclude dependence on *mutable* globals. If *nobody* can
mutate a global, then that global is for all intents and purposes a
literal, and there's no real reason to be concerned about it.

Here's another potentially interesting one, thought the verification system
it implies is frightening:

  terminating - procedure, when called, is guaranteed to terminate


I can see strong uses for several of these in very peculiar codes. Most of
them don't strike me as general enough to warrant promotion into
language-supported effects. Might be better to handle some of these with
attributes and an offline checker.

shap
_______________________________________________
bitc-dev mailing list
[email protected]
http://www.coyotos.org/mailman/listinfo/bitc-dev

Reply via email to