Would like to see ref and out required for function calls
Manuel
manuel at d.org
Tue Sep 11 09:50:12 PDT 2012
On Tuesday, 11 September 2012 at 08:10:21 UTC, Andrei
Alexandrescu wrote:
> On 9/11/12 1:28 AM, Manuel wrote:
>>> Citation? I'm using C# 5.0 with Visual Studios 2012 on
>>> Windows 8 right
>>> now and ref/out are still required at the call sight of
>>> functions.
>>
>> I have Visual Studio 2012 RC and can confirm, that ref and out
>> are still required even with C# 5.0 (but maybe there is some
>> compiler switch to disable this ??)
>
> Erik Meijer didn't get back to me yet about that with a link,
> but he did mention that the relaxation was only allowed for COM
> calls.
>
> Andrei
OK, i see. For COM calls that might make sense, since binary COM
modules are mostly written in C/C++ and must also not depend on
any feature of any programming language so that the calling
should be easily possible from any language. There these C#
specific annotations are of no use since you don't get any
additional safety and you just have to write more code which at
the end gains you nothing.
In general, i can understand the objections against adding these
syntax annotations at the call site. When i started programming
in C#, coming from a C++ background, i found writing these
additional annotations rendundant and annoying and a complete
waste of time.
But when you are developing in a team where you often have to
read the code written by other team members and they have to read
your code, then you really begin to see the merits. But it is
also a good reminder for yourself when you have to look or modify
code you have written a long time ago.
A colleague of mine also mentioned, that you can see "a
simulation" of the ref/out annotations using pointers /
references as an idiom nowadays in a lot of C++ code too. If a
function argument will be modified in some way you use a pointer
and const references when it won't:
e.g. if you have a function / method:
void transmogrify(const MogrifyType& a, const MogrifyType& b,
MogrifyType* out)
you would call it:
transmogrify(a, b, &c);
Using this convention throughout the code you can see at the call
site that a and b are input parameters and c will be modified.
For example the render system "pbrt" ( http://pbrt.org/ ) uses
this as an convention in their C++ code and it is explicitly
mentioned in chapter 1.5.1 "pointer or reference" in the
introduction.
More information about the Digitalmars-d
mailing list