d-programming-language.org
Mehrdad
wfunction at hotmail.com
Mon Jul 4 17:38:34 PDT 2011
Since I didn't see this being mentioned anywhere, I thought I'd mention
it...
On 7/4/2011 1:58 PM, Andrei Alexandrescu wrote:
> On 7/4/11 2:48 PM, bearophile wrote:
>> In this case you wrap the code in something that allows it to
>> overflow without errors, like:
>>
>> unsafe(overflows) { // code here }
>
> This approach has a number of issues. First, addressing transitivity is
> difficult. If the code in such a scope calls a function, either every
> function has two versions, or chooses one way to go about it. Each
> choice has obvious drawbacks.
C# chooses to limit the scope to the current function, and it works
pretty well. The use is to modify the behavior of the *operators*, and
hence, there's no transitivity issue because that's just not what it's
used for.
> Second, programmers are notoriously bad at choosing which code is
> affecting bottom line performance, yet this feature explicitly puts the
> burden on the coder. So code will be littered with amends, yet still be
> overall slower. This feature has very poor scalability.
Actually, there is **NO** performance issue -- at least not in C#. In
fact, if you run this program (with or without optimizations), you will
see that they're literally the same almost all the time:
using System;
static class Program
{
static long globalVar = 0; //Make it static so it doesn't get
optimized
static void Main()
{
const long COUNT = 100000000;
for (;;)
{
var start = Environment.TickCount;
for (long i = 0; i < COUNT; i++)
checked { globalVar = i * i; }
System.Console.WriteLine("Checked: {0}",
Environment.TickCount - start);
start = Environment.TickCount;
for (long i = 0; i < COUNT; i++)
unchecked { globalVar = i * i; }
System.Console.WriteLine("Unchecked: {0}",
Environment.TickCount - start);
}
}
}
There is literally no performance issue. Ever.
Just my 2c
More information about the Digitalmars-d
mailing list