On Tue, 2007-07-10 at 17:24 +0200, Neal H. Walfield wrote: > > At Sun, 08 Jul 2007 00:03:10 -0400, Jonathan S. Shapiro wrote: > > > If we choose to adopt the "return the return value" convention, it is > > > still necessary to handle capability returns specially in C, because the > > > caller must say where the incoming capability is to be stored (we cannot > > > get compiler help for this from an unmodified compiler). > > > > How is this different from returning a struct? There is a general > > rule of thumb not to return large structs from function calls. > > Instead, the convention is for either the function allocates memory or > > the caller to pass a pointer to a block of allocated memory. > > You appear to me to have implied that return by value is somehow > normal and that return by reference is not. My observation was that > structs are often returned by reference, not by value.
You are mistaken. It is certainly true that *users* often write procedures in such a way that structures are returned by reference. However, from the compiler perspective the declared return type in this case is always "struct *", which is a *scalar* that is returned *by value*. All parameter and return value passing in C is by value. It is possible for users to construct by-reference conventions on top of this, but the compiler has no knowledge of this. > I claimed that > if you want to generally return structs by value, then there are > scenarios where you also need to modify the compiler--just like when > returning capabilities by value. Well, you're going to have to give an example on the struct thing, because from the C compiler perspective structs are passed and returned by value, and have been for almost 30 years now. I'll respond on the capability thing separately, since I think the issues are diverged. shap _______________________________________________ L4-hurd mailing list [email protected] http://lists.gnu.org/mailman/listinfo/l4-hurd
