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