KaPiTN
♪♪♫ wild at heart ♪♫♫♪
- Registriert
- 14 Juli 2013
- Beiträge
- 29.138
@drfuture:
Das mit dem Array war jetzt schlecht gewählt, weil das tatsächlich nur ein Unterschied in der Syntax ist und die gleichen CIL ergibt.
Aber es gibt in beiden Sprachen Features, die die andere nicht hat.
Schon ein Integer und einen String zu definieren und dann den integer dem string zu zu weisen´muß zu etwas unterschiedlichem CIL führen, weil in C# der Integer ein Wert zugewiesen werden und eine Methode aufgerufen werden muß, die den Int in ein string castet.
Ein einfacheres Beispiel dürfte es nicht geben, aber bereits hier gibt es Abweichungen, weil VB automatische Initialisierung und implizite Typumwandlung hat, C# aber nicht.
Das soll jetzt kein kleinliches Korinthenkacken sein, weil es ja schließlich irgendwo noch ähnlich aussieht.
Vielmehr geht es mir darum dem Versprechen zu mißtrauen, unter .NET könne jeder die Sprache seiner Wahl wählen für das Projekt, weil letztendlich käme ja der gleiche Zwischencode heraus.
Das ist jetzt fast 15 Jahre her, ich weiß nicht mehr welche Effekte damals aufgetreten sind, aber wir haben den VB Code portiert, weil verschiedene, mal aus VB und mal aus C# heraus erzeugte Programmteile, zusammen nicht zuverlässig die erwarteten Resultate lieferten.
Das mit dem Array war jetzt schlecht gewählt, weil das tatsächlich nur ein Unterschied in der Syntax ist und die gleichen CIL ergibt.
Aber es gibt in beiden Sprachen Features, die die andere nicht hat.
Schon ein Integer und einen String zu definieren und dann den integer dem string zu zu weisen´muß zu etwas unterschiedlichem CIL führen, weil in C# der Integer ein Wert zugewiesen werden und eine Methode aufgerufen werden muß, die den Int in ein string castet.
int s=0;
string w;
w = s.ToString();
_______________________
[0] int32 s,
[1] string w
)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldloca.s s
IL_0005: call instance string [mscorlib]System.Int32:
oString()
IL_000a: stloc.1
IL_000b: ret
string w;
w = s.ToString();
_______________________
[0] int32 s,
[1] string w
)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldloca.s s
IL_0005: call instance string [mscorlib]System.Int32:

IL_000a: stloc.1
IL_000b: ret
Dim s As Integer
Dim w As String
w = s
________________________
[0] int32 s,
[1] string w
)
IL_0000: nop
IL_0001: ldloc.0
IL_0002: call string [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions:
oString(int32)
IL_0007: stloc.1
IL_0008: ret
Dim w As String
w = s
________________________
[0] int32 s,
[1] string w
)
IL_0000: nop
IL_0001: ldloc.0
IL_0002: call string [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions:

IL_0007: stloc.1
IL_0008: ret
Ein einfacheres Beispiel dürfte es nicht geben, aber bereits hier gibt es Abweichungen, weil VB automatische Initialisierung und implizite Typumwandlung hat, C# aber nicht.
Das soll jetzt kein kleinliches Korinthenkacken sein, weil es ja schließlich irgendwo noch ähnlich aussieht.
Vielmehr geht es mir darum dem Versprechen zu mißtrauen, unter .NET könne jeder die Sprache seiner Wahl wählen für das Projekt, weil letztendlich käme ja der gleiche Zwischencode heraus.
Das ist jetzt fast 15 Jahre her, ich weiß nicht mehr welche Effekte damals aufgetreten sind, aber wir haben den VB Code portiert, weil verschiedene, mal aus VB und mal aus C# heraus erzeugte Programmteile, zusammen nicht zuverlässig die erwarteten Resultate lieferten.