10
Turbo Pascal 5.5 e Quick Pascal'.O di Sergio Polini A ssistiamo a due eventi egual- mente importanti: la Microsoft, abbandonando un pluriennale isolamento, ha finalmente riconosciuto che la Borland ha imposto un vero e proprio standard nel Pascal per PC; ha quindi offerto un proprio compilatore della' serie Ouick ampiamente compati- bile con il Turbo Pascal 5.0. Sia la Bor- land che la Microsoft hanno poi dotato il Pascal di strumenti per la programma- zione Object Oriented, ridando così nuova attualità ad un linguaggio che, dominatore dell'era della programmazio- ne strutturata, rischiava di divenire in 120 pochi anni troppo simile ad una mera testimonianza storica sotto i colpi di A da, C, C++, LlSP e PROLOG. Non conosciamo tutti i dettagli di questo ennesimo confronto tra i due giganti del software. È certo che la Microsoft ha dovuto prendere atto del- l'assoluto dominio della Borland nei compilatori Pasca I, ha dovuto rasse- gnarsi a combatterla sul suo stesso terreno: quello di una implementazione tanto efficace quanto lontana dalla defi- nizione ufficiale del linguaggio. Un com- mentatore americano, alle prese con il Pascal 4.0 della Microsoft, notava con una certa ironia che nel manuale, dove si proponeva un confronto con altre implementazioni, il Turbo Pascal veniva semplicemente ignorato. Ouasi fosse niente altro che stizza. In realtà si trattava di un atteggiamento almeno in parte giustificato. Fin dalla prova del Turbo Pascal 3. O abbiamo sottolineato che il Pascal di Wirth, pur se eccellente per la didattica, era ben lontano dal possedere quel minimo di flessibilità che si richiede in applicazioni reali; ab- biamo anche visto come l'implementa- zione della Borland fosse invece ecce- zionalmente fruibile: non solo un como- MCmicrocomputer n. 88 - settembre 1989

TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

Turbo Pascal 5.5e Quick Pascal'.O

di Sergio Polini

Assistiamo a due eventi egual-mente importanti: la Microsoft,abbandonando un pluriennale

isolamento, ha finalmente riconosciutoche la Borland ha imposto un vero eproprio standard nel Pascal per PC; haquindi offerto un proprio compilatoredella' serie Ouick ampiamente compati-bile con il Turbo Pascal 5.0. Sia la Bor-land che la Microsoft hanno poi dotato ilPascal di strumenti per la programma-zione Object Oriented, ridando cosìnuova attualità ad un linguaggio che,dominatore dell'era della programmazio-ne strutturata, rischiava di divenire in

120

pochi anni troppo simile ad una meratestimonianza storica sotto i colpi diA da, C, C++, LlSP e PROLOG.

Non conosciamo tutti i dettagli diquesto ennesimo confronto tra i duegiganti del software. È certo che laMicrosoft ha dovuto prendere atto del-l'assoluto dominio della Borland neicompilatori Pasca I, ha dovuto rasse-gnarsi a combatterla sul suo stessoterreno: quello di una implementazionetanto efficace quanto lontana dalla defi-nizione ufficiale del linguaggio. Un com-mentatore americano, alle prese con ilPascal 4.0 della Microsoft, notava con

una certa ironia che nel manuale, làdove si proponeva un confronto conaltre implementazioni, il Turbo Pascalveniva semplicemente ignorato. Ouasifosse niente altro che stizza. In realtà sitrattava di un atteggiamento almeno inparte giustificato. Fin dalla prova delTurbo Pascal 3. O abbiamo sottolineatoche il Pascal di Wirth, pur se eccellenteper la didattica, era ben lontano dalpossedere quel minimo di flessibilitàche si richiede in applicazioni reali; ab-biamo anche visto come l'implementa-zione della Borland fosse invece ecce-zionalmente fruibile: non solo un como-

MCmicrocomputer n. 88 - settembre 1989

Page 2: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

PROVA

TURBO PASCAL 5.5 E QUICK PASCAL 1.0

Produttore:Microsoft Corporation16011 NE 36th WayBox 97017Redmond, WA 98073-9717Distributore:Microsoft S.p.a.Milano Oltre-palazzo TiepoloVia Cassanese 224, 20090 SegrateTelefono: 02-2107201Prezzo (/VA esclusa): L. 195.000

dissimo ambiente di sviluppo interatti-va, ma anche un Pascal flessibile epotente, comodo quasi quanto un BA-SIC interpretato, sbarazzino quasi quan-to un C. Ne è risultato tuttavia anche unlinguaggio ben lontano dallo standard, alpunto che risulta proibitivo portare unprogramma Turbo Pascal in altri ambie-ti. Almeno in teoria, la Microsoft potevadunque anche avere ragione; in pratica,però, centinaia di migliaia di utenti han-no dimostrato di preferire l'efficienzaalla portabilità, e magari chi voleva laportabilità sceglieva semplicementequalcos'altro, il C in primo luogo. LaMicrosoft, visto incrinato dal solito Tur-bo il suo dominio nei compilatori C. haquindi finalmente accettato la sfida: nonsolo ha condiviso la nuova definizionedel linguaggio imposta dalla Borland edai suoi utenti, ma si è spinta oltreproponendo altre estensioni, ispirandosiall'Object Pascal sviluppato dalla Applein collaborazione con papà Wirth.

È più difficile cercare di capire cosa èsuccesso a Scotts Valley: le estensioniObject Oriented del Turbo Pascal deri-vano da un disegno da tempo tratteg-giato, o sono solo la pronta rispostadella Borland a quanto si sapeva stavaarmeggiando il concorrente? /I continuo"botta e risposta» tra i due farebbepropendere per la seconda ipotesi, mava anche riconosciuto che le estensioni

Premendo Alt-H si ac-cede all'help del OuickPascal. L'opzione Con-tents propone /'indicedi quello che è un veroe proprio manuale inlinea. Per accedere aidiversi «capitoli» si po-siziona il cursore sulloro titolo e si premeEnter. In «Pascal byExample» si ritrovanogli esempi del manua-le cartaceo, mentre«Example programs»ne propone altri. Conle opzioni «Cut» e«Paste» del menu diEdit si può trasferire inuna finestra di editingogni cosa dell'Help,esempi compresi

le Borland: potenza e facilità d'uso pre-ferite alla passiva adesione ad uno stan-dard. Si trae infatti ispirazione dall'Ob-ject Pascal ma anche dal C++; si so-stiene anzi che, così come il C si èevoluto nell'ANSI C e nel C++ facendo

L'opzione Index del-l'help del Ouick Pascalne propone un indiceanalitico. Andando conil cursore sulla letteraH e premendo Entercompare l'indice per lalettera H; analoga-mente si procede poialle scherma te dedica-te alle singole voci.

L 'help del Turbo Pa-scal 5.5. Le caratteri-stiche del linguaggiosono illustrate da breviesempi. Premendo Csi attiva il «cut & pa-ste». si posiziona ilcursore e, dopo averpremuto B, si puòmarcare una zona ret-tangolare della finestradi Help. Premendo poiEnter quella zona vie-ne copiata nella fine-stra di editing.

