Ingen applikasjonsutviklingsverktøy kan opprette raskere eller kraftigere applikasjoner enn den nye eliten av C++-kompilerere. Samtidig fordrer disse programmene temmelig sofistikerte og dedikerte brukere. De mest utbredte C++-programmene er fulle av feilsøkere, profilerere og applikasjonsrammer, og inneholder alt du trenger for å lage nær sagt en hvilken som helst applikasjon.
Men C++ er ikke for Gud og hvermann, og det er på ingen måte det beste språket for alle prosjekter. Språket C++ tilhører tradisjonelt "hackerne". Det tar måneder å lære det, flere år å mestre det. Det er dessuten et svært så overbærende språk som gjerne lar programfeil slippe til ubemerket, til de plutselig dukker opp i det endelige produktet. Hvis du ønsker å snekre sammen en applikasjon som er liten og enkel eller passer bra til et eksisterende verktøy for rask applikasjonsutvikling (RAD) (f.eks. en databasegenerator for PC, Microsofts Visual Basic, eller Borland Internationals Delphi), er det strengt tatt sløs med arbeid, tid og penger å satse på C++.
Dersom programmererne dine imidlertid besitter den nødvendige ekspertise, og din applikasjon er stor, ikke passer inn i en standardkategori eller krever en hastighet som bare en av de ypperste kompilererne er i stand til å levere, er C++ er helt klart noe for deg.
Alle de ledende C++-pakkene inneholder naturlig nok primært en optimerende C++ kompilerer. Imidlertid varierer det hvilke egenskaper som styrker de forskjellige leverandørenes kompilerere. Borland har for eksempel alltid vært kjent for rask kompilering, mens Metaware Inc. og Watcom International Corp. har et ry for å produsere de tetteste og raskeste kode (Men utbudet endrer karakter nærmest ukentlig, så sjekk med de seneste benchmark-testene).
Leverandørene gir dessuten varierende støtte til de nyeste funksjonene forutsatt av språkstandarden, så som maler, "exception"-behandling og run-time informasjon. Alt dette er viktig. Malene tillater at algoritmer brukes på nytt med nye datatyper. Potensielt kan det spare atskillige timer med manuell omkoding. "Exception" behandling fanger opp feil og programfeil, noe få applikasjoner greier særlig godt på egenhånd. Og run-time informasjon gjør det enklere å knytte C++ til objektorienterte operativsystemfunksjoner.
Alle 32-bits Intel Corp. kompilerere kan optimere for Pentium på forespørsel, selv om enkelte 16-bits kompilerere, som Microsoft Visual C++ 1.51, ikke har denne kapasiteten.
Du kan også forvente å finne en koblinger (et program som konverterer objektkoden som produseres av kompilereren til en eksevkverbar fil), et feilsøkingsprogram debugger, en objektkode-bibliotekar og et Make-program, som bygger applikasjonen din automatisk, i alle pakkene.
Selv om alle produktene har kapasitet for visse grunnleggende funksjoner, gjør de det på svært forskjellige måter. Den første forskjellen du vil merke, er hvordan grensesnittet presenteres for programmereren.
De fleste leverandørene tilbyr sofistikerte integrerte utviklingsmiljøer (IDE-er) som lar programmererne redigere, kompilere, og feilsøke sine applikasjoner i et fancy GUI (grafisk brukergrensesnitt)-miljø.
Enkelte leverandører, først og fremst Metaware, mangler dette. Disse leverandørene antar, kanskje med rette, at enhver programmerer som har noe å fare med allerede foretrekker en bestemt redigerer og gjerne vil fortsette å bruke denne. (Metaware er etter ryktene igang med å utvikle sitt eget IDE. Dets OS/2-kompilerer glir imidlertid rett inn i IBMs Workplace/2- miljø, så det trenger ikke egentlig et eget IDE).
De fleste C++ IDE-er inneholder også en klasse -fremviser, som gjør det mulig å utforske hierarkiet av C++-klasser i et program ved å peke og klikke. (Symantecs C++ 7.0, lansert i mars, går et skritt videre ved å tillate endring av klassehierarkiet fra selve fremviseren).
Og flere produkter inneholder utvidede redigerere for Windows-ressurser som automatiserer oppgaven med å designe grafiske elementer brukt i Windows-programmer. (Borlands Resource Workshop var blant de første, men Symantec med flere har nå sin egen.)
De fleste Windows-kompilerere kan innkapsle VBX-er til C++-objekter. Dette er en velgjerning overfor programmerere som vil lage prototyper av sine brukergrensesnitt i Visual Basic, for deretter å bygge det endelige produktet i C++.
Det er dessuten en hendig sak når du trenger en særlig kompleks programkomponent, f.eks. en TWAIN-driver, en animert knapp, eller et regneark-likende rutenett, som det tar mye lenger tid å kode enn å importere som en forhåndslaget VBX.
Ved hjelp av applikasjonsrammer, som følger med de fleste kompilerere, kan du ruste opp andre programmereres forhåndsskrevne, feilsøkte kode når du skriver applikasjoner som bruker menyer, mus og vinduer.
Alle kompilererpakkene inneholder gjerne en del ekstra godsaker. Noen av pakkene inneholder profiler for kodeeksekvering. Andre har tatt med lisensierte utviklingsverktøyer for spesifikke miljøer, som Windows Resource Compiler og Help Compiler eller Microsoft Foundation Class-programmer. Noen av leverandørene forventer at du kjøper programvareutviklerens pakke for målmiljøet (og det er det vel rimelig å forvente, ettersom det er vanskelig å programmere for noe miljø uten å ha denne informasjonen tilgjengelig).
En "fjern" feilsøker, som kjøres på et system som er forskjellig fra programmet som feilsøkes, er en annen nyttig kapasitet som noen, men ikke alle, leverandører har tatt med.
Borland har tatt med et assembler-program, Turbo Assembler, i alle sine C++-pakker. Dette er svært hendig når du skal lage optimert kode for indre sløyfer.
I Symantec C++ 7.0 finnes det to nye og unike funksjoner, innebygd prosjektstyring og Netbuild, en fasilitet som distribuerer kompileringsoppgaver mellom mange PCer i et nettverk. Selv om denne funksjonen drar fordel av prosesseringen rundt et nettverk, er den nødt til å frembringe nye spørsmål om koordinering og versjonskontroll.
Før du velger en kompilererpakke, bør du forsikre deg om at den kan brukes ikke bare i det miljøet du benytter i dag, men også andre som du kan tenke deg å flytte til i fremtiden. (Dersom du for eksempel er usikker på om du kommer til å standardisere med Windows 95, kan du sikre deg ved å skaffe en kompilerer som også støtter OS/2.) Bare ved å tenke fremover kan du unngå å bli lammet av senere endringer i den flyktige OS-verdenen.
Av alle pakkene på markedet i dag, er Watcoms C/C++ 10.0 den soleklare mester i kompatibilitet. Pakkens kompilerer (som er så og så den samme uansett hvilken plattform den kjører på) har kapasitet for 16-bits DOS, 32-bits utvidet DOS (med en inkludert, avgiftsfri DOS-utvider), Windows, Windows NT, OS/2, Netware nedlastbare moduler samt AutoCAD ADS/ADI. Det kan ellers tilføyes støtte for andre, mer spesialiserte miljøer, som QNX.
Minst kompatibel er Microsofts Visual C++ 2.0, som, ikke overraskende, støtter bare 32-bits Windows og Windows NT. (En eldre Visual C++ kompilerer som støtter 16-bits Windows og DOS er tatt med i Visual C++ 2.0, og grunnet høy etterspørsel relansert i vår som et eget produkt. Imidlertid mangler den enkelte språkfunksjoner, nærmere bestemt maler, exception behandling, og Pentium-optimering.)
Borland leverer en rekke produkter som dekker DOS, 16-bits og 32-bits Windows, Windows NT og OS/2. Symantec C++ støtter Macintosh, men ikke OS/2. IBMs C Set++ har for tiden kapasitet bare for OS/2, men kan utvides til å støtte andre plattformer senere.
Likevel er fordelene med C++ kanskje verdt strevet. I dag er ingen andre språk i nærheten av C++ når det gjelder rå kraft, og ingen kan tilby et så stort utbud av optimerende kompilerere, applikasjonsrammer og andre verktøy for bygging av profesjonelle applikasjoner.
Opplæringen er nøkkelen til full utnytting av C++. C++ er en objektorientert forlengelse av C, et språk som opprinnelig ble utviklet av Bell Labs og ble brukt i utviklingen av operativsystemet Unix. C++ har tilføyd klasser, arv, polymorfisme og andre objektorienterte programkonsepter til C.
Ironisk nok representerer C++-spåkets arv både dets svakeste og sterkeste sider. I likhet med det komplekse, arkaiske C-språket er det konsist, men vrient, og fullt av underliggende tricks og feller. På den annen side lærer de fleste programmerere C-språket tidlig i karrieren, slik at det blir mindre uoverkommelig for dem å ta skrittet til C++ enn å lære et nytt objektorientert språk, f.eks. Smalltalk, fra bunnen.
Og ettersom API-ene i mange operativsystemer og grafiske miljøer, Windows inkludert, er utformet til å brukes av C-programmer, tilbyr C++ en naturlig metode for skriving av objektorienterte applikasjoner i disse miljøene, samtidig som språket tillater direkte tilgang til lavnivå-funksjoner.
Men C-programmerere uten erfaring i bruk av C++, kan ikke forventes å ta i bruk det nye miljøet uten grundig opplæring. Det krever kurs, bøker og tid å komme skikkelig i gang. I tillegg kan det være en idé å bruke en forhåndsbygd applikasjonsramme for redusere den nødvendige mengden koding.
Dersom du programmerer i C++ for et GUI-miljø, vurderer du antakelig å bruke en applikasjonsramme - et slags verksted for GUI-programmer. På den måten kan du kombinere forhåndsdefinerte deler for raskere å komme fram til et sluttresultat.
Applikasjonsrammer "innkapsler" komponentene du ser i et GUI til forhåndsskrevne objekter som så står til din disposisjon. Vil du ha en dialogboks med tre knapper? I de fleste rammene får du til dette ved å be om tre "knappeobjekter," kople dem sammen med et annet objekt som representerer vinduet som inneholder dem og legge til den koden som trengs for at knappene skal gjøre den jobben du ber om. Dessverre er denne muligheten et tveegget sverd. Selv om det helt klart er lettere å utvikle for en applikasjonsramme enn å skrive direkte til de fleste operativmiljøer, vil programmere likevel måtte jobbe svært raskt med rammene. Og det kan være en vel så stor utfordring som å bli kjent med et nytt OS.
Når selskapet ditt har investert i den opplæring programmererne vil trenge for å forstå rammen fullt ut, vil du være ganske bundet av rammeutviklerne. Hvis utvikleren legger inn årene uten å ha tilrettelagt oppretting av programfeil og andre forbedringer, kan du være ille ute. Og hvis rammen du velger bare er tilgjengelig for visse bestemte OS-plattformer, kan det bli vanskelig å flytte til kraftigere eller mer stabile systemer senere. Microsofts Microsoft Foundation Classes 3.0, for eksempel, støttes av nesten alle leverandører, men fungerer utelukkende sammen med 32-bits Windows og Windows NT, og er dessuten så Windows-spesifikt at det er upassende for alle andre miljøer.
C++-kompilerere leveres ofte med applikasjonsrammer, men at det ligger en ramme i boksen betyr ikke nødvendigvis at det er den du bør velge for ditt siste prosjekt.
Ofte er det best å bruke en tredjeparts ramme laget verken av OS- eller kompilerer-leverandøren. Et godt eksempel på en slik ramme er Inmark Development Corp.'s zApp Developer's Suite.
Det er mer vanlig at slike rammer støtter forskjellige plattformer, som Unix, OS/2, Windows, Windows NT, Macintosh, uten forbehold. Velger du en slik ramme, gjenstår det bare å finne en kompilerer som den beviselig vil fungere sammen med. Rammeleverandøren har sikkert sine anbefalinger.
Priser
Borland C++ 4.000 kr. Scribona Prangende utviklingsmiljø
IBM C Set ++ 4.500 kr. Scribona Støtter bare OS/2
MetaWare High C/C++ 7.200 kr. Polysoft Tett, rask kode; IDE på gang
Microsoft Visual C++ 3.500 kr. Scribona Støtter verken exceptions eller maler
Symantec C++ Professional; 2.200 kr. Scribona Hendig grafikkverktøy
Watcom C/C++ 3.500 kr. Polysoft Best på kompatibilitet
Polysoft nås på telefon 32 89 22 40, mens Scribona nås på 55 12 11 40