Summor i C#

C# är Microsofts svar på (variant av) Java och C++. Här följer ett citat från Datateknik, september 2000:

När Microsoft inte fick göra som de ville med Java skapade företaget ett eget programspråk, C# ... ett alternativ för programmerare som tycker att C++ är för komplicerat men att Java saknar efterbrännkammare för hög effektivitet när situationen kräver det.
...
Första versionen av Windows 2000 sägs innehålla mer än 65000 programfel. En hel del av buggarna kan skyllas på att C++ erbjuder många möjligheter till misstag.

Om Microsoft har lyckats med språket tänker jag inte uttala mig om, det finns flera jämförelser av C++ , Java och C# på nätet (leta t.ex. efter comparsion c# i google så hittar Du många sidor), utan jag tänker bara göra några enkla tester med flyttal.

Den som vill testa C# kan hämta (gå till  .NET Framework och klicka på Get the .NET Framework SDK under RELATED LINKS) ett paket från Microsoft med en kommandoradsorienterad kompilator, csc. Det finns en GUI-variant också men den kostar många $. Man behöver nu inte köra kompilatorn i ett DOS-fönster (DOS-prompt, kommandotolken) om man inte vill. Jag har Cygwin (väsentligen Red Hat GNU unix) ovanpå Windows XP. Jag har kopierat min X-miljö från min arbetsstation till Cygwin och har då tillgång till X (Cygwin/XFree86). Så jag kan köra csc som vilken unix-kompilator som helst.

Så här kan det se ut (% är prompten i tcsh):

% cat Summor.cs                        Lista filen
public class Summmor
{
   public static void Main()
   {
     float s;

     s = 0.0f;                      // f måste vara med
     for(int k = 100; k > 0; k--)   // bara till 100
       s += 1.0f / k;               // f måste vara med

     System.Console.WriteLine("s = " + s.ToString("G8"));  // G8 är ett format

     s = 0.0f;
     for(int k = 1; k <= 100; k++)  // bara till 100
       s += 1.0f / k;               // f måste vara med

     System.Console.WriteLine("s = " + s.ToString("G8"));
   }
}

% csc Summor.cs                     Kompilera, skapar Summor.exe
Microsoft (R) Visual C# .NET Compiler version 7.00.9466
for Microsoft (R) .NET Framework version 1.0.3705
Copyright (C) Microsoft Corporation 2001. All rights reserved.

% Summor                            Exekvera
s = 5,187377
s = 5,1873779

csc kompilerar källkodsfilen direkt till en exe-fil, men även C# håller sig med något som liknar Javas bytekod. Den kallas MSIL (Microsoft Intermediate Language) och den kan produceras från exe-filen med ildasm, (MSIL disassembler). Jag lyckades ej skapa MSIL från csc dock. Så här ser den del av MSIL-koden ut som svarar mot den första loopen, jag överlåter avkodningen till Dig.

//  Microsoft (R) .NET Framework IL Disassembler.  Version 1.0.3705.0
//  Copyright (C) Microsoft Corporation 1998-2001. All rights reserved.


    IL_000b:  /* 06   |                  */ ldloc.0
    IL_000c:  /* 22   | 0000803F         */ ldc.r4     1.
    IL_0011:  /* 07   |                  */ ldloc.1
    IL_0012:  /* 6B   |                  */ conv.r4
    IL_0013:  /* 5B   |                  */ div
    IL_0014:  /* 58   |                  */ add
    IL_0015:  /* 0A   |                  */ stloc.0
    IL_0016:  /* 07   |                  */ ldloc.1
    IL_0017:  /* 17   |                  */ ldc.i4.1
    IL_0018:  /* 59   |                  */ sub
    IL_0019:  /* 0B   |                  */ stloc.1
    IL_001a:  /* 07   |                  */ ldloc.1
    IL_001b:  /* 16   |                  */ ldc.i4.0
    IL_001c:  /* 30   | ED               */ bgt.s      IL_000b


Back