Op dinsdag 02 juli 2002 13:40 schreef Soultaker het volgende:
Over C# kan ik weinig zeggen, aangezien ik me er niet in verdiept heb en alleen op de hoogte ben van de basisbeginselen.
Je deed hierboven anders een uitspraak mbt de relatie tussen C# en C++ en Java. Die is dus behoorlijk op drijfzand gebaseerd zo lijkt het.
[..]
C++ bezit anders alle OO eigenschappen die Java heeft en meer. In hoeverre deze van C++ geleend zijn kan ik niet zeggen; de in C++ gebruikte OO mechanismen komen in veel andere OO talen terug. Een discussie van 'wie er eerst was' lijkt me niet zo zinnig.
Nee, want dan kom je al snel bij smalltalk e.d. uit. De in C++ gebouwde OO eigenschappen als multiple inheritence komen niet in veel talen terug, veel talen gebruiken slechts single inheritence. Polymorphism e.d. zijn geen C++ eigenschappen zodanig dat andere talen die dat ook hebben DUS C++ als voorbeeld hebben genomen, in tegendeel.
Verdere overeenkomsten zijn de sterke typering van C++, die ook in Java en (ik denk?) C# terugkomen en in andere OO talen soms achterwege gelaten wordt.
C++ is helemaal niet zo typesafe, C# daarentegen wel. In C# heb je bv geen pointers, in C++ kun je elke willekeurige pointer naar iets casten (C-style). Lijkt me niet erg sterke typering.
[..]
Daar waren inderdaad wat problemen mee, maar dat wordt steeds beter. Er zit dan ook ontzettend veel functionaliteit in. Dat een Java compiler daar minder last van heeft is niet zo vreemd, aangezien Java als taal veel beperkter is dan C++.
Onzin. De dingen die niet in C# en java zitten zijn templates, iets wat niets meer is dan een at-compiletime code generator en de reden dat de taal onbruikbaar is in veel gevallen en sommige zielen de illustere gedachte geeft superieur te zijn omdat ze de syntax voor meer dan de helft begrijpen.
Deze zaken heb je echter in geen geval nodig. Ik heb in C++ nooit 1 template nodig gehad, hoogstens gebruikt mbv de STL, maar ik blijf het gekunstel vinden. Goede classtrees zorgen ervoor dat je geen templates nodig hebt.
C#, Java en zelfs VB, hebben allemaal meer dan voldoende functionaliteit om alle mogelijke applicaties te maken. Dat geeft aan dat C++ onnodig complex is. Want de leercurve voor de complete syntaxis is dermate stijl dat het kiezen voor C++ lang niet altijd te verdedigen is, wanneer je kijkt naar concurrerende talen, zoals C# en Java.
[..]
Het gaat er meestal niet om waar iets in te maken is, (uiteindelijk is min of meer alles wel in alles te maken), maar wat het meest geschikt is voor het doel. Een taal als C++ is uitermate geschikt voor een breed scala aan toepassingen, mede doordat het een hybride taal is en dus goed te integreren valt met bestaande (veelal op C gebaseerde) API's.
C api's kun je ook heel gemakkelijk vanuit C# gebruiken. De 'C' syntax in C++ is vrij gemakkelijk te doorgronden, de echte C++ syntax, waardoor C++ voordelen kan hebben, is dat echter niet. In C++ is alles te maken, maar IMHO is het een taal die erg weinig ECHT geschikt is voor veel toepassingen. Zeker met het oog op de concurrerende talen die de developer afschermen voor onnodige truttigheid als overhead mbt references etc. In C++ schrijf je dus veel meer code terwijl dat allemaal onnodige troep is, de algoritmes zelf is waar je je mee bezig wilt houden, de rest is onnodige ballast, die zo klein mogelijk moet worden gehouden.
C++ heeft een aanzienlijk aantal voordelen ten opzichte van Java en C# (snel, zuinig met geheugen, onafhankelijk, destructors, enzovoorts) waardoor je moeilijk kunt volhouden dat het gebruik van C++ geen voordelen kan bieden.
Dat 'snel' is maar betrekkelijk. Een data-access tier com object in C++ is echt niet sneller dan zn C# tegenvoeter. Die C# tegenvoeter is echter wel in een fractie van de tijd geschreven, en simpel te lezen en dus te onderhouden. Zuinig met geheugen lijkt me niet iets wat aan een 'taal' geplakt kan worden, maar hangt puur af van de RTE. C# heeft overigens ook destructors, maar wat isdat voor voordeel?
[..]
Misschien gaat code kloppen in C# of Java sneller dan in C++. Bij een serieus project neemt de ontwerpfase echter veruit de meeste tijd in beslag, dus zal het weinig uitmaken of de implementatiefase iets langer of korter duurt.
Mensen die totaal ingeleefd zijn in C++ zijn er snel mee, de meeste mensen echter zijn dat niet en doen er schrikbarend langer over om een goed werkend programma af te leveren. Niet verwonderlijk, je moet met erg veel dingen rekening houden die buiten de functionaliteit vallen die je feitelijk moet implementeren. Je ontwerpfase duurt bij een groot project wel lang, maar met een taal die erg veel tijd kost om alle code in te schrijven, duurt de implementatiefase ook lang, de testfase duurt lang (want alle overhead code is ook met de hand geschreven!) en de onderhoudstijd is veel hoger: alleen de echte ingewijde kan doorgronden wat de programmatekst voorstelt. Bij talen als Java en C# heb je daar veel minder last van.
[Otis: terwijl C++ niet hogere snelheidswinsten oplevert etc.]
Dat is simpelweg niet waar. Om met Java vergelijkbare all-round resultaten te benaderen als in C++ zul je zo ontzettend veel moeten optimaliseren dat het veel makkelijker was geweest om gelijk C++ te programmeren.
Een COM component dat een recordset uit een database trekt door het aanroepen van een stored proc, iets doet met die recordset en dan de handel doorgeeft aan een andere layer of weer een stored proc aanroept voor verdere dataverwerking, of bv een ander com component aanroept en een transaction start, het boeit echt geen donder of je dat nu in VB doet of in C++. Een GUI bouwen in C++ is bv ook onnozel, in talen als VB ben je veel sneller klaar. Snelheidsverlies? Dacht het niet: de meeste code die ge-executeerd wordt is OS code, geen applicatiecode.
OpenGL programmeren is wellicht wel sneller in C++, alhoewel ook daar je vraagtekens moet zetten bij het geheel: een beetje goed geschreven 3D engine laat zoveel mogelijk de driver en 3d hardware de functionaliteit uitvoeren. Wat overblijft is een scenegraph die wellicht in C++ sneller is dan in bv C#, maar is dat een verdienste van C++?
Nee. Dat is een verdienste van de native compiler van C++. Het wachten is op de dag dat de C# jitcompiler's native code net zo snel is als C++ code. En ik verzeker je: die dag komt met rasse schreden dichterbij.