OOP della versione 5.5 non danno certol'impressione della fretta: si presentanoanzi più articolate e flessibili di quelledel Ouick Pascal, meglio documentate,accompagnate da un migliore supporto.Soprattutto rispettano il tradizionale sti-

L. 299000L. 299000L. 498.000

L. 79.000

L. 299.000L. 199000

Turbo Pascal 1,0

Produttore:Bor/and Intemational, Inc.1800 Green Hills RoadPO. Box 660001Scotts Valley, CA 95066-000 lDistributore:EOIA Borland Sr.l.Via Cavalcanti, 5 - 20127 MilanoTelefono: 02-2610102Prezzi (/VA esclusa).Turbo Pascal 5.5Turbo Assemb/er/Oebugger 1.5Turbo Pascal 5.5 ProfessionalUpgrade al 5.5- dalle versioni 3,4 e 5.0Upgrade al 5.5 Professional- dalle versioni 3,4 e 5.0- dal 5 O Professional

Turbo Pascal 5.5

MCmicrocomputer n. 88 - settembre 1989 121

Page 3: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

PROVATURBO PASCAL 5.5 E QUICK PASCAL 1.0

proprie anche molte caratteristiche tipi-che del Pascal, questo deve evolversitraendo ispirazione dal C: le prime ver-sioni Turbo ne avevano guadagnato iparametri variabile senza tipo, gli opera-tori di shift, le costanti tipizzate; la nuo-

va versione offre metodi statici e virtua-li, costruttori e distruttori mutuati dalC++. Viene quindi da pensare che an-che sul terreno delle estensioni OOPsia stata la Microsoft a dover cercare diadattarsi alle scelte della Borland, e nonviceversa.

Rimane certo, peraltro, che ambeduei prodotti propongono qualcosa di inte-ressante, al punto che, quali che sianostate la effettiva sequenza degli eventie le loro motivazioni, noi utenti nonpotremo che trarre vantaggio dalla con-tesa.

Il Turbo Pascal 5.5, mantenendo tota-le compatibilità con la versione prece-dente (provata a gennaio), ne potenziaalcune caratteristiche e ne offre di radi-calmente nuove: viene estesa la sintas-si della istruzione case, diventano piùefficienti i meccanismi di overlay, mi-gliora l'help in linea; vengono soprattut-to aggiunte quattro keyword, con lequali si ha accesso a quello che laBorland giustamente definisce lo stile diprogrammazione degli anni '90, cioè aquella programmazione object orienteddi cui abbiamo cercato di tratteggiareaspetti fondamentali e vantaggi nel nu-mero di luglio/agosto.

Il Ouick Pascal 1. O si propone comeun'alternativa al TP 5.0: dichiara ampiacompatibilità con questo e con la versio-ne 4.0, offrendo anche una unit GRAPHche consente di compilare programmiscritti per la Borland Graphics Interface(BGI). Le unit MSGRAPH e MSGRUTILpropongono invece capacità graficheanaloghe a quelle del C 5. 1 (quelle del

122

/I Quick Pascal è ingrado di compilare ilBGIDEMO del TurboPasca!. ma con una re-sa dei colori a voltediversa.

Una schermata di BGI-DEMO, il demo dellaBorland Graphics In-terface

OuickC 2.0 sono più potenti), e trenuove keyword donano all'utente lapossibilità di sviluppare programmi conuna sintassi analoga a quella dell'ObjectPascal del Macintosh. Il tutto in unambiente di sviluppo interattivo stileWindows, mouse compreso.

Ambedue i compilatori sono dotati diun tutorial interattivo per aiutare l'uten-te a muovere i primi passi e di uncompilatore separato per chi non gradi-sca l'ambiente integrato.

InstallazioneIl TP 5.5 richiede almeno 384K di

RAM, il OP 1.0 ne vuole 448; in entram-bi i casi si tratta di minimi che convienesuperare se si vogliono compilare pro-grammi non brevi. Il Turbo Pasca I è ingrado di utilizzare la memoria EMSeventualmente presente per il bufferdell'editor (64K). il Ouick Pasca I puòutilizzare un file di «swap» sia su EMSche su disco (si richiede tuttavia ben unMega di spazio disponibile).

Ambedue i prodotti sono dotati di unaelegante e facile procedura di installa-zione automatica, che guida l'utente sianel caso disponga di un sistema a duefloppy che di un hard disk (da considera-re comunque raccomandabile). Il TP èdotato di un programma TINST che con-sente di variare sia la configurazioneiniziale che altre caratteristiche, quali icomandi dell'editor.

Il OP provvede automaticamente asalvare in un file OP.INI alcune opzionidi configurazione, mentre un separato

programma OP.MKKEY permette di con-figurare l'editor integrato sul modello diBrief, Epsilon, EMACS, del MicrosoftEditor oppure, infine, secondo il propriogusto. La scelta della configurazione vadata una prima volta sulla riga comandoe viene poi registrata in OP.INI.

Dopo una installazione su disco rigi-do, ci si ritrova con circa 120 file e 1,7Mega di disco occupati dal Turbo Pa-scal, circa 50 file e 1,6 Mega per ilOuick Pascal (il quale potrebbe inoltrerichiedere un ulteriore Mega per il file di«swap»).

L'occupazione su disco scende rapi-damente con il Turbo Pascal se si elimi-nano o si «arcano» gli oltre 70 file diesempi, operazione meno utile con ilOuick Pasca!. in quanto la maggior partedegli esempi è incorporata nell'help delcompilatore interattivo.

DocumentazioneAbbiamo già descritto ampiamente,

nei numeri di gennaio e febbraio, l'otti-ma documentazione che accompagnavail TP 5.0 Professional: 822 pagine per ilcompilatore e 1218 pagine per l'Assem-bler/Debugger (nella edizione originale).alle quali si aggiunge ora una guida allaprogrammazione object oriented di altre118 pagine. Nei manuali si trovano effi-caci tutorial, molti esempi, una comple-

, ta guida di riferimento per tutte le carat-teristiche del prodotto, dalla procedurad'installazione alle direttive di compila-zione, dalla sintassi del linguaggio aiprogrammi accessori (MAKE, TOUCH,GREP, TPUMOVER, UPGRADE, ecc.).dalle funzioni e procedure delle varieunit a quei «segreti» della implementa-zione che possono mettere l'utenteesperto in grado di portare a termine iprogetti più «acrobatici». Il tutto dispo-nibile anche in italiano.

Rapido ed efficace anche l'help inlinea: non pretende di sostituire la do-cumentazione cartacea, ma risulta utilequando non si ricordano il nome o la

MCmicrocomputer n. 88 - settembre 1989

Page 4: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

