Article View: be.comp.programming
Article #10180Re: C, C++, C.NET (zeer lang antwoord)
From: Lazarus Lang
Date: Fri, 29 Mar 2002 22:06
Date: Fri, 29 Mar 2002 22:06
152 lines
10121 bytes
10121 bytes
"Wim" <wim1@gEeNsPaMpandora.be> wrote in message news:3ms8au0umst4jhqbt7mepgtio9mv3fdb2t@4ax.com... > Kan er mij iemand kort uitleggen wat het verschil is tussen C, C++ en > C.NET (als dat laatste al een taal is)? Pfffff, waar te beginnen ??? :) C is de oudste van de drie en bestaat al van in de jaren zeventig, alhoewel het pas echt populair geworden is tijdens de jaren tachtig. Het is een zuiver functionele taal zoals Pascal en Modula. Dat betekent dat je je programma niet opbouwt uit klassen maar alleen met functies. C++ is ontworpen in de jaren tachtig maar evolueert nog steeds (alhoewel steeds minder en minder). Het is DE meest populaire taal op dit ogenblik bij de implementatie van softwareprojecten van allerlei aard. Dat komt omdat het een echte all-rounder is. Het is een volwaardige Object Oriented taal die toch toelaat om de "bits te neuken" (zoals C). Je kan er snelle spelletjes mee maken maar ook met een hoog abstractieniveau werken en er b.v. complexe gedistribueerde softwaresystemen mee ontwerpen en implementeren. C++ is zo ontworpen dat het syntactisch bijna volledig backwards compatible met C, om de overgang van C naar C++ in de praktijk zo gemakkelijk mogelijk te maken. Dat betekent echter ook dat het nog steeds die onhandige header files hanteert voor de klasse-definities en aparte .cpp (of .cc) files voor de klasse-implementaties ! Dat is niet alleen onhandig maar ook traaaaag bij het compileren (preprocessen eigenlijk). Sinds 1995 is er Java, een van C++ afgeleide taal, die alle nuttige en meestgebruikte features van C++ heeft (alhoewel) en de backward compatibility met C bijna volledig overboord gooit zodat we nu geen last meer hebben van header files en ons niet meer rechtstreeks moeten inlaten met geheugenallocatie en -deallocatie. Dat betekent dat je je kan toeleggen op de design en de logica van je software zonder uuuuuuren te zoeken naar die obscure pointer in een van je datastructuren waarvan je het geheugen was vergeten te dealloceren. Java doet dat allemaal voor jou omdat het zelf bijhoudt wanneer een stuk geheugen niet meer gebruikt wordt en het dan zelf vrijgeeft. Java zet nog een andere belangrijke stap (vooruit ?) door niet langer processor-specifieke machinecode te produceren maar wel een soort processor-onafhankelijke machinecode, die dan door de Java Virtual Machine terplekke (tijdens het uitvoeren van het programma) wordt omgezet in de processor-specifieke machinecode. Die extra stap zorgt er natuurlijk voor dat Java programma's meestal een stuk trager zijn dan gelijkaardige programma's die in C++ werden geschreven. Het is ook mogelijk Java just-in-time te compileren naar native machinecode, maar om een of andere reden wordt niet veel gedaan, behalve bij embedded systemen. Ik weet eerlijk gezegd niet waarom. Java wordt tegenwoorig ook zeer veel gebruikt misschien wel even veel als C++ maar dan typisch voor complexe (moeilijk in C++ te ontwerpen) systemen waar performance niet van het allergrootste belang is, zoals allerlei soorten serverside software (web servers, servlet containers, Java 2 Enterprise Edition (J2EE) software, etc...) Dit brengt ons bij C# (en Managed C++). Qua syntax en structuur lijkt C# zeer sterk op Java. Microsoft heeft er echter nog een paar aardigheidjes aan toegevoegd (zoals delegates) en verschillende keywords van naam veranderd zodat het niet al tīŋŊ hard opvalt dat C# eigenlijk een doorontwikkeling is van hun eigen Java-implementatie die ze niet langer op de markt brengen. Over de politieke achtergronden en de conflicten met Sun (de ontwerpers van Java) laat ik me hier niet uit. Er is echter wel een groot technologisch verschil : C# is (in de praktijk althans) niet cross-platform zoals Java. C# draait alleen op x86 processors, alhoewel dat in theorie ook anders kan. In theorie, want Microsoft controleert C# volledig en is natuurlijk niet geneigd implementaties voor andere processors dan de x86 of zelfs operating systemen dan Windows te maken. Ze hebben echter C# wel ter standaardisatie voorgelegd aan de ECMA (een Europese standaarden- organisatie zoals de ISO, ANSI en andere). In principe is het dus mogelijk C# en de onderliggende runtime library (CLR) te implementeren op andere platformen. Dit is echter een gigantische taak die niemand behalve MS zelf voor mekaar kunnen krijgen, mijns inziens. De bovenvermelde CLR is een vergelijkbaar met de Java Virtual Machine voor zoverre ze eveneens het onderliggende processor en OS platform afschermt van de programma's die je in C# schrijft. Je programma's worden ook wel gecompileerd naar een processoronafhankelijke instructieset (MSIL genaamd) maar het grote verschil is dat je programma's de eerste keer dat ze uitgevoerd worden just-in-time (JIT) gepre-compileerd worden naar een voor jouw x86 processor optimale vorm. De machinecode is dus verschillend voor een Pentium, Pentium Pro, PII, PIII of PIV. Hierdoor valt het gebrek aan performance dat Java heeft t.a.v. C++ voor C# helemaal weg. Theoretisch is C#-code zelfs iets sneller dan C++-code, omdat je de de processor-optimalisaties nu at run-time kunnen gebeuren en altijd pertinent zijn voor jouw processor. Bij C++ dienen de programmeurs conservatieve optimalisatiekeuzes te maken op voorhand bij de compilatie. Ze kunnen geen PIII optimalisaties doorvoeren als hun software ook op een Pentium moet kunnen draaien. Het leuke aan de .net architectuur is echter dat C# maar 1 van de vele mogelijke talen is ! VB.NET is nu een bijna volwaardig alternatief voor C#, zowel op het gebied van object oriented language features als op het gebied van performance. De tijd dat VB geen volwaardige taal was, is voorbij ! Het is eerder een kwestie van syntax-voorkeur/kennis die je ertoe brengt een bepaalde taal te kiezen bij de implementatie van een .net-gebaseerd project. Ik geloof dat er intussen meer dan twintig verschillende compilers zijn voor .net waaronder de bekendste namen zijn: J# (Java for .net !!!!) Pascal.net, Cobol.net, SmallTalk.net, Eiffel.net. Bovendien kan je perfect de talen mengen! Alles wordt toch nog naar 1 gemeenschappelijke "taal" gecompileerd: MSIL. C# wordt nog niet zo heel veel gebruikt maar dat is omdat het nog zo jong is. De eerste finale versie van de .net framework sdk is immers nog maar een dikke twee maand oud. Toch zijn er al tienduizenden mensen overal ter wereld bezig met .net voor hun nieuwe projecten, omdat ze over- tuigd zijn van de technische kwaliteiten van dit nieuwe platform (EN omdat er een grote vis als Microsoft achter staat :) ). En hun aantal groeit met de dag. De meesten gebruiken uiteraard C# voor projecten, maar ver- geet die miljoenen VB-programmeurs niet die uiteraard (in eerste instantie ?) VB.NET zullen gebruiken en voor de eerste keer zullen ze zich daar niet voor moeten schamen !!! Ik ben er zelf zo eentje. Hoewel ik intussen ook met C, C++ en (recentelijk) Java vertrouwd ben, heb ik toch nog altijd een nostalgisch zwak voor die ietwat rare VB syntax, alhoewel ik moet toegeven dat C# de cleanste syntax heeft. Ik schakel ooit nog wel eens over naar C# en het leuke is: ik moet niks van mijn VB.NET code weggooien of converteren want die kan ik gewoon blijven verder gebruiken. Laat ik vooral Managed C++ niet vergeten ! Dit is de enige taal die je toelaat ook je "oude" C++ code te hergebruiken in .net projecten. Je kan dus klassieke .cpp en .h files in hetzelfde project samenzetten met .net .cpp files en ze elkaar laten aanroepen! Dit wordt de eerstkomende jaren ook een zeer populaire .net taal. :) Mijn advies (niet bindend en zonder garanties !!!!): Begin met Java, C# of C++. Alledrie zijn zeer gelijkaardig qua syntax en OO mogelijkheden maar kies afhankelijk van je voorkeuren/interesses/ professionele vooruitzichten: 1. C++ is het krachtigst (zowel OO-wise als qua performance) maar juist daardoor niet zo toegankelijk, zeker als je nog geen C kende. 2. Java is overal inzetbaar (Unix, Linux, Windows, MacOS, ...) maar wel relatief traag en de developer tools zijn verschrikkelijk rommelig en onbetrouwbaar, zeker als je al verwend bent door MS Visual Studio. 3. C# is nieuw, unproven en MS-specifiek maar wel super-sexy, snel en je hebt Visual Studio.net dat je lekker verwent ! Eens je 1 van de 3 goed kent, is het (relatief) gemakkelijk om over te stappen naar de andere, tenminste zo ondervind ik het toch. Hehe, "kort uitleggen" is een beetje mislukt, vrees ik Ik hoop toch dat je er iets aan hebt. Als er iemand mijn eventuele vergissingen wil corrigeren, graaaaaaaaag ! L2 PS: ik ben niet geinteresseerd in "religieuze" oorlogen zoals die typisch in programming newsgroups durven woeden. Ik reageer dus niet op "Awoe windows, viva linux" of omgekeerde opmerkingen. Al wat ik hier schrijf is (voor zover ik weet) technisch correct en is dus geen propaganda voor Microsoft, Java, Linux of wat dan ook! De lezer maakt zelf zijn eigen beslissingen en trekt zijn eigen conclusies.
Technical Details
Message-ID:
<hz5p8.39326$DE4.4987@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!supernews.com!nntp.cs.ubc.ca!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<3ms8au0umst4jhqbt7mepgtio9mv3fdb2t@4ax.com>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: fcea4,3cfcb2e94692f21f X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-03-29 14:06:09 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!supernews.com!nntp.cs.ubc.ca!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail From: "Lazarus Lang" <lazaruslang@yahoo.com> Newsgroups: be.comp.programming References: <3ms8au0umst4jhqbt7mepgtio9mv3fdb2t@4ax.com> Subject: Re: C, C++, C.NET (zeer lang antwoord) Lines: 154 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Message-ID: <hz5p8.39326$DE4.4987@afrodite.telenet-ops.be> Date: Fri, 29 Mar 2002 22:06:05 GMT NNTP-Posting-Host: 213.118.78.2 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1017439565 213.118.78.2 (Fri, 29 Mar 2002 23:06:05 MET) NNTP-Posting-Date: Fri, 29 Mar 2002 23:06:05 MET Organization: Telenet Internet