/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Valg af udviklingsværktøj MS vs ?
Fra : Jesper Gødvad


Dato : 15-04-01 01:36

Hej Alle.

Jeg har programmeret en del i bl.a. Pascal og Visual Basic og benytter
iøvrigt produkter som Access/jet og MS SQL-server.

Nu overvejer jeg at skifte helt til C++ og så er det jeg godt vil høre om
konkrete forskelle mellem Microsoft og (alle?) andre compilere. Jeg har
forstået at MFC kun er til MS, mens STL er en udbredt standard hos alle
andre.

Den umiddelbare fordel for mig ved at skifte til Microsoft Visual C++ er, at
jeg kan kombinere det med Visual Basic på en ganske snedig og effektiv måde,
men på den anden side ønsker jeg ikke at male mig op i et hjørne.

Hvor stor forskel er der på de forskellige versioner af C++ og er der gode
forslag til alternativer?
Er Borland Builder værd at samle på?
Er STL en udbredt standard eller er den (ved at) dø?
og
Er det et velkendt C++ problem at hver compiler har sine egne versioner af
helt banale ting så som strings ect.?

Håber nogen kan hjælpe mig med besvare et eller flere af spørgsmålene.

mvh. Jesper



 
 
Jesper Gødvad (15-04-2001)
Kommentar
Fra : Jesper Gødvad


Dato : 15-04-01 01:39

Jeg skulle måske lige tilføje at det eneste der imponerer mig ved Linux er
prisen og det derfor typisk vil være et Windows miljø jeg bevæger mig i



Mogens Hansen (15-04-2001)
Kommentar
Fra : Mogens Hansen


Dato : 15-04-01 08:44

Hej Jesper,
"Jesper Gødvad" <nope@goaway.dk> wrote in message
news:9baq76$ggk$1@sunsite.dk...
>
> Nu overvejer jeg at skifte helt til C++ og så er det jeg godt vil høre om
> konkrete forskelle mellem Microsoft og (alle?) andre compilere. Jeg har
> forstået at MFC kun er til MS, mens STL er en udbredt standard hos alle
> andre.

MFC og STL er _ikke_ sammenlignelige, bortset fra at de er C++
klassebiblioteker.

MFC er et klasse bibliotek, der har sine rødder i "Grafiske print-preview
doc-view programmer til Windows", som er blevet udvidet undervejs til også
at dække ændre Windows specifikke områder som f.eks. COM og WinSock.

MFC følger også med C++Builder. Det er dog noget bovlamt at bruge MFC sammen
med C++Builder.
Hvis man vil/skal lave MFC programmer er det eneste rimelige valg Visual
C++.

STL (eller rettere C++ Standard Library) er et ISO standardiseret
cross-platform bibliotek med containere, iteratorer og algoritmer (samt en
række andre faciliterer hvis tager hele C++ Standard Library med).
C++ Standard Library er understøttet i rimelig grad af alle seriøse
compilere - inklusiv Microsoft Visual C++ og Borland C++Builder.

Da C++ Standarden ikke indeholder en beskrivelse af hvordan man laver
grafisk brugergrænseflader (GUI), kan man ikke lave det på en
platformsuafhængig måde.
Jeg mener at situationen i dag er den at uanset hvad man gør for at lave
GUI'er i C++, så binder man sig til en enkelt leverandør og/eller platform.
Valget er således både teknisk og politisk. Hvis man indretter sig lidt
fornuftigt udgør det dog ikke noget praktisk problem.

>
> Den umiddelbare fordel for mig ved at skifte til Microsoft Visual C++ er,
at
> jeg kan kombinere det med Visual Basic på en ganske snedig og effektiv
måde,
> men på den anden side ønsker jeg ikke at male mig op i et hjørne.

