tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: UVM typedef struct
In message <20090811074826.GA16058%netbsd.org@localhost>, David Holland writes:
>If you don't know whether it's a pointer, you can't use it correctly,
>except in a very limited set of cases for very simple APIs. You get
>bitten by both memory management and sharing.
True.
>Consider:
>
> silly_t foo, bar;
>
> foo = get_silly_thing();
> bar = foo;
> change_silly_stuff(foo);
> /* Ok, at this point, has bar been changed? Guess away. */
> /* And for that matter, is bar even valid any more? */
>
>If you're coding in Haskell, where nothing is mutable and everything
>is garbage-collected, you can genuinely do without this distinction.
>But most people don't want to code in Haskell.
Let's say we commit to you that, definitely, silly_t is a pointer.
Do you now know, without checking the API docs, whether or not bar is
valid? Well, uhm. No. (And if the function is a function-like macro,
you don't even know that foo and bar are still equal.)
Okay, but what if we say that, for sure, silly_t is not a pointer, but an
opaque non-pointer object. Now do you know? ... Well, actually, you still
don't know, because it could be that silly_t is a structure CONTAINING at
least one pointer. In which case bar might well now contain an invalid
pointer, or a pointer to an obsolete object, or... well, we just don't know.
So in short, if types can be opaque, you have already lost.
-s
Home |
Main Index |
Thread Index |
Old Index