September 07, 2012
I've been looking at migrating a reasonably large ship motion library (tens of thousands of lines) from C# to D.  I've become quite enthusiastic about D, and most of my problems have been relatively minor (e.g., inconsistent bugs with std.container.Array, would like orange serialization to give me an error telling me I didn't register a class before calling serialize).  I suggest that the language require ref and out when calling functions, as C# requires.  This would make code easier to understand, and would also eliminate the problem I had when the wrong function from the following choices was mistakenly called:

parseLineInts(string text, int positionStart, out int j0, out int j1)

parseLineInts(string text, out int j0, out int j1, out int j2)

I note that the second function calls another function as follows:
int positionStart = 1;
parseLineInts(text, positionStart, j0, j1, j2);

I look forward to seeing feedback from D experts.  This is the only significant change that I could think of recommending for the language.

September 07, 2012
On 9/7/12 1:34 PM, Kevin McTaggart wrote:
> I've been looking at migrating a reasonably large ship motion library
> (tens of thousands of lines) from C# to D. I've become quite
> enthusiastic about D, and most of my problems have been relatively minor
> (e.g., inconsistent bugs with std.container.Array, would like orange
> serialization to give me an error telling me I didn't register a class
> before calling serialize). I suggest that the language require ref and
> out when calling functions, as C# requires. This would make code easier
> to understand, and would also eliminate the problem I had when the wrong
> function from the following choices was mistakenly called:
>
> parseLineInts(string text, int positionStart, out int j0, out int j1)
>
> parseLineInts(string text, out int j0, out int j1, out int j2)
>
> I note that the second function calls another function as follows:
> int positionStart = 1;
> parseLineInts(text, positionStart, j0, j1, j2);
>
> I look forward to seeing feedback from D experts. This is the only
> significant change that I could think of recommending for the language.

Actually the darndest thing is that C# has retired the syntax in 5.0 (it used to be required up until 4.0). Apparently users complained it was too unsightly.

Andrei


September 07, 2012
On 9/7/12, Andrei Alexandrescu <SeeWebsiteForEmail@erdani.org> wrote:
> Actually the darndest thing is that C# has retired the syntax in 5.0 (it used to be required up until 4.0). Apparently users complained it was too unsightly.

If you like implicit ref then why did you choose to use pointers when implementing std.getopt?
September 07, 2012
On 9/7/12 4:55 PM, Andrej Mitrovic wrote:
> On 9/7/12, Andrei Alexandrescu<SeeWebsiteForEmail@erdani.org>  wrote:
>> Actually the darndest thing is that C# has retired the syntax in 5.0 (it
>> used to be required up until 4.0). Apparently users complained it was
>> too unsightly.
>
> If you like implicit ref then why did you choose to use pointers when
> implementing std.getopt?

At the time ref variadics weren't implemented. I should also add I joined D after ref was there. I don't have strong feelings one way or another.

Andrei
September 07, 2012
On Friday, September 07, 2012 13:34:02 Kevin McTaggart wrote:
> I look forward to seeing feedback from D experts.  This is the only significant change that I could think of recommending for the language.

Regardless of the pros and cons of requiring explicit ref and out, it would break a lot of code if we started requiring it, so I don't think that there's any chance of such a change being made at this point. If/When we create D3 (which is years off), it could be discussed and possibly changed then, but I think that it's clearly too large a change for D2 at this point.

- Jonathan M Davis
September 07, 2012
Am 07.09.2012 16:38, schrieb Andrei Alexandrescu:
> Actually the darndest thing is that C# has retired the syntax in 5.0 (it
> used to be required up until 4.0). Apparently users complained it was
> too unsightly.

reference link?
September 07, 2012
On 09/07/2012 04:38 PM, Andrei Alexandrescu wrote:
> ...
> Actually the darndest thing is that C# has retired the syntax in 5.0 (it
> used to be required up until 4.0). Apparently users complained it was
> too unsightly.
>
> Andrei
>
>

How do they deal with the increased ambiguity in overload resolution?
September 07, 2012
On 09/07/2012 05:51 PM, Timon Gehr wrote:
>
> How do they deal with the increased ambiguity in overload resolution?

Actually, it is simple. They just have to call the non-out overload
when there is no out at the call site, regardless of the actual
argument.
September 07, 2012
Andrei Alexandrescu:

> Actually the darndest thing is that C# has retired the syntax in 5.0 (it used to be required up until 4.0). Apparently users complained it was too unsightly.

Are you sure?
This page about the Visual Studio 2012 shows that ref and out are required:
http://msdn.microsoft.com/en-us/library/14akc2c7.aspx

I know they have relaxed the requirement in one case, in C#4 or something.

The idea of requiring ref/out at the all site was discussed some times in past. This idea has both advantages and disadvantages. It makes the code a bit longer, but gives the reader more information about what the call will do.

In D there are also ref at the return value, I presume this is never going to require a "ref" at the call site.

Bye,
bearophile
September 07, 2012
On Friday, 7 September 2012 at 16:46:36 UTC, bearophile wrote:
> Andrei Alexandrescu:
>
>> Actually the darndest thing is that C# has retired the syntax in 5.0 (it used to be required up until 4.0). Apparently users complained it was too unsightly.
>
> Are you sure?
> This page about the Visual Studio 2012 shows that ref and out are required:
> http://msdn.microsoft.com/en-us/library/14akc2c7.aspx

+1
« First   ‹ Prev
1 2 3 4 5 6 7
Top | Discussion index | About this forum | D home