sintassi di una qualche procedura, i det-tagli delle direttive di compilazione, ilcontenuto delle varie unit. il significatodelle opzioni dei menu, o magari i co-mandi dell'editor. Le novità della versio-ne 5.5 sono due: in molti quadri è stataaggiunta una opzione Examples checonduce ad una esemplificazione dell'u-so di ciò su cui si sta chiedendo aiuto,ed è possibile operare un cut and pasteper trasferire il contenuto dell'esempio(come ogni altra cosa delle schermatedi help) nel proprio sorgente. Comenella versione precedente, inoltre, èpresente un programma residenteTHELP: una volta partito, basta poi pre-mere il tasto che si è scelto (anche queidue strani oggetti targati F11 e F12) perattivare «da dovunque» l'help del com-pilatore. In altri termini, si dispone del-l'help dell'ambiente integrato anche sesi sceglie di usare un proprio editor e ilcompilatore separato (TPC.EXE). Lanuova versione di THELP consente per-fino un cut and paste analogo a quelloon-line.

Se gli esempi dell'help sono piuttostoscarni, quelli nei file su disco sonoquanto di meglio si possa desiderare.Nella versione 5.5 fanno spicco WINDE-MO, un efficace esempio di manipola-zione di uno stack di finestre sul video,la unit OBJECTS, su cui ritorneremo, eTCALC, una versione notevolmente po-tenziata dello spreadsheet che tradizio-nalmente accompagna i compilatoriBorland: questa volta però si tratta di unprogramma object oriented in grado digestire fino a cinque «quadranti», ognu-no di 65535 righe per 65535 colonne.Un sostanzioso, concreto, utile esempiodi OOP, con più di 8000 linee di sorgen-te (unit OBJECTS esclusa). Elementaree incompleto irwece il tutorial interatti-vo: offre i primi rudimenti a chi muova iprimi passi nell'ambiente integrato, manulla dice circa il debugging.

Completamente diverso l'approccioMicrosoft. Si sa che i Quick sono laversione per prototyping, o per l'utente

MCmicrocomputer n. 88 - settembre 1989

Un'altra schermata delBGIDEMO compilatocon il Turbo Pascal.Qui si vede cosa in-tende la Borland per«gotico}).