Jeg vil tillade mig at stille spørgsmålstegn ved hvor snedigt og effektiv
den måde som jeg kender kombinationen af Microsoft Visual C++ og Microsoft
Visual Basic er.
Man laver noget kerne-logik i C++, som man stiller til rådighed for en
Visual Basic GUI applikation via en COM snitflade.
Ulemperne er:
* Man skal lave en del COM programmering, alene for at få det til at hænge
sammen
* COM gør installationen mere besværlig og sårbar
* COM påtrykker sig eget begrænsede type system
* COM giver mulighed for DLL-helvedet
* Man skal håndtere flere udvikling sprog og miljøer
* Det at have sin applikation delt op i flere filer (DLL og EXE) gør
installationen mere besværlig og sårbar
Personligt finder jeg det rigtigt usmart.

Hvis man i stedet bruger Borland C++Builder, med tilhørerende
klassebibliotek VCL (Visual Component Library), så får du præcis samme nemme
måde at lave brugergrænseflade som du som du kender fra Visual Basic. Man
skal ikke kæmpe med at interface flere programmeringssprog og typesystemer.
Hvis man anvender VCL skal man dog være opmærksom på at man binder sig til
C++Builder, ligesom man nødvendigvis må benytte sprogudvidelser.
Du har adgang til en stort set fuld C++ implementering (den regnes
almindeligvis for at være bedre end Visual C++).
Du kan lave dine applikationer som een file, som ikke kræver ændringer i
registry.
Jeg opfatter det som en klart overlegen måde at gøre det på.

Husk i øvrigt at MFC, COM og Visual Basic som vi kender det idag er døende.
Se Microsoft .NET hvis du vil vide hvad Microsoft vil fremover.
En af hovedmændene bag Microsoft .NET's arkitektur, det primære
programmeringssprog C# og udviklingsmiljøet Visual Studio .NET, er iøvrigt
den samme som er den oprindelige bagmand til C++Builder (eller rettere
Delphi) - nemlig danskeren Anders Hejlsberg.

>
> Hvor stor forskel er der på de forskellige versioner af C++ og er der gode
> forslag til alternativer?

