🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #10180

Re: C, C++, C.NET (zeer lang antwoord)

#10180
From: Lazarus Lang
Date: Fri, 29 Mar 2002 22:06
152 lines
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-mail
References: <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