Ancora il BGIDEMOcompilato con il QuickPasca!. /I ((gotico" è inrealtà uno script li (ontdel QP sono gli stessidi Windows).

casuale o principiante, dei compilatori«seri», e il Quick Pascal sembra seguireuna identica filosofia; manca però ilPascal «serio». Il manualetto Up andRunning (62 pagine) guida nella fased'installazione e illustra sufficientemen-te l'uso dell'ambiente integrato, editor ehelp compresi (a proposito: ma perchéper uscire dall'help si deve premere uninnaturale Ctrl-F4?). Decisamente caren-ti invece l'illustrazione del compilatoreseparato (meno di due pagine) e deldebugger (meno di una pagina). Quantoal primo soccorre un «file» README.DOC, accessibile dall'help in linea madiverso dal file omonimo su disco,quanto al secondo ci sono solo il tutorialinterattivo (più completo quindi di quellodena Borland, ma ugualmente elemen-tare) e l'help in linea. Il secondo manua-le, Pascal by Example (289 pagine). èquello che potete indovinare dal titolo:un corso sulla programmazione in Pa-sca!. Da tale punto di vista merita un bel10, in quanto sicuramente utilissimo peri principianti grazie alla gradualità e allachiarezza della esposizione. Non è peròun reference, e si vede: è tutt' altro checompleto, le diverse unit e le direttive dicompilazione sono descritte solo in ve-loci appendici (da integrare con l'help inlinea); solo la grafica stile-Microsoft èsufficientemente illustrata, mentre sono

. decisamente troppo poche le 11 paginededicate alle estensioni object oriented.

Questo non vuoi dire che l'utente sialasciato a se stesso. Pur con alcuneeccezioni, l'help in linea colma parec-chie lacune dei manuali; è anzi un vero

PROVA

TURBO PASCAL 5.5 E QUICK PASCAL 1.0

e proprio «kolossal», molto simile aquello del QuickC 2.0. Vi sono tre tipi diaiuto: menu, linguaggio e generale (ledefinizioni sono nostre). Nel primo caso,premendo F1 si apre una finestra con laspiegazione delle diverse opzioni; nel

secondo, mentre si sta scrivendo o cor-reggendo un sorgente, F1 offre spiega-zioni sulla keyword o parola predefinitasu cui è posizionato il cursore; nel ter-zo, che si attiva con Alt-H, si può acce-dere alle opzioni Contents e Index, chepropongono diverse vie d'accesso allenumerose videate di quello che è unasorta di manuale interattivo, completodi 84 programmi esemplificativi.

Con il cut and paste si possono tra-sferire nella finestra di editing sia interiprogrammi che qualsiasi altra cosa con-tenuta nell'help. La navigazione è facilee comoda con il mouse, meno con latastiera; in ogni caso si arriva quasisempre in breve ad ottenere la rispostadesiderata. «Quasi sempre» perché al-cune cose (ad esempio la direttiva G)sono documentate solo nel «file» README.DOC interno all'help, che biso-gna quindi ricordarsi di consultare.

Questo è un piccolo peccatuccio dellaMicrosoft: se siamo ormai abituati (omeglio rassegnati) a file README cheintegrano e correggono i manuali, ladocumentazione on-line dovrebbe esse-re tutta aggimnata. È poi un po' incoe-rente costringere l'utente a cercare nel-l'help dell'ambiente integrato la docu-mentazione del compilatore separato. Indefinitiva, tuttavia, si tratta soprattuttodi una diversa filosofia: più carta (anchein italiano) e meno on-line la Borland,meno carta (in inglese) e più on-line laMicrosoft. Sarà il mercato ad esprimerela sua preferenza, e probabilmente chigradirà la filosofia Microsoft perdonerà

123

Page 5: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

PROVATURBO PASCAL ,55 E QUICK PASCAL 1.0

anche le attese che risultano talvoltanecessaria perché il Ouick Pascal troviquello che gli chiediamo nei circa 450Kdei cinque file di help su disco.

Ciò salomonicamente detto, dobbia-

mo tuttavia rilevare alcune singolari ca-renze. Manca in particolare qualsiasicenno alla Borland Graphics Interface:si dichiara una compatibilità che l'utentedeve 'verificare per tentativi, in quantonulla si dice, né su carta né on-line,delle oltre 70 procedure e funzioni dellaBGI. Solo provando si può scoprire chefont e colori hanno una resa diversa, e

che non è possibile inserire i file con ifont nel programma, come con il TurboPascaL Ed è un peccato, anche perchéla grafica del Ouick PascaI (nelle unitMSGRAPH e MSGRUTIL) è meno po-tente sia di quella del OuickC 2,0 che diquella Borland per applicazioni di bus;-ness graphics, Vi sono poi caratteristi-che del linguaggio menzionate di sfuggi-

Self. Y : = NuovoY;

Prograrr. r 1gure;U5€:Z Graph, ert;type

Punto = objectX, Y: irltegerjprocedure In1 tj

procedure Fa t ti Vederejp::-ocedure .spari sci;procedure VaiA{NuovoX, NuovoY: int.egerl;

end;Cerchie = object(Punto) (* sottoclasse di Punto *)

Raggio: integer;procedure loit; override;procedure- FattiVederej overridejprocedurE' Sparisci; override;

end; • ('"' X, Y e VaiA sono "eredi tati" da Punto *)

procedure Punto.lnlt;begir,

Self.X := 150; SlO'lf.Y := 100;end;procedure- Punto. FattiVedere;begirl

PutPixcl(Self.X, Self.Y, GetColorl;end;proceduro:- Punte,. Sparisci;b-i2gin

P'...:tPix-:l (SEcli. X, Self. Y, G.::tBkColor);end;rrocedur~ Punte·. 'Jaih(UuovoX, NuovcY: integerl;b-:-gir.

S~lf. SrariscijS",l:. ì: : = tJuc.vç.Y.jSE'li. Fatti',!'?dere;

endj

preceduro: C.::rchio. ln1 tibegir.

inherit'2'd Self. lnitjSEoIf.Fiaggi0 := 50i

er.d;procedure Cerchio. Fatt..1'Vedere;begin

CirclE:fSe:lf. X, S.eIi. Y, Self. Raggio);e-nd;proceduro? Cerchie,. Sparisci;var

Temp: .,.,ord;begin

Temp := GelColor;S-:tC01or(GetEl:Color) ;Circle'.Self.X, S"21f.Y, S~If.Ragg101iSelC))cr (TempI;

end;

varGraphDr i ver, GraphMode: integer;UnPunt.o: Punto;UnCerchio: Cerchio;

beginGraphOrlver : = Detect;DetectGraph (GraphOr i ver, GraphMode>;InitGraph(Gr.:lphDriver, GraphMode, ' .. ');if GraphResult () GrOk then Halt(l);N'=!:w{UnCerchiol;UnCerchio. Tnlt; (* X: 150, Y: 100, Raggio: 50 *lUnCerchio.FattiVedere;Re,:ldlniUnCerchio. VaiA( 300, 100\;Readln;New(UnPuntol;UnPunto.1oit; (. X: 150, Y: 100 *1UnPunto := UnC~rchioiUnPunto. F..ìttilJ.-:derei (* chiama Cerchio. FattiVedere *)ReadlniCloseGr.:lph;Res toreCRTMode;

end.

Program Ftqure;uses Graph, ert;type

Punto = objectX, Y: integer;coo5truct.')r lolt< InitX, InitY: integerl;procedure FattlVerlere; virtualiprocedure Sparisci; virtualjprocedure VaiA(NuovoX, NuovoY: integer);

eod;Cerchio = object(Puntol (* sottoc1asse di Punto *)

Raggio: integer;constructor InitllnitX, InitY, InitR: integerl;procedur~ Fa t ti Vedere; vi rtua1;procedure Sparisci; virtuali

end; (. X, Y e VaiA sono "ereditati" da Punto *1

constructor Punto. Init( InitX, InitV: int-:-gèrl;begin

X : ': Ir.itXi Y : = InitY;end;procedure Punto. r'attiV.:dere;begin

PutPi:<el1y., 'I, GetColorl;end;procedure Punto. Sparisciibegin

PutPixel(X, V, GetekColorl;end;procedure Punto. ValA(NuovoX, NuovoY: integer);begin

Sparisci; X := NUovoX; Y := MuovOYi FattiVederejend;

constructor CerchIo. Init(1nltX, InitY, InitR: integet:);begin

Punto, IniUInitX, InitY);Raggi o : = In1 tR;

endjprocedure Cerchio. Fatti t/edere;begin

Clrcle(X, Y, Raggiol;endjprocedure Coè'rchio. Sparisci;var

Temp: word;begin

Temp : = GetColor;SetColor{GetBkColor) j

Circle(X, T, Raggio);SetColor (Temp) ;

end;

const (. costante-ogge~to tipi~zata .)UnPunto: Punto = (Y.: 150j Y: 100);

varGra:t=,hDri ver, GraphMode: integer;UnCerchio: Cerchio;

beginGraphDriver : = DetectjDetectGraph (GraphDr i ver, GraphModel;Ini tGraph {GraphDrl ver t GraphMode, •..• ) iii GraphResult (> GrOk then Halt(l);UnCerchio.lnit(150, 100, 501;UnCerchio. Fa t ti Vedere;R.::adlnjUnCerchio. Va1A( 300, 100);Readln;UnPunto : = UnCerchio; (. effetto: X : = 300; Y : '" 100 '*1UnPunto. FattiVedere; (. chiama Punto. FattiVedere *1Read'lnjClosE"Graph;Re5 tore~RTMode;

end.

A sinistra un esempio di OOP in Quick Pasca!. La classe Cerchio eredita casi come sono i dati e il metodo VaiA della classe Punto da cui discende; ride finisceinvece gli altri metodi. Quando si chiama UnCerchio. VaiA, viene appunto chiamato il metodo Punto. VaiA, il quale chiama a sua volta Sparisci e FattiVedere; poichéquesti sono ((overridden", if codice che viene eseguito é quello di Cerchio. Sparisci e Cerchio.FattiVedere, nonostante che non venga esplicitamente definito alcunmetodo Cerchio. VaiA Gli ((oggetti" UnPunto e Un Cerchio rispondono ognuno ((con i propri metodi" al ((messaggio" VaiA(NuovoX, NuovoY).

A destra un esempio di OOP in Turbo Pascal. Vi sono sia metodi statici che metodi virtuali. L'inizializzazione degli oggetti awiene mediante meto,di statici detti((costruttori" i quali, proprio perché statici, ammettono dichiarazioni diverse (quanto al numero e al tipo dei parametri) da oggetto a oggetto. E possibile siadichiarare costanti-oggetto tipizzate che assegnare ad un oggetto di una classe un oggetto istanza di una classe discendente: l'effetto é quello di assegnare solo icampi che il secondo ha ereditato dal primo.

124 MCmicrocomputer n. 88 - settembre 1989

Page 6: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

New(PPtr2, Init(137, 82»; (* il constructor come secondo argomento·

PPtr4 : = New(PuntoPtr, Init(lO, O);

PPtrJ := NewIPuntoPtr); (* New come funzione *)PPtrJ .... lnit140, 200) j

beginNew( PPtrll j (. sintassi tradiz.ionale di New *)

PPtrlA.lnit(78, 187); (* chiamata del constructor *)

PROVATURBO PASCAL 5.5 E QUICK PASCAL 1.0

keyword: object, override e inherited.Con la prima si definiscono classi dioggetti quasi come si definiscono i re-cord: le due differenze sono che posso-no essere indicate funzioni e procedure

(i «metodi») oltre ai campi di dati, e chepuò essere stabilita una discendenza dauna classe precedente, nel senso chese ne ereditano dati e metodi senzabisogno di ripetere la dichiarazione. Seuna sottoclasse vuole ridefinire un me-todo della classe da cui discende, puòripeterne la dichiarazione aggiungendola keyword override, che - parere deltutto personale - è in realtà superflua,in quanto non sono possibili alternative:o i nomi dei metodi sono diversi, o ilmetodo che si sovrappone a quello«ereditato» dalla superclasse deve es-sere dichiarato nello stesso identicomodo (uguali il numero e il tipo deiparametri) e deve essere seguito daoverride. Se ci si dimentica della nuovakeyword i messaggi d'errore e i relativihelp non sono poi di grande aiuto: sug-geriscono solo di cambiare nome almetodo.

Nella definizione di una classe va ri-portata solo l'intestazione dei metodi(quasi come si trattasse di dichiarazioniforward); quando poi si implementa unmetodo, questo appare come una nor-male funzione o procedura; il nome vaperò preceduto dal nome della classe eda un punto, e l'accesso ai dati dellaclasse è possibile solo mediante unapseudovariabile Self, che va trattata co-me se fosse una variabile di un tiporecord eguale alla classe; in pratica, imetodi di una classe C possono acce-dere ad una variabile X di C con

1* il destructor come secondo argomento *}

1* chiamata del destructor *)(* sintassi tradizionale di Dispose *)

PPtrlA.Oestruct;OisposeCPPtrll;

Olspose(PPtr2, Destructl j

end.

Il Turbo Pascal estende la sintassi delle procedure New e Dispose per rendere più comodo l'uso dicostruttori ,e distruttori. Una curiosità: le procedure GetMem e FreeMem del Turbo Pascal ricalcano lefunzioni malloc!! e free!! del C; costruttori e distruttori derivano dal C++. il quale sostituisce a mal/oc!! efree!! due funzioni new!! e delete!! mplto simili alle New e Dispose del Pascal.

varPPtrl, PPtr2. PPtr3, PPtr4: PuntoPtrj

typePuntoPtr =' "'Punto;

single, double, extended e comp, gliultimi due con 19-20 cifre significative;ciò richiede la presenza del coprocesso-re 80x87, ma attivando una direttiva Equesto viene perfettamente emulato.Nel Ouick Pascal la direttiva N agiscediversamente: se attivata richiede lapresenza del coprocessore, altrimenti sidispone ugualmente di tutti i tipi, ma

1'80x87 non viene emulato, con la con-seguenza non solo che extended ecomp non vanno oltre le 15-16 cifresignificative, ma anche che il coproces-sore non viene utilizzato pure se pre-sente.

Ouanto al resto, la compatibilità sem-bra effettivamente molto alta, con alcu-ne piccole ma interessanti estensioni:l'istruzione case accetta selettori anchedi tipo longint. le funzioni predefiniteFirst e Last ritornano il primo e "ultimoelemento di un tipo scalare, si puòaccedere ad una variabile dichiarata inun blocco esterno pure da un blocco incui ne esista un'altra con lo stessonome, premettendo il nome del bloccoe un punto (se Al è dichiarata in unaprocedura Pl, e se P2, nidificata in Pl,dichiara un'altra variabile A l, si può ac-cedere alla prima con Pl.A 1); esisteinfine un tipo CSTRING compatibile conil classico tipo STRING, ma senza unbyte iniziale di lunghezza e con un bytezero alla fine: come dice il nome, lestringhe del C. Dal punto di vista dellenovità «minori», la Borland ci concedeinvece solo una istruzione case conselettori di tipo word.

Le principali novità sono comunquerappresentate dalle estensioni objectoriented: con pochissimi ritocchi al lin-guaggio, ambedue i compilatori consen-tono all'utente di affacciarsi in un mon-do completamente nuovo.

Nel Ouick Pascal abbiamo tre nuove

Implementazione del linguaggioDue compilatori non standard, ma

conformi ... allo standard Borland. Perquanto detto sopra non è agevole deter-minare quanto il Ouick PascaI sia com-patibile con il TP 5.0, ma qualcosa alme-no è evidente: non è possibile compila-re programmi che richiedano l'overlay ole unit TURB03 e GRAPH3, colori efont della BGI hanno una resa diversa,non si possono incorporare i font nei fileEXE, non si possono <dinkare» file OBJprodotti dal Turbo C (e nemmeno dalOuickC; solo Assembler). Un'altra curio-sa differenza la troviamo nel trattamen-to dei numeri non interi. Nel TurboPasca I si può agire su una direttiva N:se disattivata, è disponibile solo il tiporeal, se attivata si dispone anche di

ta nel manuale ma assenti on-line (il tipopointer). altre illustrate solo nell'help (leistruzioni e la direttiva inline, lakeyword interrupt, le variabili absolu-te); manca del tutto la documentazionedei parametri variabile senza tipo e diparametri e variabili procedurali. Tuttiaspetti cruciali per una piena compatibi-lità con il Turbo Pasca!. In altri termini,tale compatibilità è dichiarata ma nondocumentata, ed è lasciato all'utente ilcompito di scoprire cosa il Ouick Pasca Iaccetta e non accetta (stando alle no-stre prove, tutti gli aspetti ora menzio-nati sono «compatibili»). Manca infinel'accesso all'help «da fuori», mancacioè un omologo del THELP della Bor-land.

Ultima componente della documenta-zione sono i messaggi d'errore: nonsempre il Ouick Pasca I è efficace comeil Turbo Pasca!. Nel corso della prova, ciè capitato di digitare un programmaproposto dal manuale copiando distrat-tamente un banale errore: veniva chia-mata una funzione senza nulla fare delsuo risultato, come se fosse stata unaprocedura (l'errore, non corretto nei RE-ADME, si trova in Pascal by Example,pagina 174, penultima riga del sorgen-te). Ne è seguito il messaggio Invalidvariable reference. Mistero. Chiesto aiu-to con Fl, è apparso un messaggiosecondo il quale veniva passato qualco-sa di diverso' da una variabile ad unaprocedura che aspettava un parametrovariabile. Non c'entrava niente. Scoper-ta poi (per puro mestiere ...) la veranatura dell'errore, abbiamo provato aproporne uno simile al Turbo Pascal:l'identico oscuro messaggio d'errore,ma un diverso help, secondo il quale«molto probabilmente» si stava cercan-do di usare una funzione senza «derefe-renziarne» il risultato. Non proprio idea-le quanto a chiarezza, ma più aderentealla effettiva natura del problema. Avre-mo modo di rilevare tra breve altri pic-coli punti deboli nei messaggi d'erroredel Ouick Pasca!.

MCmicrocomputer n. 88 - settembre 1989 125

Page 7: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

PROVATURBO PASCAL 5.5 E QUICK PASCAL 1.0

«Self.X». Analogamente per l'accessoagli altri metodi della stessa classe. Sela chiamata di un metodo dichiaratooverride è preceduta dalla keyword in-herited, si chiama invece il metodo conlo stesso nomédella classe immediata-mente antecedente. È possibile definireuna gerarchia di classi articolata su piùlivelli: da A si può derivare B, da B sipuò derivare C; gli oggetti «istanza»della c1&sse C ereditano dati e metodinon «overridden» delle classi superiori,ma possono avere accesso ai metodi«overridden» solo della classe immedia-tamente superiore nella gerarchia: se siprova a chiamare un metodo «overrid-den» di A da un oggetto della classe C ilcompilatore si rifiuta, avvertendoci che... abbiamo dimenticato una parentesitondal

Per «oggetti istanza di una classe» siintendono variabili il cui tipo sia unaclasse. Per creare tali variabili non bastaperò dichiararle, in quanto sono unasorta di puntatori. Se si dimentica dicrearli con un New il crash è assicurato,e proprio per questo si dispone di unadirettiva M che, se abilitata (come è perdefault). genera un errore di esecuzionese si accede ai metodi di un oggettonon allocato con New. La documenta-zione non dice se si può tranquillamen-te disattivare la direttiva dopo il debug-ging (la sua attivazione è invece sempreraccomandata). ma dalle nostre primeprove risulterebbe possibile. Tanto sem-brano puntatori gli oggetti, che asse-gnando un oggetto della classe C aduno della classe B questo quasi «diven-ta» un oggetto della classe C: se dichia-ro oggetti appartenenti alle classi Puntoe Cerchio (questa discendente da quel-la). se li alloco e li inizializzo, se poiassegno un Cerchio a un Punto e chia-mo per il Punto il metodo FattiVederecomune alle due classi, vedo un cerchio(con il Turbo Pascal vedrei un puntonella posizione in cui sarebbe stato ilcentro del cerchio).

Per dirla col gergo del Turbo Pascal, imetodi del Ouick sono tutti «virtuali»: siadattano cioè all'oggetto a cui vengonoinviati (come «messaggi»). in quanto ilcodice che viene effettivamente esegui-to con la chiamata del metodo vienedeciso al momento della stessa esecu-zione, non già durante la compilazione.

Nel Turbo abbiamo invece, oltre aduna simile keyword object. la possibilitàdi dichiarare virtual solo alcuni metodi,lasciando gli altri «statici» (il codice cheverrà eseguito con la loro chiamata èdeterminato al momento della compila-zione). Ciò consente un po' di efficienzain più, in quanto ci si può limitare adusare i metodi virtuali solo dove effetti-vamente ce n'è bisogno. Non vi è ne-

126

cessità, inoltre, di allocare con New glioggetti se non quando si vogliono adot-tare strutture di dati dinamiche; si com-portano insomma come variabili normali(sono definibili anche costanti-oggettotipizzate, impossibili in OP). con l'unicarestrizione che bisogna chiamare unparticolare tipo di metodo, detto con-structor, per ogni variabile che siaistanza di una classe contenente metodivirtuali. Se non lo si fa il crash è assicu-rato, e proprio per questo è stata estesala direttiva R che, se attivata, controllaanche che non si acceda a variabili delgenere prima di chiamare un con-structor. Dopo il debugging la direttivapuò essere tranquillamente disattivata.Esiste anche nel Turbo Pascal un Se/f, ilcui uso è però opzionale e destinatounicamente ad eliminare possibili ambi-guità; si possono chiamare liberamenteanche i metodi «overridden» delle classisuperiori.

Se un metodo è statico (come devo-no essere i «costruttori»). una sotto-classe vi può sovrapporre propri metodicon lo stesso nome ma con dichiarazio-ne anche diversa quanto al numero e altipo dei parametri. Se è invece virtualnon solo ciò non è possibile, ma ladichiarazione va ripetuta per tutte leclassi discendenti, keyword virtualcompresa. Anche questa - parere an-cora del tutto personale - ci sembrauna inutile ridondanza, tanto più chenon è necessaria nel linguaggio da cui ilTurbo Pascal ha tratto ispirazione: inC++ basta dichiarare come «virtuale»un metodo solo la prima volta, essendopoi scontato (appunto perché non visono alternative) che il metodo saràvirtuale in tutte le sottoclassi. Almenose dimentichiamo la keyword il messag-gio d'errore non lascia dubbi: «VIRTUALexpected».

La maggiore flessibilità di cui si godenella dichiarazione dei metodi stati ci hauna utile conseguenza: è possibile defi-nire per ogni classe un metodo di inizia-lizzazione con. un nome standard (laBorland usa /nit). ma con numero e tipo

Con il Ouick Pascal sipossono aprire più fi-nestre di editing. Leopzioni Cascade e Ti-led del menu Viewconsentono di sceglie-re tra finestre l'unasull'altra re di andarealla prima con Alt-I, al-la seconda con Alt-2,ecc.) o accostate. Atti-vando una opzione Pa-scal Syntax dal menuEdit. vengono eviden-zia ti in colori diversi leparole riservate, lestringhe e i commenti.

di parametri adeguati ai vari oggetti:passerò le coordinate X e Y ad unpunto, le coordinate e il raggio ad uncerchio, il numero degli elementi ad unarray dinamico, l'elenco delle opzioni adun menu, e così via, sempre con /nit,senza bisogno di inventare per ogniclasse un nome diverso per la procedu-ra di inizializzazione. Non è proprio ilfunction over/oading del C++, ma al-meno un po' gli assomiglia. Con il OuickPascal ciò è impossibile, in quanto tutti imetodi sono virtuali; ne segue che o siinventano tanti nomi (ma non si sapreb-be che fare delle procedure di inizializza-zione delle classi superiori, che verreb-bero comunque «ereditate»). o si facome la Microsoft, che nei suoi esempion- line usa tutti metodi /nit senza para-metri, limitandosi ad assegnare valoricostanti alle variabili di classe (con ovviopregiudizio della riusabilità del codice).

La quarta nuova keyword del TurboPascal è destructor, I «distruttori» so-no necessari solo nel caso di oggettiallocati dinamicamente, in quanto guida-no il processo di deallocazione dellamemoria passando alla procedura Di-spose l'informazione relativa alla quanti-tà di memoria occupata da un oggetto,non determinabile a priori per oggettiche usino metodi virtuali. La sintassi diNew e Dispose è stata anzi estesa perconsentire un più agile uso di puntatori,costruttori e distruttori con oggetti allo-cati dinamicamente.

La Guida OOP del Turbo Pascal spie-ga poi con dovizia di esempi la compati-bilità tra oggetti appartenenti a classidiverse: si può assegnare ad un ogget-to istanza di una classe anche un ogget-to istanza di una classe da questa di-scendente (succede semplicementeche vengono assegnati solo i «campi»che il secondo ha ereditato dal primo).si può passare ad una procedura chevuole un parametro di una certa classeanche un oggetto istanza di una classediscendente. Il tutto senza che un og-getto «diventi» un altro.

Concludiamo segnalando che la Gui-

MCmicrocomputer n. 88 - settembre 1989

Page 8: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

OR <c."",,1) < llelp )'-

Set BruIl"" l.t

(.) Bruk .t Locat.oft( ) 8r-ea.k 4Ilt l..oeIItlOrl il Exp sioft l. true( ) are.k •.•.he1J Exporoen 1ft i. true

Locati",,: IB·~JQJRE. 173)

Exr-J",,: UVA

da illustra in dettaglio anche l'imple-mentazione delle estensioni OOP, finoa proporre esempi di metodi scritti inAssembler.

LibrerieGià conosciamo le otto unit predefini-

te del Turbo Pascal (SYSTEM, CRT,DOS, PRINTER, GRAPH, OVERLAY,TURB03 e GRAPH3). Cinque di questesi ritrovano anche nel Ouick Pasca I(mancano OVERLAY, TURB03 e GRAP-H3). accanto alle due per la grafica stile-Microsoft (MSGRAPH e MSGRUTIL) ead altre quattro in sorgente (MOUSE,BIGHEAP, MENU e TURTLE).

MSGRAPH e MSGRUTIL consentonodi scrivere programmi grafici in modoindipendente dall'hardware in modoanalogo a quanto può farsi con la BGI,con qualcosa in più per quanto riguardai sistemi di coordinate (molto flessibili).con qualcosa in meno per la businessgraphics (niente grafici a barre o a tor-ta). MOUSE, MENU e TURTLE offronoquello che è facile indovinare: gestionedel mouse e di menu a tendina, unaturtlegraphics non compatibile con quel-la offerta dalla GRAPH3 del Turbo Pa-sca!. BIGHEAP, infine, contiene imple-mentazioni di GetMem e FreeMem checonsentono di allocare e deallocareblocchi di memoria più ampi di 65520byte. Un corredo più che accettabile,ma limitato alla programmazione tradi-zionale.

La Borland propone invece il sorgentedi una unit OBJECTS che rende concre-ta la possibilità di programmare objectoriented. Il Pascal infatti non consentedi creare file di oggetti. Meglio: il OuickPasca I non si oppone alla dichiarazionedi un file simile, ma se si prova ascrivervi un oggetto si scrivono in realtàquattro byte (un puntatore!). e se siprova a rileggere e usare quei byte siincorre in un errore di esecuzione. IlTurbo Pascal awerte subito, sin dallacompilazione, che certe cose non sipossono fare, ma soprattutto ci dà una

MCmicrocomputer n. 88 - settembre 1989

" debugger integratodel Ouick Pascal offrela possibilità di impo-stare dei breakpointcondizionati (scattanoquando diventa verauna data espressione)e incondizionati (quan-do si raggiunge unadata istruzione).nonché di tenere sottocostante osservazioneil valore di alcune va-riabili.

" debugger integratodel Turbo Pascal di·spone di breakpoint in·condizionati e di unafinestra di "watch"per tenere sotto os-servazione il valore dialcune variabili.

soluzione: la unit OBJECTS offre infatti,accanto ad una classe «lista generica»,anche una classe stream (anch'essaispirata dal C++): i suoi metodi rendo-no possibile aprire, chiudere, scrivere eleggere file di oggetti. Tre ulteriore unitCARDS, FORMS e SLiDERS e un pro-gramma CARDFILE ne offrono un sug-gestivo esempio.

Ambiente di sviluppoConosciamo bene l'ambiente integra-

to del Turbo Pascal e altri ambientiOuick. Il Ouick Pasca I offre qualcosa inpiù: la possibilità di aprire diverse fine-stre di editing, sia su più sorgenti chesu zone diverse di uno stesso file (inquest' ultimo caso è però necessariocreare prima una finestra vuota con Alt-File-New). Ogni finestra può essere«zoomata» e poi riportata alle sue di-mensioni originali con Ctrl-F10. Si puòanche lanciare il compilatore indicandofino a nove file sulla riga comando: perognuno viene aperta una distinta fine-stra, e ci si può spostare rapidamentedall'uno all'altro premendo Alt e un ta-sto da 1 a 9. Si può scegliere tra fine-stre «a cascata» (una sopra l'altra) oaccostate (ad ognuna una distinta zonadello schermo; soluzione efficace so-prattutto se ci si limita a due o trefinestre). Il Turbo Pascal offre 'solo lacosiddetta «pick lis1» (già discussaquando provammo la versione 4.0): nonaltrettanto comoda e un po' più lenta,visto che per passare da un file all'altrobisogna accedere al disco.

PROVA

TURBO PASCAL 5.5 E QUICK PASCAL 1,0

Rimane invece alla Borland il primatodella velocità di compilazione, in quantoil Ouick non è in grado di compilare inmemoria: anche un programma «vuo-to» (un begin subito seguito da end)richiede qualche secondo; su un c10ne

AT a 10M Hz con disco da 40 millise-condi occorrono circa 15 secondi per1500 linee di sorgente, solo un terzocon il Turbo Pasca!. La compilazioneseparata non fa invece registrare diffe-renze significative: a volte un po' piùveloce l'uno, a volte l'altro; si può solorilevare che spesso il file eseguibileprodotto dal Ouick Pascal è più volumi-noso (il massimo l'abbiamo registratocompilando il BGIDEMO della Borland:89488 byte contro i 41920 generati dalTurbo Pascal; forse in questo caso lacolpa è tutta della unit GRAPH).

Anche le capacità del debugging inte-grato sono all'incirca equivalenti, pur secon qualche differenza di impostazione.Molto dipende dal gusto personale: puòad esempio risultare comoda la possibi-lità di scrivere direttamente nella fine-stra di debug i nomi delle variabili datenere sotto controllo, come consente ilOuick Pascal, può risultare più chiara epiù agile la meccanica della modifica deivalori di queste variabili nel Turbo Pa-sca!. Due note tuttavia si impongono.Dopo aver visto il debugger integratodel OuickC 2.0, quello del OP sembracostretto a recitare il ruolo del parentepovero: non si può aprire una finestradedicata alle variabili locali, non si puòaprire una finestra sui registri del micro-processore, come invece sarebbe tantocomodo per le istruzioni inline. Il OuickPasca I non può poi usare un debuggerseparato (neppure il CodeView). ed èchiaro il vantaggio che il potente TurboDebugger conferisce al compilatore del-la Borland, tanto più ora che è stato

127

Page 9: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

PROVATURBO PASCAL 5.5 E QUICK PASCAL 1.0

arricchito di nuove opzioni per visualiz-zare la gerarchia delle classi di un pro-gramma e per sbirciare dentro gli ogget-ti.

PrestazioniDue parole infine sulla qualità del

codice prodotto. Abbiamo condotto nu-merose prove, ben intenzionati a pubbli-care i risultati di un vero benchmark,rielaborazione di quello approntato daWirth per i compilatori Modula-2. Abbia-mo però rinunciato, in quanto pochicentesimi di secondo non significanoproprio nulla. Sembra che il Ouick sia unpo' più veloce quando esegue le quattrooperazioni sugli interi o quando assegnavalori agli elementi di una matrice; sem-bra che il Turbo sia più veloce nellequattro operazioni sui sing/e o nelleassegnazioni agli elementi di un arraymonodimensionale. Ma non serve amolto prodursi in tabelle con tempi deltipo 8,19 secondi contro 7,97 o 7,85secondi contro 8,34 quando un'opera-zione viene ripetuta per diecimila volte.Di analogo ordine di grandezza è il mi-glioramento delle prestazioni che ilOuick Pasca I offre a chi ha almeno un80286: attivando una direttiva G si ap-profitta ove possibile delle più efficientiistruzioni di quel microprocessore. Ab-biamo anche controllato il codice ogget-to, per riscontrare che il OP ripropone lestesse ottimizzazioni del concorrente.

Le uniche differenze significative siosservano nell'aritmetica sui rea/ e nellefunzioni trascendenti (su sing/e, rea/ edoub/e; non abbiamo provato con ex-tended e comp in considerazione delladiversa precisione offerta dai due com-pilatori). Ouanto ai rea/, tutto dipende dacome si imposta la direttiva N del TurboPascal: se si attiva l'emulazione delcoprocessore le operazioni aritmetichesono un venti per cento più lente chenel OP, altrimenti sono più veloci del50%; quanto a seni coseni e logaritmi,il Ouick Pascal è sempre nettamentepiù lento: per calcolare ventimila seni ocoseni richiede un minuto e venti se-condi, un minuto e quaranta per venti-mila logaritmi; il Turbo Pasca I si fermarispettivamente a 37 e 49 secondi(sempre su un AT a 10 MHz).

Parlando di efficienza del codice biso-gna poi fare anche tutto un altro discor-so: quanto «costa» la programmazioneobject oriented? Abbiamo accennatonel numero scorso ai suoi innegabilivantaggi, ma è lecito aspettarsi che imetodi virtuali, in quanto devono trova-re al moménto della esecuzione il codi-ce da eseguire, comportino qualcheperdita di velocità. Così sembrerebbe, ecosì ha sostenuto perfino Byte. In realtà

128

non basta fermarsi a misurare il mezzosecondo o i due secondi circa in più(tanta è la differenza tra l'esecuzione diTRECENTOSESSANTAMILA chiamatedi procedura e altrettante chiamate dimetodi virtuali, con nessuno o con quat-tro parametri); occorre considerarequanto la OOP ci offre di più e dimeglio. In concreto, abbiamo provato atradurre in programmazione tradizionalel'esempio di «lista di qualsiasi cosa»proposto a luglio: ne è venuto fuori uncodice zeppo di if e case, e soprattuttoben difficilmente modificabile se nonriscrivendo tutto quanto; altro che ag-giungere un tipo senza dover nemmenoricompilare le unit degli oggetti-base!Come se non bastasse, non abbiamoriscontrato nessuna differenza nei tem-pi di esecuzione! In altri termini, cercaredi realizzare in modo tradizionale quelche si può fare con la OOP è una verapena per il programmatore (Jobs non hascelto l'Objective-C per il suo NeXT soloper tener dietro ad una moda). e se ci siprova si deve comunque «appesantire»il codice. Meglio allora seguire la via piùfacile, senza temere perdite di efficien-za che in realtà non vi sono.

ConclusioniDue prodotti interessanti, In quanto

ambedue consentono di appropriarsidelle più avanzate tecniche di program-mazione senza traumi, senza dover im-parare nuovi linguaggi.

La Borland non ha fatto altro checontinuare per la sua strada. Sostenen-do che C e Pascal devono migliorarsil'uno prendendo esempio dall'altro, do-po aver messo un po' di C fin nellaprima versione del suo compilatore,propone ora ai suoi utenti una evoluzio-ne analoga a quella che il C++ proponeai fedeli del C. E lo fa alla sua maniera:con una implementazione originale macoerente, potente ma efficiente, sup-portata da ottimi strumenti di sviluppo edi debugging, ampiamente documenta-ta e arricchita da esempi che vanno ben

La nuova versione delTurbo Oebugger è ingrado di visualizzare/'intera gerarchia delleclassi di un program-ma OOP e di ispezio-nare i dettagli diognuna.

al di là del semplice «demo». Il tuttosenza aumentare il prezzo, offrendo an-zi interessanti possibilità di upgrade;segnaliamo ad esempio che chi passas-se dalla versione 5.0 normale alla 5.5Professional pagherebbe in pratica solol'Assembler/Debugger, beneficiando co-sì di un upgrade gratuito. Può magarirestare l'indecisione se optare per il 5.5normale o Professional (comprendenteanche il Turbo Assembler/Debugger1.5). ma va riferito che, discutendonecon la EDIA, è emerso che molti hannoacquistato prima il 5.0 normale e poi inun secondo tempo il Debugger, con ilrisultato di spendere inutilmente cento-mila lire in più.

Il Ouick PascaI è un compilatore am-piamente aderente allo standard di mer-cato e in grado di produrre codice dibuona qualità. Il suo limite principale èforse quello di essere «troppo pocoMicrosoft» e «troppo poco Borland».Troppo poco Microsoft per via dellarinuncia alla emulazione software delcoprocessore numerico, della mancanzadi un debugger separato, della incom-pleta documentazione, delle piccole in-.coerenze nell'help in linea e delle picco-le oscurità di alcuni messaggi d'errore;non ha la stessa qualità del OuickC 2.0- che offre un eccellente debuggerintegrato e buone possibilità di businessgraphics - e nulla svela della unitGRAPH, con la quale si avrebbe acces-so alla ricca libreria grafica della BGI.Troppo poco Borland perché tra leestensioni OOP dei due compilatori nonc'è paragone: tanto scarne ed essenzia-li quelle del Ouick Pascal, quanto artico-late ed efficaci quelle del Turbo Pascal,anche meglio documentate e supporta-te. C'è da scommettere che prima o poivedremo un Ouick Pascal 2.0 di benaltra fattura. Già la versione 1.0 ha co-munque qualcosa da dire, grazie al mi-glior editor e al prezzo più conveniente,e potrà sicuramente giovarsi della possi-bilità di girare sotto Windows o di farsiusare con il mouse.

MCmicrocomputer n. 88 - settembre 1989

Page 10: TurboPascal e QuickPascal'Turbo Pascal 1,0 Produttore: Bor/and Intemational, Inc. 1800 Green Hills Road PO. Box 660001 Scotts Valley, CA 95066-000 l Distributore: EOIA Borland Sr.l

Non accontentatevidi una stampante qualunque, scegliete:

MANNESMANNMT 905 • Velocità 6 pagine alminuto • Volume di stampa 3.000 a~ ti' , ~ 'tipaginemese_Risoluzione300dpì ·AUA,~7/11A 7 IlA AC?C?/l'/~ 'll.lnterfacciaparallela,serialeeR5 (Arrl/. tA'14 '" (AOOVfll1. V422.512 Kbyte standard

opzionale • Volume di stampa5.000 pagine mese • VersioneDesk Top Publishing con linguaggiPDL e DDL • Risoluzione 300 dpi

MT910 e 910 UPS.VelocitàIO pagine al minuto. Doppio cas-setto alimentazione fogli. Stampasu lucidi, buste. etichette. 512 Kstandard • Espansione 1,5 Mbyte

STAM PA NTI LA SfR Lil: tecnic~ di stampa ?asata s~1raggio laserè In continua evoluzIOne e rIsulta sempre

più vincente per chi richiede: alta qualità di stampa, assoluta silenziosità, grande ca-pacità grafica, diversificazione delle fonti di stampa e velocità di produzione. In que-sto settore tecnologico la Mannesmann Tally propone diversi modelli orientati altrattamento testi e al DTP.

I

MANNESMANN TALL Y srl - 20094 Corsico (MI) - Via Borsini, 6 - Te!' (02) 4502850/855/860/865/870 - Telex 311371Tally I - Fax (02) 4500934.00144 Roma - Via M. Pe-roglio, 15 - Te!' (06) 5984723/5984406 - Fax (06) 5880914 .10099 San Mauro (TG) - Via Casale, 308 - Te!' (011) 8225171.40121 Bol0!1na - Via Amendola, 8 - Te!' (051)523380 • 35133 Padova - Via Ponlevigodarzere, 250 - Te!' (049) 8870038 • 50127 Firenze - Via Caduti di Cefalonia, 52 - Te!' (055) 433994