Nicolas Guillet: Wenn .Net, dann C#
Artikel erschienen in Swiss IT Magazine 2001/23
Die "beste" Programmiersprache gibt es nicht, nur eine beste Programmiersprache für einen bestimmten Job. Mit C# will Microsoft eine breite Palette unterschiedlichster Aufgaben abdecken können. C#, deren Wurzeln bei C++ und Java liegen, stellt eine echte Verbesserung gegenüber diesen beiden Programmiersprachen dar.
Zunächst fällt auf, dass es viel weniger Regeln als in C++ gibt. Ferner lassen die Möglichkeiten der Quelltext-Dokumentation JavaDoc geradezu altmodisch erscheinen. Besonders gelungen sind die sogenannten Attribute, mit denen jeder Klasse, jeder Methode, jedem Feld und jedem Event beliebige Daten zugeordnet werden können. Während des Programmablaufs eröffnen sich dadurch unglaublich vielfältige Möglichkeiten, weil auf all diese Informationen zugegriffen werden kann.
Ein grosser Nachteil von Java ist die Semantik der Parameter beim Methodenaufruf: Es ist beispielsweise nicht möglich, einen "int by Reference" zu übergeben. Alle primitiven Typen werden zwangsweise "by Value" übergeben. Die Verwendung eines Integer-Objektes hilft nichts, weil es nicht mutierbar ist. Zwar trifft letzteres auch auf C# zu, aber dank dem "ref"-Keyword können wenigstens mit primitiven Typen Werte zurückgegeben werden. Wird hingegen weder "ref" noch "out" verwendet, muss bei jedem Parameter überlegt werden, ob es sich um ein Objekt oder um einen primitiven Typ handelt: Je nachdem könnte die aufgerufene Funktion etwas daran ändern oder nicht. Ich kann nicht nachvollziehen, warum ein Programmierer sich in dieser Situation Gedanken darüber machen muss, ob er mit einem primitiven Typ oder mit einem Objekt arbeitet.
Sehr vorteilhaft für den Entwickler ist hingegen "WebMethod". Jede Methode kann damit zu einer "SOAP"-Methode für den Aufruf via Internet z.B. für einen Web Service freigegeben werden, wobei gleichzeitig ein Beschreibungstext mitgegeben werden kann. Dieser wird direkt in eine automatisch erstellte XML-Datei für WSDL (Web Services Description Language) übernommen, welche für professionelle Web Services unentbehrlich ist. Einfacher geht's kaum mehr.
Aber kein Licht ohne Schatten: Mit Java können Applets geschrieben werden, die in einem Browser relativ gefahrlos ausgeführt werden können. Microsoft setzt dagegen immer noch auf signierten Code, was zwar in der Theorie genug sicher ist, in der Praxis jedoch auf Probleme stösst. Dass sich mit C# keine Applets schreiben lassen, die in der abgeschirmten Welt eines "Sandkastens" ausgeführt werden könnten, erweist sich nicht nur wegen der Sicherheit als grosser Nachteil. Denn wer beispielsweise aus Bandbreitenüberlegungen einen, vielleicht kleinen Teil seines Codes im Browser auf dem Client ausführen möchte, ist gezwungen, die Programmiersprache zu wechseln. Der Verlust vieler Synergien ist die Folge, denn JavaScript ist dann beinahe die beste Lösung. Bei Java kann hingegen nicht nur die gleiche Sprache auf dem Client und dem Server verwendet werden, es lassen sich sogar die gleichen Klassen teilen.
Ein weiterer Unterschied zu Java: C# läuft nicht in einer Virtual Machine. Die "Intermediate Language", welche der C# Compiler generiert, muss vollständig in den nativen Code der Zielmaschine umgewandelt werden. Obwohl der Zeitpunkt dieser Umwandlung beeinflusst werden kann, ist eine VM in vielen Fällen vorteilhafter und teilweise - erstaunlicherweise - schneller. Beide Konzepte bieten die Möglichkeit, die Anzahl und Generation der Prozessoren bei der Generierung des nativen Codes zu berücksichtigen.
Alles in allem ist C# aber eine brauchbare Sprache, welche von den Möglichkeiten, der Entwicklungsumgebung und der Produktivität als Quantensprung bezeichnet werden darf, auch wenn eine gewisse Reife und Bewährung noch fehlt. Für alle, die ohnehin nur auf Microsoft-Plattformen zu Hause sind, ist C# eine ausgezeichnete Alternative zwischen der niedrigen Produktivität von C++ und Basic, welches einem nur wenig zu übersichtlichem Sourcecode zwingt. Mit C# beweist Microsoft einmal mehr seine Innovationskraft.