Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la...

7
PROVA TURBO C++1.0 di Sergio Polini Turbo C++ 1.0 È insomma un notevole passo avanti rispetto al «vecchio» ambiente integra- to del Turbo Pascal originario. Un am- biente realmente produttivo per un pro- grammatore, il quale oltretutto può estenderlo a piacimento integrandovi, se vuole, perfino dei propri tool. Evoluzione aziendale Parallelamente all'evoluzione dei pro- pri prodotti, non si può non sottolineare come Borland abbia operato una evolu- zione della propria immagine aziendale. Il primo Turbo Pasca I che girava in 30K era un meraviglioso compilatore «per hacker» ma non certo uno strumento per professionisti. Le versioni successi- ve, fatte uscire parallelamente ad una pletora di nuovi linguaggi Turbo e di prodotti assai disparati, erano molto mi- gliorate ma ancora tipicamente prodotti rivolti al mondo degli studenti e degli hobbysti. Ora però l'immagine un po' freak della Borland collegata a questi prodotti giovanili è cambiata. Una drastica riorga- nizzazione interna ha portato la ditta di Philippe Kahn a concentrarsi su pochi aspetti strategici del mercato ricercando in ciascuno l'eccellenza. I prodotti colla- terali sono stati cancellati, e dei molti linguaggi Turbo solo due, il C ed il Pasca!. sono stati salvati dall'accetta. Questi però sono stati portati a livelli professionali mediante il miglioramento tecnico dei compilatori e l'introduzione delle rispettive estensioni per OOP, tec- nica nella quale in Borland si crede molto. I tool di supporto sono stati migliorati e rinforzati. La missione azien- dale di Borland è ora quella di creare strumenti di programmazione per pro- fessionisti, per la manipolazione di dati in ambienti «corporate», per la produtti- vità individuale nel mondo del lavoro. Meno romantico, forse, ma più concre- to di prima. Lo sforzo di promozione del Turbo C++ è dunque legato anche al consolidamento di questa immagine «seria» dell'azienda; la quale per dimo- strare tutta la sua autorevolezza ha or- ganizzato per l'anno in corso una serie di seminari sulla programmazione OOP, che si terranno un po' in tutto il mondo, ed è riservata agli sviluppatori professio- nisti. Qualche anno fa, introducendo la pro- va su MC del compilatore Turbo Pascal, dissi che la Borland aveva «Turbato» il mondo. Credo che lo stia facendo anco- ra. In un modo diverso e maggiormente adatto ai tempi, ma indubbiamente lo sta facendo ancora. Se oggi siamo tutti abituati ad un certo modo di intendere il ciclo di sviluppo del software è anche merito loro. MCmicrocomputer n. 98 - luglio/agosto 1990 N ai ce la prendiamo con i carabi- nieri, i danesi con gli abitanti di Aarhus. Le barzellette nostre e loro, fatta eccezione per le ((vittime», sono praticamente identiche. Sappiamo bene che i veri militi sono ben diversi da quelli delle storielle (delle quali magari ridono anche loro ...), e lo stesso può sicuramente dirsi di quei connazionali di Bo. Basti pensare che proprio ad Aar- hus, nel 1975, Bjarne Stroustrup si è laureato in matematica e informatica. Quattro anni dopo, ottenuto il Ph. O. in Inghilterra dalla università di Cambridge, Stroustrup varcò l'oceano per approdare ai mitici A T& T Beli Laboratories. Lì si è interessato di sistemi operativi e di si- stemi distribuiti, ma anche di simulazio- ne. In quegli anni si disponeva per que- ste cose del Simula 67, che aveva arric- chito la struttura a blocchi tipica del- l'Algol 60 con le ((classi», ovvero con costrutti atti ad emulare gli oggetti del mondo reale in quanto capaci di com- portamenti autonomi piuttosto che ((ni- dificati». Ma era poco efficiente. Stroustrup mise così a punto un ((C con Classi»: .un linguaggio che, pur mante- nendo una notevolissima compatibilità con il C e l'efficienza di questo, vi innestava fin dal 1980 il concetto di ((classe». Seguirono poi ((operator over- loading», ((reference» e funzioni virtuali. Poco alla volta, dalla mera astrazione sui dati consentita dalle classi si passava all'ereditarietà e al polimorfismo, cioè alla programmazione orientata all'ogget- to. Permaneva tuttavia la ferma inten- zione di non dar vita ad un nuovo lin- guaggio, ma piuttosto di implementare un ((migliore CII, che comprendesse come subset il ((vecchio C»; per dirla con Stroustrup, nessun linguaggio è perfetto, ognuno ha i suoi problemi, ma almeno quelli del C erano ben noti. A sottolineare che si trattava appunto di evoluzione invece che di rivoluzione, Rick Mascitti coniò il nome C++. Che rende molto bene l'idea. Nel lugtlo del 1983 avvenne la prima installazione fuo- ri del gruppo di ricerca guidato da Stroustrup. Nell'ottobre del 1984, il C++ veniva illustrato dal suo ideatore in un articolo dell'A T& T Beli Laborato- 111

Transcript of Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la...

Page 1: Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la tecnologia object-oriented allo sviluppo di applicazioni. Quanto ai linguaggi da

PROVA

TURBO C++1.0

di Sergio Polini

Turbo C++ 1.0

È insomma un notevole passo avantirispetto al «vecchio» ambiente integra-to del Turbo Pascal originario. Un am-biente realmente produttivo per un pro-grammatore, il quale oltretutto puòestenderlo a piacimento integrandovi,se vuole, perfino dei propri tool.

Evoluzione aziendaleParallelamente all'evoluzione dei pro-

pri prodotti, non si può non sottolinearecome Borland abbia operato una evolu-zione della propria immagine aziendale.Il primo Turbo Pasca I che girava in 30Kera un meraviglioso compilatore «perhacker» ma non certo uno strumentoper professionisti. Le versioni successi-ve, fatte uscire parallelamente ad unapletora di nuovi linguaggi Turbo e diprodotti assai disparati, erano molto mi-gliorate ma ancora tipicamente prodottirivolti al mondo degli studenti e deglihobbysti.

Ora però l'immagine un po' freakdella Borland collegata a questi prodottigiovanili è cambiata. Una drastica riorga-nizzazione interna ha portato la ditta diPhilippe Kahn a concentrarsi su pochiaspetti strategici del mercato ricercandoin ciascuno l'eccellenza. I prodotti colla-terali sono stati cancellati, e dei moltilinguaggi Turbo solo due, il C ed ilPasca!. sono stati salvati dall'accetta.Questi però sono stati portati a livelliprofessionali mediante il miglioramentotecnico dei compilatori e l'introduzionedelle rispettive estensioni per OOP, tec-nica nella quale in Borland si credemolto. I tool di supporto sono statimigliorati e rinforzati. La missione azien-dale di Borland è ora quella di crearestrumenti di programmazione per pro-fessionisti, per la manipolazione di datiin ambienti «corporate», per la produtti-vità individuale nel mondo del lavoro.Meno romantico, forse, ma più concre-to di prima. Lo sforzo di promozione delTurbo C++ è dunque legato anche alconsolidamento di questa immagine«seria» dell'azienda; la quale per dimo-strare tutta la sua autorevolezza ha or-ganizzato per l'anno in corso una seriedi seminari sulla programmazione OOP,che si terranno un po' in tutto il mondo,ed è riservata agli sviluppatori professio-nisti.

Qualche anno fa, introducendo la pro-va su MC del compilatore Turbo Pascal,dissi che la Borland aveva «Turbato» ilmondo. Credo che lo stia facendo anco-ra. In un modo diverso e maggiormenteadatto ai tempi, ma indubbiamente losta facendo ancora. Se oggi siamo tuttiabituati ad un certo modo di intendere ilciclo di sviluppo del software è anchemerito loro.

MCmicrocomputer n. 98 - luglio/agosto 1990

N ai ce la prendiamo con i carabi-nieri, i danesi con gli abitanti diAarhus. Le barzellette nostre e

loro, fatta eccezione per le ((vittime»,sono praticamente identiche. Sappiamobene che i veri militi sono ben diversi daquelli delle storielle (delle quali magariridono anche loro ...), e lo stesso puòsicuramente dirsi di quei connazionali diBo. Basti pensare che proprio ad Aar-hus, nel 1975, Bjarne Stroustrup si èlaureato in matematica e informatica.Quattro anni dopo, ottenuto il Ph.O. inInghilterra dalla università di Cambridge,Stroustrup varcò l'oceano per approdareai mitici A T& T Beli Laboratories. Lì si èinteressato di sistemi operativi e di si-stemi distribuiti, ma anche di simulazio-ne. In quegli anni si disponeva per que-ste cose del Simula 67, che aveva arric-chito la struttura a blocchi tipica del-l'Algol 60 con le ((classi», ovvero concostrutti atti ad emulare gli oggetti delmondo reale in quanto capaci di com-portamenti autonomi piuttosto che ((ni-dificati». Ma era poco efficiente.Stroustrup mise così a punto un ((C con

Classi»: .un linguaggio che, pur mante-nendo una notevolissima compatibilitàcon il C e l'efficienza di questo, viinnestava fin dal 1980 il concetto di((classe». Seguirono poi ((operator over-loading», ((reference» e funzioni virtuali.Poco alla volta, dalla mera astrazione suidati consentita dalle classi si passavaall'ereditarietà e al polimorfismo, cioèalla programmazione orientata all'ogget-to. Permaneva tuttavia la ferma inten-zione di non dar vita ad un nuovo lin-guaggio, ma piuttosto di implementareun ((migliore CII, che comprendessecome subset il ((vecchio C»; per dirlacon Stroustrup, nessun linguaggio èperfetto, ognuno ha i suoi problemi, maalmeno quelli del C erano ben noti. Asottolineare che si trattava appunto dievoluzione invece che di rivoluzione,Rick Mascitti coniò il nome C++. Cherende molto bene l'idea. Nel lugtlo del1983 avvenne la prima installazione fuo-ri del gruppo di ricerca guidato daStroustrup. Nell'ottobre del 1984, ilC++ veniva illustrato dal suo ideatorein un articolo dell'A T& T Beli Laborato-

111

Page 2: Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la tecnologia object-oriented allo sviluppo di applicazioni. Quanto ai linguaggi da

PROVATURBO C++10

ries Technical Journal, significativamen-te intitolato «Data Abstraction in C». LaA T&T immise nel mercato le tre versio-ni dalla 1.0 alla 1.2 nel biennio 1985--86;in tutti i casi si trattava di un traduttore:il codice veniva convertito in «vecchioC» e quindi compilato. Nel 1988 venne-ro realizzati i primi compilatori; nel 1989è arrivata la versione 2.0, caratterizzatada importanti innovazioni quali l'eredita-rietà multipla (la più appariscente), masoprattutto molte «piccole» ma impor-tanti modifiche tese a facilitare la co-struzione e l'uso di librerie di funzioni.

Un linguaggio giovane, quindi, maestremamente promettente. Un lin-guaggio sicuramente molto «di moda»ma anche, soprattutto nella versione2.0, uno strumento in grado di aumen-tare significativamente la produttività dichi fa software. Ne volete un'autorevoletestimonianza? Or. Dobbs's Journal,maggio 1989: il direttore JonathanErickson sottolinea l'importanza del tra-sferimento di Greg Whitten, impegnatoper dieci anni nella realizzazione di tutti ilinguaggi Microsoft, al settore dedicatoallo sviluppo di programmi applicativi.Lo stesso Whitten aveva spiegato che ilcodice degli applicativi Microsoft am-monta a svariati milioni di linee di codi-ce; le immaginabili difficoltà insite nellagestione di tali volumi rischiavano dicompromettere i tempi di rilascio equindi gli utili della società. Di qui inuovi incarichi assegnatigli dalla Micro-soft: dirigere lo sviluppo di nuove appli-cazioni object-oriented e applicare latecnologia object-oriented allo sviluppodi applicazioni. Quanto ai linguaggi dausare, gli orientamenti Microsoft nonsono ancora noti. È sicuro che un com-pilatore C++ avrà da dire la sua, ma siè parlato anche di un «Visual» Basicdedicato alla realizzazione di interfacceutente grafiche. Soprattutto ancora nonsembra giunto il momento di un C++per il mercato. C'è chi ritiene che laMicrosoft intenda proporre gradualiestensioni del suo compilatore C, mapuò anche ritenersi che la recente pro-posta di un compilatore «ancora C»abbia le sue buone motivazioni: la ne-cessità di fare i conti con i diversi am-bienti dalla stessa Microsoft proposti(Ms-DOs, Windows, OS/2), l'attenzioneestrema alla ottimizzazione del codicecon conseguente urgenza di contrastareanche concorrenti «minori» (la Datalightal tempo del C 5. O, la Watcom ora), larelativa giovane età di un linguaggio cheda un lato solo lo scorso anno, con laversione 2. O, ha messo a punto mecca-nismi adeguati per la costruzione e l'usodi librerie di f(Jnzioni, dall'a/ero, l:UI11t1

112

Turbo C++ 1.0

Produttore:Borland International, Inc.1800, Green Hills RoadP.O. Box 660001Scotts Valley, CA 95066-0001Distributore:Borland Italia SrlVia Cavalcanti, 5 - 20127 MilanoTelefono: 0212610102Prezzi (IVA esclusa):Turbo C++ 1.0 L. 399.000Turbo C++ 1.0 Professional L. 599.000Upgrade (da qualsiasilinguaggio Borland) L. 299.000

vedremo, richiede l'esistenza di apposi-te librerie di classi per poter essereusato al meglio.

La Borland ha fatto il suo prepotenteingresso nel mercato con prodotti inno-vativi come il Turbo Pascal e il sideKick;

Le opzioni proposteall'utente dalla

procedura diinstallazione.

ha proseguito con un incredibile TurboProlog; ha abbandonato il progetto di unTurbo Modula-2 in favore di un Turbo Cnon appena ha capito che l'erede delPascal non avrebbe scalfito il dominiodel C; ha arricchito il Turbo Pascal primadi caratteristiche «modulari» poi di stru-menti per la programmazione object-oriented tratti sia dall'Object Pascal che- guarda caso - dal C++. Societàpiccola (almeno rispetto alla Microsoft)e quindi forse proprio per questo piùorientata all'innovazione, poteva lasciar-si sfuggire il «nuovo C»? Sicuramenteno, tanto più che da tempo erano pre-senti sul mercato traduttori e compilato-ri C++ per Ms-DOs (Glockenspiel, Gui-delines, Zortech, ecc.). ed era importan-te offrire non appena possibile non soloun compilatore, ma forse soprattuttouna libreria di classi che si proponessecome standard. Le caratteristiche evolu-tive del C++ consentivano del resto unapproccio relativamente indolore: sia il

Mediante TC/NST èpossibile. tra l'altro.cambiare i comandidell'editor e /e variecombinazioni di colori.

MCmicrocomputer n. 98 - luglio/agosto 1990

Page 3: Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la tecnologia object-oriented allo sviluppo di applicazioni. Quanto ai linguaggi da

PROVA

TURBO C++1.0

void memoria insufficiente (){ -

#include <iostream.h>#include <process.h>

typedef void (*PF)(); /I oppure:extern PF set_new_handler(PF); / I extern void (*_new~handler) ();

Il newhand.cpp/I esempio di uso di new hand1er o di set new handlerO adattato da:Il - 8jarne Straustrup, The C++ Programming Language. Addison-Wesley.Il Readin&, Massachussets, 1987, p. 931/ - Stanley 8. Lippman, C++ Primet'. Addison-Wesley, Readil1&,/I Massachussets, 1989, pp. 139, 171

memoria insufficiente";cerr « Il

exit(l);

L'uso di_new_handler e di

seLnew_handlerO.non documentato né

nei manuali nénelf'help in linea. ma

correttamenteimplementato.

èdi Kernighan e Ritcflle che l'ANSI Cpossono infatti essere considerati, salvoincompatibilità di poco momento, comesottoinsiemi del C++. Ecco quindi l'i-dea Borland: un compilatore multi-lin-guaggio in un nuovo ambiente integratonotevolmente potenziato e assistito dasuperbi tool di sviluppo. Non vi piace(ancora ...) il C++? Vi si offre una sortadi super Turbo C 3.0. Vi interessa uncompilatore C++ conforme alla versio-ne 2.Odella A T& T? Eccovi il Turbo C++7.0.

void esaurisciMemorla(unsigned blocco){

main( ){

cout «"Senza new handler:e;esaurisciMemoria(blc) ;

unsigned blc icout « "Blocco: "icin :>:> blc;

to). In un complesso caratterizzato danotevole potenza e flessibilità abbiamoriscontrato un solo neo. Correggendouna scelta tradizionale della Borland, neimenu dell'ambiente integrato è ora pos-sibile posizionarsi con il cursore anchesulle opzioni disabilitate (utile per chie-dere aiuto su di esse premendo F1). mala barra di selezione assume in questocaso una colorazione grigio scuro sunero, scarsamente leggibile su moltimonitor; non siamo riusciti ad assegna-re nuovi colori con TCINST.

DocumentazioneVengono forniti quattro manuali. Get-

ting Started fornisce istruzioni sulla in-stallazione e sull'uso dell'ambiente inte-grato, e contiene due tutorial sul C e sulC+ +. Ambedue dedicati a chi si accostiper la prima volta a uno dei due linguag-gi, svolgono egregiamente il loro compi-to e sono accompagnati da numerosifile di esempio su disco. La User'sGuide contiene l'ilhÌstrazione completadell'ambiente integrato e illustra con

cout « "Con _new_handler:e;set~new_handler( memoria_insufficiente) ;Il oppure: _new_handler ""memoria_insufficiente;esaurisciHemoria(blc) ;return l;

statie int livelli:: l;statie int riferito"" e i++livelli;double *ptr :: new double[blocco] jif (ptr)

esaurisciMemoria(blocco) idelete ptrjif (!riferito++)

cout « If Memoria esaurita:"«" blocco:"« blocco«" livelli: Il « livelli « "e;

quello separato (TCC.EXE) si avvalgonodel VROOMM. il sistema di swappinggià usato nel Quattro Pro che, con tec-nologia analoga a quella adottata in si-stemi operativi come Unix, consente diusare il disco per far girare applicazioniche richiederebbero più RAM di quellafisicamente disponibile. Grazie al VRO-OMM (Virtual Run-Time Object Orien-ted Memory Manager) è possibile com-pilare nell'ambiente integrato anche do-po aver visto giungere fino a zero ilconto della RAM residua, o vedere unmessaggio «Available memory O» dopouna compilazione con TCC.EXE.

A completamento dell'installazione sipuò editare il file TURBOC.CFG, nelquale si possono riportare, con un nor-male editor, le opzioni che si preferisco-no per il compilatore separato. Si puòanche usare TCINST.EXE per modifica-re molte delle caratteristiche del compi-latore integrato, in particolare i comandidell'editor e le combinazioni di colori,non modificabili in altro modo (moltealtre caratteristiche possono essere im-postate dallo stesso ambiente integra-

InstallazioneIl Turbo C++ può essere installato su

computer IBM o compatibili con almeno640K di RAM, un disco rigido e unfloppy. Si richiede un DOS 2.0 o suc-cessivo, anche se, per sfruttare al me-glio le possibilità offerte dall'ambienteintegrato, è preferibile una versione 3.xo 4 (solo in questo caso, infatti, i pro-grammi conoscono la directory in cuirisiede il loro eseguibile; detta in C,argv[O] contiene il pathname completodel programma). È possibile, per la pri-ma volta in un compilatore Borland,l'uso del mouse, che può essere Micro-soft, Logitech, Mouse Systems o IMSI,con versioni minime, rispettivamente,6.1, 3.4, 6.22 e 6.11.

Vengono forniti otto dischetti, chepossono essere installati sul disco rigi-do unicamente mediante un program-ma INSTALL; non è possibile semplice-mente copiare e scompattare i vari file,in quanto alcuni di questi sono divisi inpiù tronconi che solo INSTALL può riu-nificare. Ciò si rende necessario inquanto TC.EXE, il compilatore integrato,occupa circa 870K, e il relativo file dihelp altri 670K. La procedura di installa-zione è comunque estremamente sem-plice e rapida, secondo lo standard a cuila Borland ci ha ormai abituato: si trattasolo di indicare le directory in cui instal-lare i vari tipi di file e di scegliere se sivuole installare TCTOUR (un tutor inte-rattivo su alcune caratteristiche del-l'ambiente integrato). se si voglionoscompattare gli esempi (proposti in fileZIP). se si vogliono installare le librerieper tutti i modelli di memoria.

AI termine di una installazione com-pleta, il prodotto occupa circa 5 mega emezzo; volendo eliminare il TCTOUR,gli esempi, il sorgente del codice distart-up e i file DOC, si risparmierebbecirca un mega. È preferibile comunqueassicurarsi di avere sufficiente spaziolibero su disco, non solo, come è ovvio,per le proprie applicazioni, ma ancheperché sia il compilatore integrato che

MCmicrocomputer n. 98 -·Iuglio/agosto 1990 113

Page 4: Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la tecnologia object-oriented allo sviluppo di applicazioni. Quanto ai linguaggi da

PROVATURBO C++1.0

};

};

Il new.h

inlioe void* operator new(unsigned. void *p) { return p; }

terminazione del programma) e di instal-larla o mediante una assegnazione diret-ta di new handler o con set new hand-ler. Tutto ciò non viene documentato (siriesce solo a trovare new handler tra levariabili predefinite di un programmamediante il Turbo Debugger), ma, perfortuna, funziona perfettamente. La va-riante "estesa" dell' operatore new fu n-ziona invece solo se si provvede all' 0-verloading dell'operatore predefinito.Sarebbe stato certo preferibile che tuttociò fosse documentato.

Accanto ai manuali abbiamo alcunifile di documentazione su disco, alcunispecifici (OLDSTR.DOC per gli stream,THELP.DOC per l'help residente da usa-re fuori dell'ambiente integrato, UTIL.DOC per i vari programmi di utilità,TCALCDOC per il «solito» spreadsheetche accompagna i compilatori Borland,CLASSLlBDOC, per la libreria di classi),altri genericamente relativi al prodotto:README, che per fortuna non contie-

text inlo ti;gettextinfo(&ti} ;void *VRAMptr • tLcurrmode -- HONO ? (void *)lx8ilIlIlIlL

: (void *)1x881111I1L;Video8uff *V8Ptr - new (VRAMptr} Video8uff;for (int i • 9 • ColSi 1 < 11 • ColSi ++1)

VBPtr->SetVideoCell(i, '! I. Ix7');getchO;V8Ptr->Video8uff: : -Video8uff();'

}void SetVideoCell(int i. unsigned char c. unsigned char a)

array[i] .ch z c;array[i] .attr - ai

}-Video8uffO {

far (int 1 - e i i < VideaS1ze; ++1)array[1].ch = I ';

array[i].attr = Ix"7;

class Video8uff {VideoCell array[VideoSize];

public:Video8uff () (

far (int i :z I; i < V1deoSizei ++i)array[i].ch - '?';array( i].attr = IxIl7;

struct VideoCell {unsianed char ch;unsicned ehar attr;

const int Rows = 25;const int Cols = 811;const int VideoSize = Rows .• CaIs;

extern void (* new handler) ();extern void .set_oew_handler(void (*) (»;

#1nclude <conio.h>t1include <new.h>

Il newdemo. cpp1/ NB: da compilare nei modelli "laTee data" (es.: compact)

'main(void){

La variante ((estesa"dell'operatore new

consente di collocarein un'area di memoria

scelta dalprogrammatore una

struttura di dati. SottoUnix. ad esempio. può

essere usata perallocare spazio nella((shared memory";

sotto DOS potrebbeessere usata perdefinire strutture

coincidenti con areedella memoria di

sistema (nella figura.con la memoria video).

Si richiede/'((overloading"

dell'operatore new. acui si può prowedere

con un file new.hcome quello qui

proposto.

Un C+ + 2.0 dovrebbe essere accom-pagnato da un file new.h, contenente ledichiarazioni di una variabile predefinitanew handler (di tipo puntatore a unafunzione senza argomenti che ritornivoid), di una funzione set new handler()(con identico tipo per l'argomento e peril valore di ritorno) e di una variantedell'operatore new con un ulterioreoperando, indicante l'indirizzo nel qualeva collocato l'oggetto allocato. Per chinon lo sapesse, l'operatore new vieneusato in C+ + al posto della funzionemal/ocO per assegnare ad un puntatorel'indirizzo di un'area allocata dinamica-mente; nel caso di esaurimento dellamemoria new ritorna zero, ma primaverifica se new handler ha valore nullo ocontiene l'indirizzo di una funzione che,in tal caso, viene eseguita; ciò consentedi definire una funzione che gestisca lesituazioni di memoria insufficiente (adesempio: chiusura ordinata dei file,emissione di un messaggio di errore,

molta chiarezza le numerose nuove ca-ratteristiche di questo. Vi vengono an-che documentate le opzioni del compi-latore separato e il funzionamento diMAKE e TOUCH e delle nuove versionidi TLlB e TLlNK. Un'appendice è dedi-cata ad una delle nuove possibilità del-l'editor: viene fornito un programmaTEMC.EXE (Turbo Editor Macro Compi-ler) che, avuto in input un file ASCI/redatto secondo semplici regole, con-sente di aggiungere al file di configura-zione TCCONFIG.TC nuovi comandi perl'editor, definiti come combinazioni diquelli predefiniti. La Programmer's Gui-de è invece espressamente dedicata alprogrammatore esperto e, potremmodire, esigente. /I lungo primo capitolo(oltre 150 pagine) contiene una descri-zione sia formale che discorsiva del C edel C++ come implementati dalla Bor-land. Un'appendice illustra anche tuttele scelte operate in relazione a quegliaspetti per i quali lo standard ANSIlascia qualche libertà agli implementato-ri. Dopo un breve capitolo dedicato allaillustrazione per categorie delle funzionidi libreria (documentate in dettaglio inun quarto manuale), seguono una espo-sizione della libreria di I/O del C++ 2.0,iostream (i brevi cenni dedicati agli stre-am delle precedenti versioni del C++AT&T sono integrati da un esaurientefile OLDSTRDOC su disco) e dettaglia-te informazioni sui diversi modelli dimemoria, sulle opzioni per i calcoli invirgola mobile, sulle possibilità di over-lay mediante il VROOMM, sulle funzionidi gestione del video nei modi testo egrafico, sulla interfaccia con moduli inAssembler, sui messaggi d'errore. /Iquarto e ultimo manuale, Library Refe-rence, contiene la documentazione del-le oltre 470 funzioni di libreria (esclusala TCLASSx.L1B, di cui diremo poi) edelle variabili globali predefinite. Perogni funzione abbiamo una breve de-scrizione dell'azione svolta, la sintassi, il-file «h» che ne contiene il prototipo,note sull'uso e sul funzionamento, ipossibili valori del risultato, precisazionisulla portabilità (con riguardo all' ANSI Ce a Unix) e sulla eventuale presenza difunzioni simili in Turbo Pascal, l'indica-zione di eventuali altre funzioni correla-te, quasi sempre un esempio d'uso.

Si tratta in complesso di oltre 1400pagine ben organizzate, di sicuro aiutosia per il principiante che per l'esperto.Si potrebbe magari desiderare che, nel-la Programmer's Guide, venissero illu-strare schematicamente, oltre che di-scorsivamente, le differenze tra TurboC++, Turbo C 2.0 e ANSI C, ora spar-pagliate qua e là; ma non è questione digrande importanza. Lascia invece un po'perplessi qualche curiosa omissione.

114 MCmicrocomputer n. 98 - luglio/agosto 1990

Page 5: Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la tecnologia object-oriented allo sviluppo di applicazioni. Quanto ai linguaggi da

classe "base"usata per errori di al1ocazione di memoriaclassi per ouetti ordinabil1classi per oggetti da includere in un Dictionaryclassi che contenaonoDuetti di altre classiclassi di tipo "stack" (con push(), pop(), ecc,·)classi di tipo PIFO (con put (), cet (), ecc,)Queue a due estremi (putLeft(), putRiCht(), ecc.)classi per gestire collettivamente n altri alcetticlassi per Collect1ons non ordinatesostanzialmente equivalente a HashTablecome Ba&, ma senza oggetti U&:uali tra loroSet di ouetti derivati dalla classe AssociatiooCollection di Duetti coneatenati tra loroCollection di Duetti coneatenati nei due sensiclassi di Duetti accessibili mediante un indiceAbstractArray con addAt() e operatore li lAbstractArraycon elementi ordinati e operatore []classe "base" della cerarc:hia deeli iteratoriper iterazioni sueli arrayper iterazioni sulle Listper iterazioni sulle DoubleList

ObjectErrar50rtahleAssociatiooContainerStackQueueDequeCollectioDHashTable

Bq;SetDictionary

ListlloubleLiatAbstractArray

ArraySortedArray

ContainerlteratorArraylteratorListIteratorDoubleListI terator

ne, come in altre occasioni, sostanzioserettifiche alla documentazione cartacea,e HELPME!.DOC, che curiosamente èl'unico posto in cui abbiamo trovato unaimportante indicazione circa l'uso dellekeyword far e huge, su cui torneremotra breve.

Abbiamo infine un potente help inlinea, accessibile sia dall'ambiente inte-grato che da dovunque se reso residen-te con THELP.COM, e contenente inpratica buona parte dei manuali User'sGuide e Library Reference. Funzionalitàgià viste, come l'uso della tecnologiadell'ipertesto e la possibilità di copiarnebrani e esempi in una finestra di editing,vi compaiono significativamente poten-ziate.

Implementazione del linguaggioSarebbe magari meglio dire «dei lin-

guaggi». Il Turbo C++ è infatti insiemeun ANSI C rispettoso delle prescrizioniIEEE e un C++ conforme alla versione2.0 della AT&T. Un'apposita opzioneconsente perfino di attivare quattro di-versi insiemi di parole riservate: quelledel C Kernighan e Ritchie, del C UnixSystem V, dell'ANSI C e del TurboC+ +, il quale ultimo comprende alcuneestensioni quasi tutte già presenti nelTurbo C 2.0. Si può scegliere anche seassumere che tutti i file con estensione«c» sono da intendere come sorgentiC++ o se limitare il nuovo linguaggio aifile con estensione «cpp». Quasi non siriesce a credere che il compilatore ef-fettivamente riesce a rispettare le scel-te dell'utente, consentendo e vietandocostrutti ora validi ora illegali secondo iltipo di linguaggio e la portabilità che sipreferiscono.

Analogo sforzo si osserva nella orga-nizzazione degli header file, che la Pro-grammer's Guide non a caso classifica,tra l'altro, anche in relazione allo stan-

MCmicrocomputer n. 98 - luglio/agosto 1990

La gerarchia di classiimplementata nellalibreria TCLASS.

dard di riferimento: troviamo i file volutidallo standard ANSI (da stdio.h a locale.h), qualcuno ispirato da Unix (si tratta difcntl.h e values.h), quelli del C+ + (daitipici stream.h, iostream.h o complex.ha un interessante bcd.h, che definisceuna classe per l'uso di numeri BCD), equelli relativi alle estensioni Borland (daalloc.h a graphics.h).

Le estensioni consentono tra l'altro ditrarre il massimo beneficio dalla articola-ta offerta di sei modelli di memoria:tiny, small, medium, compact. large ehuge. Qui il lettore utente dei compila-tori Microsoft deve fare attenzione:compact. large e huge hanno infatti unsignificato diverso da quello a lui noto.Non c'è problema per tiny, small emedium: il primo consente di realizzarefile COM invece che EXE, il secondolascia un massimo di 64K sia per ilcodice che per i dati, il terzo consentefino a un mega per il codice accanto a64K per i dati. I modelli compact elarge, pur differendo tra loro per quantoriguarda il codice (limitato a 64K nelcompact), offrono ambedue fino a unmega per i dati, ma solo per quelliallocati dinamicamente; i dati statici so-no posti nei segmenti _DATA e _BSS(rispettivamente se inizializzati o no) iquali, raggruppati in DGROUP, sono li-mitati ad una dimensione complessivadi 64K (potremmo dire che i due modelliriproducono l'organizzazione della me-moria tipica, rispettivamente, della ver-sione 3 e delle versioni successive delTurbo Pascal). Il modello huge corri-sponde invece al modello large dellaMicrosoft. nel senso che vengono defi-niti tanti segmenti di dati (ognuno limita-to alla dimensione massima di 64K)quanti sono i moduli del programma.Non consente però la definizione disingoli oggetti di dimensione superioreai 64K. Per giungere a tanto è necessa-ria una innovazione documentata, come

PROVATURBO C++1.0

notavamo, solo nel file HELPME!.DOC:con il Turbo C+ +, a differenza di quan-to si poteva con il Turbo C 2.0, èpossibile usare le keyword far e hugeanche per i dati oltre che per funzioni epuntatori; con ciò si ottiene sia di defini-re dati per oltre 64K complessivi in unostesso modulo (ad esempio con: charfar array1 [60000L); char far ar-ray2[60000L];), sia definire dati occu-panti individualmente più di 64K (adesempio: char huge array3[100000L];).

Tranne che per questo aspetto, puòdirsi che il C del nuovo compilatore èsostanzialmente lo stesso del Turbo C2.0 (provato nel numero di gennaio1989, comprese le funzioni ANSI signa-IO e raiseO o il tipo long double); ilC+ + è per parte sua un vero C+ + 2.0,con poche inevitabili incertezze: laAT& T non ha precisato tutti i dettaglidella implementazione degli stream,con la conseguenza che la Borland haevidenziato nei file fstream.h e iostre-am.h quei punti per i quali potrebberosorgere incompatibilità con altre imple-mentazioni. Precisiamo infine che an-che il C++ si può avvalere delle esten-sioni che la Borland ha da tempo propo-sto nella sua implementazione del-l'ANSI C.

LibrerieAccanto alla tradizionale ricca libreria

del C e all'ulteriore corredo del C++(quale una classe complex, che consen-te di trattare i numeri complessi comegli altri tipi numerici predefiniti), la Bor-land offre sia i suoi tradizionali strumen-ti per la gestione del video nei moditesto e grafico, sia la classe bcd cuiabbiamo già fatto cenno. Ma non ètutto.

Il C++ si propone come un «miglioreCl> grazie a numerose interessanti ca-ratteristiche, usabili anche indipenden-temente dalle «classi». La keywordconst può rappresentare una migliorealternativa alla definizione di costantimanifeste mediante *define, in quantoè soggetta ai controlli sintattici. La pos-sibilità di definire funzioni inline costi-tuisce, per analoghi motivi, un progres-so rispetto alle macro tradizionali. Il piùrigido controllo dei tipi aiuta a scriverecodice più affidabile, mentre dalle possi-bilità di indicare valori di default per gliargomenti di una funzione o di definirefunzioni con lo stesso nome ma condiversi argomenti discendono maggioreflessibilità e un codice spesso più chia-ro. Analoghi i benefici delle referenceche permettono di passare ad una fun-zione, per dirla in pascalese, parametrivariabile oltre che parametri valore.Quando poi si passa alle classi, si sco-

115

Page 6: Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la tecnologia object-oriented allo sviluppo di applicazioni. Quanto ai linguaggi da

PROVATURBO C+ + 1.0

pre ben presto che l'incapsulamento difunzioni nella definizione dei dati con-sente non 'solo di realizzare una effetti-va astrazione sui dati. ma anche discrivere codice meno soggetto ad er-ron.

Qui però si scopre che la ricchezza ela potenza del C+ + hanno un prezzo: laprogrammazione object-oriented stimo-la ma anche rende praticamente obbli-gatoria una più approfondita analisi. Esa-gerando un po' si può dire che, nellaprogrammazione tradizionale, se serveun nuovo dato lo si aggiunge e basta;nella OOP, invece, si può e si dovrebbesempre considerare la possibilità di faredi un oggetto l'istanza di una classe, edi individuare la collocazione di questain una organica gerarchia di classi. Cosaè una "buona classe»? Stroustrup ri-sponde: qualcosa cui attiene un insie-me contenuto e ben definito di opera-zioni, qualcosa che può essere vistocome una sorta di scatola nera manipo-lata esclusivamente mediante quelleoperazioni, qualc'Jsa di cui sarebbe desi-derabile avere più esemplari.

Proviamo a immaginars di realizzareuna interfaccia utente. Potremmo pen-sare a Uf.la classe Window, da cui deri-vare classi per menu e dialog box. Datoche una window può avere i suoi menu,ogni menu i suoi sottomenu, attribuia-mo ad ogni window un puntato re aduna subwindow, intendendo con ciòconsentire di appendere ad ogni win-dow una lista di subwindow. Quanto civuole perché ci accorgiamo che ,dista»è un ottimo candidato per una "buonaclasse»? Ben poco. Ma così facendo sigiunge ben presto a sentire il bisogno diuna ricca gerarchia di classi, magarimodellata su quella classica (e speri-mentata) dello Smalltalk. Non stupisce,quindi, di trovare una libreria OOPS (Ob-ject-Oriented Program Support) scrittain C+ + da Keith E. Gorlen e modellataproprio sulla gerarchia dello Smalltalk (dipubblico dominio ma, per quanto risultaa chi scrive, non ancora portata su MS-DOS). né di ritrovare una gerarchia piùsemplice ma di uguale ispirazione nel-l'Objective-C di Brad J. Cox, interessan-te mistura di C e Smalltalk. Non volendoo non potendo usare la libreria di Gor-len, non avendo voglia o tempo di tra-durre in C+ + la libreria di Cox, chefare?

La Borland ci propone una libreriaTCLASS che, riprendendo alcune solu-zioni di Cox, ci mette a disposizione unagerarchia di classi semplice e potente altempo stesso; non ha l'estensione, for-se eccessiva, di quella di Gorlen, maappare ben costruita e facilmente

116

Con l'opzione Transferè possibile aggiungere

al System menu unprogramma da

eseguire senza usciredall'ambiente

integrato,reindirizzandone

l'output in una Edit oMessage window.

estensibile. E naturalmente ci sono an-che i sorgenti.

Ambiente di sviluppoL'ambiente di sviluppo è stato note-

volmente migliorato. Per prima cosa,abbiamo (finalmente) un multi-file edi-tor: è possibile aprire diverse finestre diediting, sia per due o più viste su unostesso file, sia per operare contempora-neamente su più file. È stato inoltreelevato da 64K a 8 mega (!) il limite peril buffer dell'editor, che può usare an-che la memoria estesa o espansa even-tualmente presente. Ma tutta l'interfac-cia utente è cambiata, non solo per lapossibilità di usare il mouse.

Nel menu principale compaiono diver-se nuove opzioni. Con Alt-spazio si ac-cede ad un 5vstem menu che consentetra l'altro di chiamare altri programmi.Non si tratta semplicemente di unascorciatoia rispetto al temporaneo ritor-

Le opzioni del menuSearch, arricchite dallapossibilità di ricercareregular expressions, inuna dialog box nuovostile.

no al DOS, ma di una valida integrazio-ne dei tool che l'utente predilige nel-l'ambiente integrato, in quanto è possi-bile far sì che l'output di qualsiasi pro-gramma richiamato dal menu compaiapoi in una Edit window o Messagewindow. Edit, da semplice comando, èdiventato un menu con le opzioni di cutand paste tipiche delle interfacce che silasciano usare con il mouse, mentre èdel tutto nuovo il menu 5earch che,oltre alle usuali opzioni di ricerca e sosti-tuzione (arricchite peraltro dalla possibi-lità di usare regular expressions). necomprende anche altre per saltare adun dato numero di riga del file nellafinestra di editing attiva, o per ricercareuna funzione anche in file diversi daquesto ma a questo collegati (tale ulti-ma opzione è abilitata solo durante ildebugging). Nuovo anche il menu Help,comprendente le opzioni Contents, chepropone una schermata analoga a quel-la iniziale del vecchio help, e Index, che

MCmicrocomputer n. 98 - luglio/agosto 1990

Page 7: Turbo C++ -  · to del Turbo Pascal originario. Un am- ... cazioni object-oriented e applicare la tecnologia object-oriented allo sviluppo di applicazioni. Quanto ai linguaggi da

Ora è possibileassociare ad ogni file

di un progetto opzionispecifiche. compresi iprogrammi necessari

per la compilazione(tipicamente un

Assembler oltre alcompilatore integrato)e l'overlay del modulo.

propone tutte le parole per le quali èattivato l'help mediante ipertesto; quan-do si apre la relativa finestra, è possibilemuoversi in essa sia con il cursore ocon il mouse, sia digitando progressiva-mente le lettere della parola cercata,fino ad identificarla univocamente.

Sono cambiati sostanzialmente anchei menu Project, dedicato alla gestionedei progetti, e Oebug, arricchito da unaopzione di Inspect molto simile a quellafin qui riservata al Turbo Debugger (pro-vato a febbraio dello scorso anno) e dabreakpoint sia condizionati che incondi-zionati. Il menu Window dispone anchedi una opzione Register che apre unafinestra utile per osservare il contenutodei registri del microprocessore quan-do, durante il debugging, si passa attra-verso istruzioni Assembler.

Tutto il sistema di menu è moltocomodo da usare, sia con la tastiera checon il mouse. In esso si integrano ameraviglia le dialog box, dotate di input

MCmicrocomputer n. 98 - luglio/agosto 1990

"menu Debugcomprende ora ancheuna opzione Inspect,fin qui riservata alTurbo Debugger.

box (alle quali è associata una historylist immediatamente accessibile per ri-pescare scelte effettuate in preceden-za: basta premere il tasto di freccia inbasso o clickare con il mouse sullafreccia che appare accanto alla box). Iistbox (nelle quali la selezione può pureessere operata con «digitazione incre-mentale» come nell'index dell'help).check 'box e radio button. Il risultato èuna interfaccia utente che ... si vorrebbepoter incorporare nei propri programmi.

Dietro un tale scenario si cela peròanche una diversa filosofia di sviluppo diprogetti complessi. Nel Turbo C 2.0 ifile PRJ erano normali file ASCII, ora

. sono binari a causa della loro complessi-tà. Non solo è possibile salvare in essi,e in associati file DSK, buona parte dellaconfigurazione dell'ambiente integrato(dalla disposizione delle finestre alle se-lezioni dei messaggi di avvertimentoattivati). ma anche opzioni specificheper ogni file; si va dalle opzioni di com-

PROVA

TURBO C++1.0

pilazione al path per il risultante file OBJo EXE, da programmi scelti tra quelliaggiunti al System menu che possonoessere necessari per portare a terminela compilazione (tipicamente un Assem-bler) alla opzione se destinare o meno ilmodulo all'overlay. Come se non ba-stasse, il file di progetto contiene infor-mazioni relative a tutti i file inclusi daaltri; se ci si posiziona su un nome difile nelle Project window, premendo labarra spaziatrice si apre una finestra conl'elenco di tutti i file inclusi; scegliendopoi uno di essi e quindi l'opzione View ilfile selezionato appare in una Edit win-dow.

Un'ultima nota. Abbiamo menzionatola possibilità di destinare alcuni modulidi un programma ali'overlay. Va sottoli-neato al riguardo non solo che sonoovviamente presenti le relative opzionisia nell'ambiente integrato che nel com-pilatore separato, non solo che il TLlNKè stato coerentemente aggiornato, masoprattutto che la Borland ha messo adisposizione dei suoi utenti la stessatecnologia VROOMM usata nel QuattroPro e nel Turbo C++: ne segue checadono alcune tradizionali restrizioni(quali l'impossibilità per una funzionepresente in una unità di overlay di chia-mare un'altra funzione in un'altra unità)e che ne guadagna l'efficienza del pro-gramma.

ConclusioniDue compilatori in uno, per il linguag-

gio più diffuso in ambito professionale eper quello più promettente, una inter-faccia utente praticamente perfetta, unaintelligente gestione della RAM sia peril compilatore che per i programmi conesso compilati, una documentazione ec-cellente nonostante qualche omissione,un ricco corredo di strumenti di sviluppoe di librerie. Si può ben sopportarel'aumento di circa centomila lire rispettoal Turbo C 2.0. L'aumento è comunquetemperato da una favorevole offerta diupgrade, valida per chi provenga da unqualsiasi linguaggio Borland.

Valutazioni monetarie a parte, il pro-dotto può essere preso in seria conside-razione sia da chi voglia dotarsi di unambiente di sviluppo più evoluto per laprogrammazione in «vecchio» o «nuo-vo» C, sia da chi voglia accostarsi alC+ + traendo beneficio dalla compila-zione diretta, senza traduzioni interme-die, nonché dal supporto offerto dallamanualistica e dai file su disco, daisemplici esempi al sorgente di una effi-cace gerarchia di classi.

117