This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: Warum mir .NET so gef��llt ..
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
... muss ich an dieser Stelle los werden, auch wenn der eine oder andere diesen Beitrag sicherlich kritisieren wird. Kein Problem, nur zu.
Aufgefallen ist einigen, dass es derzeit wenig Postings in meinem Blog gibt - zumindest wenn man den "Anfragen" via Mail Glauben schenken darf. Fakt ist, dass ich derzeit tief in einem C++ Projekt stecke und daher relativ wenig Zeit f��r Postings bleibt. Nun war ich ja noch nie der gro��e Freund von C++. Nat��rlich, die Sprache hat unbedingt seinen Wert, das will ich nicht in Frage stellen. Was mich daran jedoch st��rt sind folgende Punkte (und diese beschreiben, warum mir .NET so behagt):
1. Strings
In .NET ist es einfach. Es gibt einen Char und einen String. Der String ist ein konstanter Char-Array und das war es dann im Grunde auch schon wieder, ohne hier viel Details zu diskutieren. F��r den Entwickler absolut gefahrlos einsetzbar. Unter C++ h��tten wir dann char*, wchar_t*, char, wchar_t, std::string, std::wstring, BSTR, CComBSTR, CString usw. Hier stellen sich mir zumindest zwei Fragen:
a) Warum soviele? Jeder verh��lt sich ein wenig anders. Nehmen wir uns den BSTR als Beispiel. Hier finden SysAllocString() und SysFreeString() ein wenig Arbeit vor. Speicher muss ja reserviert und freigegeben werden. Ach, dann nehmen wir CComBSTR. Ist das gleiche und die Reservierung und Freigabe werden automatisch ��bernommen. Und Konvertierungen von String in einen anderen Typ? Unter .NET einfach. Int32.Parse(), Double.Parse() etc. Muss man als Anf��nger nat��rlich auch erst finden, aber daf��r ist es dann lesbar. Unter C++? atoi, _wtoi etc. Was das ist? Ganz easy, ANSI To Integer und Wide Char to Integer (also Unicode).
b) Warum die Unterteilung in ANSI-Strings und Unicode-Strings? Das Betriebssystem arbeitet seit Windows NT intern ohnehin nur mit Unicode. Daher ist es recht sinnlos, diese in ANSI zu konvertieren und dann wieder nach Unicode usw.
2. Syntax - Fingerkr��mpfe
Unterschiedliche Delimiter f��r Namespaces, Methoden, Pointer find ich im Grunde ja nicht so schlecht. Schlie��lich will man ja auch wissen, womit man arbeitet. Aber muss es :: sowie -> oder aber nur . sein? Der Doppelpunkt geht ja noch, aber -> wird dann schon etwas anstrengend mit der Zeit. Ein entsprechender Entwickler wird seinen Pointer ohnehin pMyPointer benennen (die Betonung liegt hier am kleinen p). Die Namespaces selbst, sollte ohnehin bekannt sein, also warum nicht auch nur . verwenden? Naja, man m��chte ja mehr und kompliziert tippen. Erinnert mich irgendwie an Perl ;-)
3. Fehlende Standard-Libraries
C++ gibt es seit 1979, zumindest liegen in diesem Jahr die Anf��nge durch Bjarne Stroustrup. Viel hat sich seitdem getan, viele Libraries kamen hinzu, aber warum beispielsweise keine Library f��r Regular Expression? Ja, CAtlRegExp w��re ein Beispiel aus der ATL, aber das ��hnelt auch mehr einem Krampf als einer guten Regular Expression Library. Eigentlich ein Standard-Werkzeug f��r jeden Entwickler findet man beim Thema C++ hier eine hervorragende Auswahl: Boost, GRETA und pcre. Und alle haben ihre Macken.
4. Void* / Object
Unter .NET gibt es den Typ object, der die Grundlage f��r alle Objekte bildet. Mittels der Methode getType() bekommt man ��berall auch ganz nett heraus, um welchen Typ es sich wirklich handelt. Wei�� man unter C++ nicht genau welchen Typs daherkommende Daten sind, stopft man sie in einen void Pointer. Gut. Soweit klar. Und jetzt? Keine Info dar��ber ob da jetzt ein Date, String, int, double etc. drinnen steckt. Zumindest ist mir dazu keine M��glichkeit bekannt. Wer also eine Idee hat, bitte einen Kommentar hinterlassen.
Einige Punkte f��r diese Liste h��tte ich noch, jedoch m��chte ich meine Leser nicht ��berstrapazieren. Mein Conclusio ist die Freude dar��ber, dass ich mich bald wieder voll und ganz .NET hingeben kann.
PS: Ich m��chte nat��rlich darauf hinweisen, dass mir die grundlegenden Unterschiede zwischen C++ und .NET durchaus bewusst sind, ebenfalls auch die Einsatzgebiete. Nicht, dass ich falsch verstanden werde.