For almindelig praktisk anvendelse er både Visual C++ V6 og C++Builder V5
tilstrækkelige implementeringer af C++.
Personligt oplever jeg færre problemer med overholdelsen af C++ Standarden i
C++Builder end med Visual C++.
Du kan finde en ny test af hvor compliant forskellige compilere er på C/C++
User Journal (http://www.cuj.com/).
Det kræver en del arbejde at tolke resultaterne.

> Er Borland Builder værd at samle på?

Jeg bruger den profesionelt dagligt og foretrækker den fremfor Microsoft
Visual C++.
Især i Professional og Enterprise versionerne, hvor der er et produkt der
hedder CodeGuard, som følger med.
CodeGuard er et fantastisk godt værktøj til at finde klassiske C/C++
programmeringsfejl: memory-overskrivning, memory-leak, brug af dangling
pointer etc. Det svarer til BoundsChecker og Purify etc., men jeg syntes
CodeGuard er bedre.

Microsoft Visual C++ har sine klare fordele:
* Den bliver lavet af Microsoft
* Det er den mest anvendte C++ compiler til Windows i dag
* Dokumentationen er bedre (man bør dog have adgang til MSDN uanset
hvilken compiler man anvender, når man skriver programmer til MS-Windows)
* Praktisk taget alle tredie part produkter kan bruges med den (det er
ikke tilfældet med C++Builder)
* Den genererer bedre kode
* Den har en bedre projekt-styring
* Den er nok bedre til at håndtere meget store projekter

De har begge deres særheder - naturligvis.

> Er STL en udbredt standard eller er den (ved at) dø?

Det der normalt normalt (og lidt fejlagtigt) betegnes som STL er de
container, iterator og algoritmer som er specificeret i ISO C++ Standarden
(ISO/IEC 14882:1998). Den er i væsentlig grad understøttet af alle seriøse
compilere på mange platforme.
Om den er ved at dø ? Ikke mere en C++ som sådan - så svaret må være nej.

> og
> Er det et velkendt C++ problem at hver compiler har sine egne versioner af
> helt banale ting så som strings ect.?

Ja, det er rigtigt.
I Microsoft biblioteket MFC er der klassen CString.
I Borland C++Builder biblioteket VCL er der klassen AnsiString.
Men jeg syntes at man bør undgå at benytte disse klasser, undtaget der hvor
man er tvunget til det: når man interfacer til henholdsvis MFC eller VCL.
Til streng-håndtering generelt, er man bedre tjent med at bruge klassen
"std::string" som er specificeret i ISO C++ Standarden, og som findes i alle
seriøse C++ compilere (herunder Visual C++ og C++Builder).
Lær i det hele taget at anvende C++ Standard Library - det lønner sig.
Begræns anvendelse af specielle biblioteker som MFC og VCL til de områder
hvor det er et positivt tilvalg - f.eks. GUI.

Generelt syntes jeg det er en god idé at holde så meget kode som muligt i
portabel C++.
Del applikationen ind i fornuftige (test-bare) lag: GUI, kerne-logik,
database, netværk etc.
Vær klar over hvilke afhængigheder de enkelte lag har: platform,
sprog-udvidelser etc. hvis det spiller en rolle.

Iøvrigt vil jeg anbefale dig at få fat på en god, moderne bog om C++ for at
komme igang.
Mine bud er (ikke overraskende) start med
"Accelerated C++, Practical Programming by Example"
Andrew Koenig, Barbara E. Moo
ISBN 0-201-70353-X
som jeg syntes er enestående god til at komme igang med.

Herefter kan man gå videre til den ultimative reference
"The C++ Programming Language, Special Edition"
Bjarne Stroustrup
ISBN 0-201-70073-5
eller "The C++ Programming Language, Third Edition" som er magen til,
bortset fra papirkvalitet, indbinding og pris (vær sikker på at få en udgave
der er trykt efter år 2000 - de er kendetegnet ved at have et Appendix D og
E).

Venlig hilsen

Mogens Hansen



Jesper Gødvad (17-04-2001)
Kommentar
Fra : Jesper Gødvad


Dato : 17-04-01 04:02

Hej Mogens

Mange tak for dit lange og udførlige svar, det har givet en del stof til
eftertanke.

Misforståelserne omkring STL (C++ Standard Library), VCL og MFC er afklaret.

Jeg går dog udfra at VCL og MFC har stort set samme funktionalitet, så man
(selvfølgelig) kan bruge WinSock og COM selvom man benytter Borland. Men det
er måske så MFC bibliotekerne man benytter?

Den bedre implementering af STL i Builderen opfatter jeg som en mindre
betydelig detalje hvor man i tilfælde af problemer blot programmerer en
workaround, da man alligevel ikke kan gardere sig 100%. Din pointe med en
dll-fri installation er sød musik i mine ører - jeg tager i betragtning at
VBs default installationer fylder 2 mb+ med mindre man ligefrem ønsker at
sætte sig ned og lave alting selv. Faktisk lyder det så godt at jeg kunne
finde på at vælge Builder alene af den årsag.

Kan det ikke også laves i VC?

Jeg er nemlig noget overrasket hvor mange betydelige fordele du nævner ved
Microsoft i betragtning af du selv bruger Builderen. Den bedre
dokumentation, større udbredelse og projektstyring er ting jeg selv lægger
stor vægt på.

Det jeg frygtede ved Visual C++ var, at den var en lukket MS standard a lá
FrontPage eller Java i Internet Explorer. Det synes ikke at være tilfældet.

Du skriver, at du selv foretrækker Builderen, men jeg har svært ved at se
hvorfor. Jeg skal starte på noget 'nyt' og du får det jo nærmest til at
virke åbenlyst at jeg skal vælge Visual, da det åbenbart også er de fakto
standarden.

Mht. CodeGuard kan jeg ikke undlade at nævne at jeg jo kommer jeg fra et
miljø hvor vi fortolker mens vi udvikler så vi kan rette fejlene on the fly


Dine bogreferencer er taget til efterretning og jeg har just nu bestilt den
første.
I forvejen har jeg:
Introduction to Computing using C++ and Object Technology af William H. Ford
og William R. Topp
Data Structures and Other Objects Using C++ af Michael Main og Walter
Savitch
der begge indgår i mit studie og gennemgår nogle grundlæggende elementer i
C++ men ikke kommer nærmere ind på STL.

Jeg vender lige tilbage til dit andet brev når jeg er lidt friskere...

mvh. Jesper



Mogens Hansen (17-04-2001)
Kommentar
Fra : Mogens Hansen


Dato : 17-04-01 09:54

Hej Jesper,
"Jesper Gødvad" <Xesper@goedvad.dk> wrote in message
news:9bgbh0$ir0$1@sunsite.dk...
> Hej Mogens
>
> Jeg går dog udfra at VCL og MFC har stort set samme funktionalitet, så man

Ja stort set.
VCL er blot meget mere moderne og lettere at bruge end MFC.
Jeg vil ikke råde nogen til at lære MFC idag, hvis de ikke har en _meget_
god grund til det. Det har ikke samme markedsmæssige betydning at kunne MFC
nu da Microsoft har annonceret deres .NET initiativ.
Du vil se stort set samme design i VCL, WFC (Microsoft J++
klassebiblioteket) og WinForms i Microsoft .NET, for det er alt sammen lavet
af samme arkitet: danskeren Anders Hejlberg.

> (selvfølgelig) kan bruge WinSock og COM selvom man benytter Borland. Men
det

Ja.

> er måske så MFC bibliotekerne man benytter?

Nej. Der findes VCL componenter til socket programmering og COM er godt
understøttet.
Normalt vil jeg dog bruge tredie part produkter (som ObjectSpace
www.objectspace.com eller ACE http://www.cs.wustl.edu/~schmidt/ACE.html) til
at lave socket programmering. De har netop som opgave at gøre mig uafhængig
af compiler leverandør og platform (Prøv at se hvor mange platforme ACE
findes til http://www.cs.wustl.edu/~schmidt/ACE-versions-i.html.).
Distribueret programmering laver jeg dog normalt med CORBA.

>
> Den bedre implementering af STL i Builderen opfatter jeg som en mindre
> betydelig detalje hvor man i tilfælde af problemer blot programmerer en
> workaround, da man alligevel ikke kan gardere sig 100%. Din pointe med en
> dll-fri installation er sød musik i mine ører - jeg tager i betragtning at
> VBs default installationer fylder 2 mb+ med mindre man ligefrem ønsker at
> sætte sig ned og lave alting selv. Faktisk lyder det så godt at jeg kunne
> finde på at vælge Builder alene af den årsag.
>
> Kan det ikke også laves i VC?

Jo.

>
> Jeg er nemlig noget overrasket hvor mange betydelige fordele du nævner ved
> Microsoft i betragtning af du selv bruger Builderen. Den bedre
> dokumentation, større udbredelse og projektstyring er ting jeg selv lægger
> stor vægt på.

Du har også mere brug for dokumentationen :)
Projektstyring er kun _lidt_ bedre.

>
> Det jeg frygtede ved Visual C++ var, at den var en lukket MS standard a lá
> FrontPage eller Java i Internet Explorer. Det synes ikke at være
tilfældet.

Jo, det er tildels tilfældet.
Hvis ens primære kilde til hvordan man skriver C++ programmer er Microsoft,
så vil man blive sovset ind i deres biblioteker og sprogudvidelser uden at
få nogle fordele til gengæld. Effekten er at man let bliver lukket inde.
Se f.eks. Bjarne Laursen (ikke for at hakke på ham specielt, det er meget
forståeligt hvad og hvorfor han siger som han gør) inlæg i denne gruppe i
tråden "varierende størrelse på et array i C++" den 16. april.
Jeg syntes der er andre kilder, hvor man kan lære meget bedre anvendelse af
C++ - f.eks. de bøger jeg nævnte.
Microsoft kunne f.eks. let have gjort det langt nemmere at lave COM
programmering med lidt klasse-bibliotek og en bedre IDL-compiler - i stedet
valgte de at tilføje en række overflødige sprogudvidelser.

I sandhedens tjeneste skal det siges, som jeg også har gjort, at det samme
kan lade sig gøre i C++Builder - VCL er proprietært med anvendelse af C++
sprogudvidelser. Det kan køre der hvor Borland beslutter det: Windows og
snart (?) Linux.

Jeg mener at man kan få en del af forklaringen ved at kigge på baggrunden og
historien.

Hvorfor laver Microsoft en C++ compiler ? For at tjene penge ? Nej, det er
små-penge sammenlignet med hvad de tjener på Windows og Office. Deres
primære grund er at understøtte og konsolidere deres platform. De har brug
for kontrollen. De har ringe interesse i at understøtte åbne standarder.
Hvorfor gjorde de Visual Basic til deres primære programmeringssprog for
applikationer ?

Hvorfor laver Borland en C++ compiler ? For at tjene penge ? Ja, hvad ellers
? Man kan selvfølgelig sige at de ikke er lige så gode til at tjene penge
som Microsoft.
Hvad skal der til for at Borland C++Builder har nogen berettigelse ? Hvis
den punkt for punkt _netop_ matchede Microsoft Visual C++, ville den ikke
have nogen som helst berettigelse, netop for at det er et ikke Microsoft
produkt.
Der skal være og er noget andet:
* Understøttelse af åbne standarder som f.eks. C++, CORBA, SQL
* Et bedre udviklingsmiljø (smagssag)

Hvis du går tilbage i tiden (første halvdel af 90'erne), vil du se at
Microsoft altid har været meget slæbende i deres understøttelse af C++,
hvorimod Borland traditionelt var førende (STL blev oprindeligt
implementeret med Borland c++ V4.5 - det var den eneste der kunne håndtere
templates godt nok). Borland var også banebrydende (i kraft af Anders
Hejlberg) med hensyn til udviklingsmiljøer, hvor Microsoft haltede efter.

Hvis du ser på udviklingen af Visual C++ vil du bl.a. se at navnet var et
godt marketing-tricks.
Visual Basic var blevet frigivet og havde ændret opfattelsen af hvordan man
kunne lave Windows programmer, og alle _snakkede_ om C++.
Visual C++ var et direkte misvisende navn:
* Det var ikke visuelt i den forstand som man kendte fra Visual Basic
* Det var ikke C++ som det var beskrevet i ARM (med f.eks. multiple arv,
exception, templates).
Visual C++ fik først en tilnærmelsesvis anstændig C++ implementering i V5,
og den er endnu ikke Visual (det bliver den i .NET versionen).
Det den primært gav brugerne, var en (forkert) _fornemmelse_ af at de kunne
håndtere to hotte ting nemt samtidigt: Windows programmering og C++
programmering. Husk folk kæmpede med DOS og C programmering.
Se eventuelt beskrevet i bogen "Dynamics of Software Development", Jim
McCarthy, ISBN 1556158238 - Jim McCarthy var leder af udviklingen af Visual
C++ V1.0 - hvis du er historisk interesseret. Bogen er iøvrigt god i det
hele taget med hensyn til styring af software projekter.

Borland C++Builder har sine rødder i Borland Delphi. Delphi blev udviklet
med Anders Hejlsberg som arkitekt, på baggrund af Turbo Pascal. Delphi må
regnes for at være klart bedre end Visual Basic - bortset fra at det ikke er
et Microsoft produkt.
Anders Hejlsberg forlod Borland til fordel for Microsoft omkring 1996/97,
mod (ifølge søgsmålet fra Borland) at få ca. 20 mill. kr. i transfersum, en
rigtigt pæn årsløn og aktier i Microsoft.
Hvad har han så lavet siden ?
Visual J++, som skulle få skovlen under Java, ved at være det bedste
udviklingsmiljø. Det gav dog anledning til lidt retssager - resten er
historie.
I stedet lavede han så C# og Visual Studio .NET. C# ligner Java til
forveksling og Visual Studio .NET ligner Delphi/C++Builder meget.
Visual Studio .NET ser faktisk rigtig godt ud, men for at kunne lave GUI
design med C++, skal man benytte en af-art af C++ (Managed C++ - godt
marketing trick igen. Det står som modsætning til Unmanaged C++ (C++ is
unmanageable)).
Microsoft har betalt Borland 120 mill. (jeg kan ikke huske om det er kr.
eller dollars - det spiller heller ikke den store rolle for budskabet) for
at benytte noget af Borlands patenteret teknologi fra Delphi/C++Builder i
Visual Studio .NET.

Hvis ikke den historie giver dig en idee om hvordan Microsoft syntes et
udviklingsmiljø skal være: a la Visual C++ V6 eller a la C++Builder, hvad
kan så ?
Man kan i Microsoft System Journal læse hvordan garvede folk (Matt Pietrek)
er imponeret over hvor let det er blevet at lave brugergrænseflade i Visual
Studio .NET, i forhold til tidligere. Man kan ikke andet end at tænke "det
har man da kunnet i årevis".

Man kan ikke med rimelighed lave en objektiv og dækkende sammenligning
mellem to store compilere i en nyhedsgruppe - det er simpelthen for stor en
opgave. Desuden kan man ikke forlange at jeg skal være objektiv.

Fra dine kommentarer omkring Linux, tænke jeg at du ikke bekymrede dig
nævneværdig om åbne standarder og portabilitet.

Det kan sagtens lade sig gøre at skrive fornuftig protabel standard C++ i
Visual C++. Som jeg skrev tidligere er det en rimelig implementering.
Jeg compilerer ofte min kode både med C++Builder og Visual C++.

>
> Du skriver, at du selv foretrækker Builderen, men jeg har svært ved at se
> hvorfor. Jeg skal starte på noget 'nyt' og du får det jo nærmest til at
> virke åbenlyst at jeg skal vælge Visual, da det åbenbart også er de fakto
> standarden.

Visual C++ er det åbenlyse, risikofrie valg (spis lo.. 100 millioner fluer
kan ikke tage fejl).
Det kræver en aktiv bevidst stillingtagen at vælge nogen som helst andet.

>
> Mht. CodeGuard kan jeg ikke undlade at nævne at jeg jo kommer jeg fra et
> miljø hvor vi fortolker mens vi udvikler så vi kan rette fejlene on the
fly
>

Ikke forstået - vi snakker om runtime fejl, som _vil_ give alle C/C++
programører problemer af og til.

>
> Dine bogreferencer er taget til efterretning og jeg har just nu bestilt
den
> første.

Koden i "Accelerated C++", som er god rimelig banal moderne C++, kan ikke
umiddelbart oversættes med Visual C++. Der skal små ændringer til, som
findes på nettet (http://www.acceleratedcpp.com). Jeg har ikke oplevet
problemer med C++Builder - men jeg har heller ikke oversat al koden endnu.
Et par gode råd: læs bogen (køb trøjen, se filmen :) ), skriv koden i
_hånden_ og lav alle opgaverne.

Venlig hilsen

Mogens Hansen



Mogens Hansen (15-04-2001)
Kommentar
Fra : Mogens Hansen


Dato : 15-04-01 09:53

Hej Jesper,
> Jeg har programmeret en del i bl.a. Pascal og Visual Basic og benytter
> iøvrigt produkter som Access/jet og MS SQL-server.
>
> Nu overvejer jeg at skifte helt til C++ og så er det jeg godt vil høre om
> konkrete forskelle mellem Microsoft og (alle?) andre compilere.

Kan du iøvrigt fortælle lidt om hvilken type applikationer du skal udvikle ?
F.eks. meget GUI, meget database med "business logic" etc ?

Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste