Konzept von .NET und C++



  • Seit mehreren Jahren programmiere ich intensiv mit dem .NET Framework. Was mir an .NET auffällt ist, dass das .NET Framework trotz der mächtigen Größe und Fülle von Klassen/Methoden/Assemblies sehr einfach zu verwenden ist. Das ist auch einer der großen Gründe, warum ich sehr an .NET hänge, weil es einfach diese Leichtigkeit für den Entwickler mitbringt und eventuelle Anforderungen (Sicherheit, UI-Design) mit sehr einfachen und tollen Konzepten löst. Einfach diese klare Struktur von Richtlinien und Konzepten macht es transparent und zu einer sehr schnell verständlichen Programmiersprache. Dieser Stil zieht sich überall durch. Um nicht weiter auf die Vorteile/Verschönungen einzugehen: Wer mal intensiv mit .NET gearbeitet hat, weiß was ich meine. Und damit nicht gleich ein Störenfried kommt: Ich möchte keine Diskussion entfachen über „.NET ist Mist, weil es Plattformgebunden ist, .NET ist Mist, weil es keinen Maschienencode erzeugt, .NET ist Mist, weil ….“. Es gibt nunmal Leute, die .NET mögen und welche nicht (genau wie bei Java).

    Vor kurzem hab ich angefangen mich intensiver mit C++ zu befassen. Mir ist schnell aufgefallen, dass die Punkte das .NET mitbringt oder so attraktiv/anziehend (Leichtigkeit, klares Design/Konzept, siehe oben) nicht in C++ vertreten ist oder nicht so präsent sind. Entweder fällt mir das nicht auf (weil ich noch Anfänger bin) oder es liegt wohl daran, dass C++ noch den Altbacken von C-Zeiten mit sich bringt. C++ ansich ist vom Kern her eine leichte Programmiersprache. C++ beabsichtigt Erneuerungen (wie z.B. C++0x) nicht direkt mit neuen Keywords zu ermöglichen, sondern mit bereits bestehenden Mitteln, die C++ On-Borad mitbringt (Beispiel wäre das auto-Keyword in C++0x). Dennoch sehe ich kein klares Konzept in der STL. Es hat nicht sowas wie einen roten Faden oder klare Linien.

    Mich würde es interessieren wie ihr es seht. Sehe ich da was mit völlig falschen Augen? Warum ist C++ nicht so .NET-like (im Bezug auf die Architektur) und warum machen es die die C++-Entwickler immer so kompliziert (Beispiel locale-Header)? An .NET sieht man die Leichtigkeit/Einfachheit.



  • Die Frage, warum C++ nicht so ist wie .NET finde ich sinnlos. C++ ist wesentlich älter und wurde für C Programmierer entwickelt. Es gab z.B. Designentscheidungen, dass C++ Programme um höchstens 5% langsamer sein durften als C. C++ ist wesentlich technischer usw. Will gar nicht mal so genau drauf eingehen. C#/.NET wurden von Grund auf neu entworfen, hatten keine Altlasten und verstecken viele Details, die C++ nicht verstecken kann/darf.

    Was die anderen Punkte angeht... Ja, ich finde auch, dass C++ recht kompliziert ist und nicht unbedingt immer elegant. Vieles ist aber schon auch elegant. Die STL grad finde ich elegant und konsequent. Vielleicht hast sie noch nicht so ganz verstanden 😉 Qt und boost sind auch schöne Frameworks. Es gibt aber auch viele hässliche Frameworks und Bibliotheken, z.B. MFC 😉 Die muss man aber zum Glück nicht benutzen. Lange Rede kurzer Sinn, wenn du die Schönheit/Elegantheit von C++ noch nicht eingesehen hast, bleib einfach noch paar Jahre dabei, dann wird sich das vielleicht ändern.



  • inc7 schrieb:

    Warum ist C++ nicht so .NET-like (im Bezug auf die Architektur)

    Weil es eine andere Sprache ist.

    inc7 schrieb:

    und warum machen es die die C++-Entwickler immer so kompliziert

    Weil

    inc7 schrieb:

    Seit mehreren Jahren programmiere ich intensiv mit dem .NET Framework.

    inc7 schrieb:

    (Beispiel locale-Header)?

    Nicht gerade mein Fachgebiet, aber könntest du da genauer auf die Vorteile von .NET eingehen?

    inc7 schrieb:

    An .NET sieht man die Leichtigkeit/Einfachheit.

    Gleiches Problem wie oben. .NET kannst du, C++ nicht. So einfach ist das, und solange du keine konkreten Beispiele bringst, kann dir auch niemand sagen "das ist in .NET halt einfacher" bzw. "nein, in C++ macht man das so".



  • Mechanics schrieb:

    Qt und boost sind auch schöne Frameworks.

    boost ist kein Framework und Qt alles andere als schön.



  • C++ ist eine programmiersprache und .NET eine framework. macht ergo es keinen sinn, beides zu vergleichen. vergleiche stattdessen C++ und C# oder boost und .NET...



  • inc7 schrieb:

    C++ ansich ist vom Kern her eine leichte Programmiersprache.

    Sag das nicht zu laut, vermutlich wirst du eher für die Aussagen gelyncht als dafür, .NET klasse zu finden 😉

    Zum Thema: die Anfänge von C++ liegen ca. 15 Jahre vor .NET und seinen Sprachen. Die wurzeln von C++ (nämlich C) liegen nochmal ca. 10-15 Jahre früher. Das .NET Framework hat es sich zum Ziel gemacht, viele der Probleme, die man sich mit C++ einhandeln kann, und die zu vermeiden in C++ Disziplin und auch Aufwand kostet, zu beseitigen. Die Einfachheit und gleichzeitige Sicherheit in vielen Bereichen sowie die große Bibliothek sind die größten Stärken von .NET-Sprachen gegenüber C++. Diese Stärken sind gleichzeitig die Schwächen gegenüber C++: Während das .NET Framework viele lowlevel-Operationen kapselt und selber verwaltet und dem Entwickler damit Arbeit abnimmt, verliert der Programmierer gleichzeitig die Kontrolle über genau diese lowlevel-Operationen, was z.B. gewisse Performanceoptimierungen und direkte Hardware-Ansteuerung weitgehend erschwert oder gar unmöglich macht.

    Es ist wie immer beim Vergleich von Programmiersprachen: bzw in dem Fall von einer Sprache und einer Sprachfamilie: Beide Sprachen haben verschiedene Zielgruppen, d.h. es gibt Dinge, die mit der einen Sprache kaum oder garnicht erledigt werden können, und es gibt Dinge, die man mit der anderen Sprache nur extrem schlecht hinkriegt. Und es gibt einen Bereich von Problemen, den man mit beiden Sprachen bearbeiten kann, wobei man aber immer Kompromisse eingeht, weil man eben nicht alles haben kann. Es gibt eben nicht "DIE" Sprache für alles 🙂



  • c#/.NET wurde nicht von grund neu entworfen.
    Als Microsoft gegen SUN im streit um die Java sprache (bzw J++) verlor, hat MS die Visual Basic Runtime in .NET umbenannt und das j++ compiler front-end mit dem VB compiler back-end verheiratet und ziemlich genau ein jahr spaeter auf den markt gebracht.
    Man hatte entsprechend mit c# anfangs nur dieselben moeglichkeiten wie VB, die ganzen libraries wurden nicht von grund auf neu geschrieben, sondern waren auch schon vorher zum grossteil in VB enthalten.
    VB ist an sich (bis auf den syntax) alles was c# auch bietet, es hat einfache, strikte speicherverwaltung (mit GC), die libs bieten fuer jede kleinigkeit hilfsfunktionen, selbst wenn jemand nicht weiss wie zwei liniensegmente geschnitten werden koennten, das ist alles mit in den libs.

    VB hatte nur leider ein sehr starkes image problem, dem wollte MS von anfang an begegnen, indem c# als die coole alternative zu java beworben wurde und VB todgeschwiegen wurde. z.b. hat microsoft den sun pet shop der eigentlich nur die einfachheit von java zeigen sollte, als benchmark fuer effizientes programmieren und laufzeit performance genommen und sun war natuerlich so dumm auf die spielchen einzugehen siehe z.B. http://www.theserverside.com/news/thread.tss?thread_id=13700

    wenn das image nicht waere, wuerden eigentlich die leute die c# lieben, VB noch weit besser finden. es gibt noch mehr sprachkonzepte wie z.B. variadic variables, man muss sich also nicht nur um den speicher weniger sorgen machen, sondern auch ueber datentypen. UI programmierung in VB war schon immer sehr gut (war in konkurenz zum borland builder) und sehr einfach zu benutzen, MS hat es nie geschaft sowas solides in c++ zu bringen.
    wenn es um UI programmierung geht, wuerde ich deswegen auch nicht nach c++ blicken und bei VB/C# und der VB-runtime bleiben, hat wirklich keinen sinn. Leute die in java/jboss arbeiten oder in alten mainframes fortran arbeiten wuerden auch nicht zu c++ wechseln.

    c++ ist in relation zu den vorher genannten ein sprach standard, es gibt viele libs, compiler, tools, IDEs die man nutzen kann und das ist es was c/c++ am meisten ausmacht. du hast die freiheit und moeglichkeiten damit alles zu programmieren, jedes geraet, jedes betriebssystem, mit wohl jeder IDE. Du hast die komplette kontrolle wenn du willst, du kannst also nicht nur "new" aufrufen um ein objekt zu erstellen, du kannst den genauen speicherbereich festlegen, du kannst zur laufzeit den typen mutieren, indem du die vtable pointer umbiegst, du kannst assembler embedden fuer das letzte bisschen performance, du kannst HPCs damit programmieren, egal ob du ein sparc,mips,fermi,knightfairy,power7,... programmieren willst, du kannst ebenso high performance http server schreiben. Du kannst sehr high level programmieren indem du autopointer, boost, usw (und es gibt sogar GCs fuer c++) nutzt und dich garnicht um die performance kuemmerst. Es gibt performance tools wie z.b. intels parallel studio oder nvidia nsight, es gibt static code analyser PVS studio usw. die wirklich das beste auf dem markt, sprach uebergeordnet, darstellen.

    Der einzige grund weshalb ich gegen propriaetere sprachen bin ist dass firmen die sie erstellt haben, auf zwang versuchen diese irgendwo durchzusetzen. Es sollte jedem selbst ueberlassen sein, welche sprache er nutzt um fuer einen server, fuer eine konsole, fuer ein handy etc. zu programmieren.
    Solange es den Firmen gut geht, wird viel versprochen (open standard, jeder kann es nutzen, stillschweigendes einverstaendniss etc.), doch dann ...

    wenn erst die Politik der verzweiflung anlaeuft, vergisst man alles was mal gesagt wurde, es ist ja eh nicht bindend. 👎



  • inc7 schrieb:

    Vor kurzem hab ich angefangen mich intensiver mit C++ zu befassen. Mir ist schnell aufgefallen, dass die Punkte das .NET mitbringt oder so attraktiv/anziehend (Leichtigkeit, klares Design/Konzept, siehe oben) nicht in C++ vertreten ist oder nicht so präsent sind. Entweder fällt mir das nicht auf (weil ich noch Anfänger bin) oder es liegt wohl daran, dass C++ noch den Altbacken von C-Zeiten mit sich bringt.

    Das wird wahrscheinlich sehr schwer zu erörtern sein, da wir hier einen bräuchten, der sowohl in C++ als auch in C# + .NET fit ist. Ich kenne mich mit dem .NET-Kram und C# nicht aus. C# stelle ich mir als Java-Klon mit ein paar netten Erweiterungen (Operator Overloading, Benutzerdefinierte "Value Types", pass-by-reference, etc) vor.

    Dass die C++ Standardbibliothek recht spartanisch und klein ist im Vergleich zu dem, was man bei Java oder C# als Standardbibliothek serviert bekommt, bezweifelt keiner.

    inc7 schrieb:

    C++ ansich ist vom Kern her eine leichte Programmiersprache. C++ beabsichtigt Erneuerungen (wie z.B. C++0x) nicht direkt mit neuen Keywords zu ermöglichen, sondern mit bereits bestehenden Mitteln, die C++ On-Borad mitbringt (Beispiel wäre das auto-Keyword in C++0x).

    "auto" ist hier kein gutes Beispiel eigentlich. Zumindest nicht dafür, was ich glaube, was Du sagen wolltest. C++ ist low-level-technisch mächtig genug, dass man sich viele Dinge, die es in anderen Sprachen als Sprachkern-Feature gibt, als reine C++ Bibliothek implementieren kann. Warum sollte man dafür extra Features im Sprachkern einbauen, wenn man es per Bibliothek genauso gut lösen kann? "auto" ist schon ein neues Sprachkern-Feature.

    inc7 schrieb:

    Dennoch sehe ich kein klares Konzept in der STL. Es hat nicht sowas wie einen roten Faden oder klare Linien.

    Ich denke, dieses Gefühl kommt daher, dass Du noch nicht besonders vertraut mit der Standardbibliothek bist.

    inc7 schrieb:

    Mich würde es interessieren wie ihr es seht. Sehe ich da was mit völlig falschen Augen? Warum ist C++ nicht so .NET-like (im Bezug auf die Architektur)

    Ohne genau zu wissen, was du mit ".NET-like" meinst, kann man das sicherlich nicht zu Deiner Zufriedenheit beantworten. Es ist auch nicht gerade förderlich dass Du hier eine Sprache (C++) mit einem Framework (.NET) vergleichen willst.

    inc7 schrieb:

    und warum machen es die die C++-Entwickler immer so kompliziert (Beispiel locale-Header)? An .NET sieht man die Leichtigkeit/Einfachheit.

    Ich kenne mich leider weder mit dem locale-Zeugs noch mit ".NET" aus.

    Stelle sicher, dass Du die Sprache C++ nicht unterschätzt, was die Unterschiede zu Dir bekannten Sprachen angeht. Ein guter C++ Stil ist schon etwas sehr eigenes. Den solltest Du Dir erstmal angewöhnen. Nachdem Du die Sprache kennengelernt hast und weißt, was sie alles so kann, kannst Du Dir das Buch "Effective C++" besorgen. Damit lernst Du, wie du die Sprache effektiv einsetzen kannst, wie schon der Name treffend vermittelt. Wenn Du dann immer noch kein "Konzept" der Standardbibliothek erkennen kannst, könntest Du ja mal in "The C++ Standard Library - A Tutorial and Reference" reingucken.



  • An den Programmiersprachen hat sich doch seit den 1950er Jahren nichts geändert. Alle haben Bedingungen, Schleifen, Aufrufe usw.

    Dann haben Sprachen unterschiedliche Paradigmen, wo sie sich unterscheiden können. Also Procedural, Objektorientiert, Funktional usw.

    Was der grundlegende Unterschied zwischen .NET (und seinen Sprachen) und C++ für mich ist, ist die Resourcenverwaltung! Ob ich jetzt die Sprache C++ oder C# programmiere, ist eigentlich unerheblich. Aber für mich ist die Resourcen-Handhabung nicht egal. Das ist der Hauptunterschied zwischen den beiden, in meinen Augen.



  • rapso schrieb:

    c#/.NET wurde nicht von grund neu entworfen.
    Als Microsoft gegen SUN im streit um die Java sprache (bzw J++) verlor, hat MS die Visual Basic Runtime in .NET umbenannt und das j++ compiler front-end mit dem VB compiler back-end verheiratet und ziemlich genau ein jahr spaeter auf den markt gebracht.

    Sry, aber da würd ich jetzt wirklich gern eine Quelle sehen, denn das hat absolut mit Nichts zu tun was ich je zu wissen glaubte. Nichtmal ansatzweise...

    Das alte VB basierte afaik auf ActiveX/COM und ist mit VB.Net in keiner Weise vergleichbar. VB.Net ist am Ende des Tages nichts anderes als eine alternative Syntax für C# mit gewissen Ähnlichkeiten zum alten VB und sein Zweck war es, den damals sehr zahlreichen VBlern den Umstieg auf .NET schmackhaft zu machen.
    .Net ist vielleicht im Geiste der Nachfolger von VB, aber zusammen mit C# von Grund auf neu entwickelt.



  • dot schrieb:

    Sry, aber da würd ich jetzt wirklich gern eine Quelle sehen, denn das hat absolut mit Nichts zu tun was ich je zu wissen glaubte. Nichtmal ansatzweise...

    Ja, würde ich auch gerne sehen. Zumal es in VS 2002 und 2003 ja noch J#.net als Nachfolger von J++ gab.

    An C# waren, neben seinem Erfinder, noch einige andere vorherige Delphi-Entwickler beteiligt.



  • nn schrieb:

    An C# waren, neben seinem Erfinder, noch einige andere vorherige Delphi-Entwickler beteiligt.

    Redest du greade von Anders Hejlsberg, der von Borland nach Microsoft gegangen ist, denn andere Leute waren nie in Erwähnung?



  • Ja,

    er arbeitet mit seinem Team ja gerade am Projekt Roslyn, das den bisherigen VB und C#-Compiler ersetzen soll:
    http://channel9.msdn.com/Tags/anders+hejlsberg
    D.h. die beiden bisher getrennten Codelinien von VB und C# werden erst jetzt zusammengeführt, was stark gegen die obige Aussage spricht.

    Ein anderer Ex-Borländer der mir jetzt spontan einfällt ist Charly Calvert, von dem habe ich noch ein Buch zu C++ Builder 3, danach war er jahrelang im C# Team von MS.



  • 314159265358979 schrieb:

    Mechanics schrieb:

    Qt und boost sind auch schöne Frameworks.

    Qt alles andere als schön.

    Was ist an Qt unschön? Qt ist der Grund, wieso viele Programmierer immer noch mit C++ arbeiten. Hast du überhaupt schonmal Anwendungen mit Qt erstellt? Das nimmt dir einen Haufen Arbeit ab.



  • Hacker schrieb:

    Was ist an Qt unschön?

    3 Buchstaben: m o c



  • dot schrieb:

    Hacker schrieb:

    Was ist an Qt unschön?

    3 Buchstaben: m o c

    Ja, Meta-Object Compiler. Ich muss zwar ein moc-Programm schreiben, damit ich nicht gleich wieder in der Konsole rumhämmern muss, wenn ich bspw. einen neuen Slot erstelle, aber sonst hab ich noch nix bemerkt. Aber dann sag schnell, damit ich noch rechtzeitig umsteige.



  • dot schrieb:

    Hacker schrieb:

    Was ist an Qt unschön?

    3 Buchstaben: m o c

    Jein. Technisch vielleicht unschön, finde ich aber eher nebensächlich. Die API an sich finde ich aber sehr sauber und elegant und auch mächtig. Auf jeden Fall um Welten schöner, als alles was ich bis dahin in C++ benutzen musste. Ob du damit arbeiten willst oder nicht, ist natürlich deine Sache, wenn du mit was anderem besser zu Recht kommst, nur zu.



  • Was gibt's da groß zu sagen, die Tatsache dass er existiert sagt doch schon alles?

    Nichts desto trotz ist Qt wohl so ziemlich die beste derartige Library die es für C++ gibt...leider...



  • dot schrieb:

    Nichts desto trotz ist Qt wohl so ziemlich die beste derartige Library die es für C++ gibt...leider...

    Mechanics schrieb:

    dot schrieb:

    Hacker schrieb:

    Was ist an Qt unschön?

    3 Buchstaben: m o c

    Jein. Technisch vielleicht unschön, finde ich aber eher nebensächlich. Die API an sich finde ich aber sehr sauber und elegant und auch mächtig. Auf jeden Fall um Welten schöner, als alles was ich bis dahin in C++ benutzen musste.

    Das ist genau was ich meine. 👍



  • dot schrieb:

    Was gibt's da groß zu sagen, die Tatsache dass er existiert sagt doch schon alles?

    Vielleicht es mit Compiler Magic gleichstellen? 😃


Anmelden zum Antworten