Quick8ASIC 8asic · 2010-02-03 · parole di Buzzati in un suo famo-so racconto (Il cane che ha...

8
Microsoft Quick8ASIC Borland Turbo 8asic di Raffaello De Masi B asic, bel suoi d'amore» cantavano i legionari alle prese con le catene del Modula 2 e con le liste simbo- liche del Lisp. E, per usare le parole di Buzzati in un suo famo- so racconto (Il cane che ha visto Dio) ({Mai che non ci fosse uno che non dicesse: 'Ah, i bei tempi', sospirando, e non c'era nessuno 80 che non capisse a volo i bei tempi in cui ognuno poteva fare il suo comodo» quanta gente vorrebbe continuare, in tutte le mani- festazioni della vita, a fare a modo suo, secondo il suo personale piacere! Oggi parla- re di Basic è divenuto poco di moda, ognuno si professa cultore di questo o quel raffinato idioma informatico (e magari nasconde il suo bel listatone basicale sotto il pietoso velo di un compilatore) e, nei più raffinati salotti non si fa altro che parlare dell'ultimo nato di turno degli idiomi informatici che ({bla bla bla ... ». Bene, oggi consentiteci di non essere ipocri- ti, e se è vera (come è vera) la considerazio- ne che nessun costruttore si sognerebbe di costruire una sua macchina priva di questo MCmicrocomputer n. 70 - gennaio 1988

Transcript of Quick8ASIC 8asic · 2010-02-03 · parole di Buzzati in un suo famo-so racconto (Il cane che ha...

Microsoft Quick8ASICBorland Turbo 8asic

di Raffaello De Masi

B asic, bel suoi d'amore» cantavanoi legionari alle prese con le catenedel Modula 2 e con le liste simbo-liche del Lisp. E, per usare leparole di Buzzati in un suo famo-

so racconto (Il cane che ha visto Dio) ({Maiche non ci fosse uno che non dicesse: 'Ah, ibei tempi', sospirando, e non c'era nessuno

80

che non capisse a volo i bei tempi in cuiognuno poteva fare il suo comodo» quantagente vorrebbe continuare, in tutte le mani-festazioni della vita, a fare a modo suo,secondo il suo personale piacere! Oggi parla-re di Basic è divenuto poco di moda, ognunosi professa cultore di questo o quel raffinatoidioma informatico (e magari nasconde il suo

bel listatone basicale sotto il pietoso velo diun compilatore) e, nei più raffinati salotti nonsi fa altro che parlare dell'ultimo nato di turnodegli idiomi informatici che ({bla bla bla ... ».Bene, oggi consentiteci di non essere ipocri-ti, e se è vera (come è vera) la considerazio-ne che nessun costruttore si sognerebbe dicostruire una sua macchina priva di questo

MCmicrocomputer n. 70 - gennaio 1988

CoP!lrJght H1CI'OSOrtCo~p. 1'82,1'83,1'84,1985,1'86,1'81l'N!ss ShlIH'JotSc to pNnl thls seNen.

Press Esc to "alce IhlS beli 90 away.P~fSS il lo Ylew he hell' wlndow.,..------1 EnleNng COMllandsin QllIeldlASlC 1----.,

Enler eo""ands ~ selectIng lhe" 11'0" a ~nu.IIfnu nlMS aH Itstecl at tM 101' 01 tM clispl y,Each IlI!nu contalns a Itst of COMands,To cllSpl~ the eOMands In a Joenu:

L Holtl clOllll t!l@Alt key.lo ~tl~~r at~~~tl~;I:~':~u~he Joenu nvoe,

1. Un the Up/Downclil'fct1on keys to hlghhghtthe COlIIW\cI(In l'fyeMe Yldeo>'

2, Prtss Enter, Uht COManclWIII !le e)(ecutecl)lo Mlee a Joenu go away Wlthout e)(ecut1ng il. COMancl:

• Prtss the [sc key.

To vut QUlckBASIC: Select QUlt 11'0" lhe File IlI!nu.lo Loacl a ProVaM: Select Laacl 11'0" the file IlI!nu.

bistrattato linguaggio (HP, con il top delle suemacchine, tra cui il prestigioso 9000, haintrodotto una nuova release del suo Basicdalle prestazioni impressionanti) e se consi-deriamo che, nel mondo, sono stati pubblica-ti più di 15.000 titoli sull'argomento (comeriferisce autorevolmente il manuale del TurboBasic), dobbiamo per forza di cose conclude-re che senza Basic molti san toni (o autopre-sunti tali) del modo informatico starebbero inidilliaca quiete a foraggiare ruminanti sullealte montagne dell'lrpinia.

La reticenza nei confronti del Basic non ècomunque del tutto priva di fondamento ma,secondo chi scrive, gli errori che hanno por-tato a guardare con diffidenza questo idiomastanno altrove; il Basic è, senza ombra didubbio, di gran lunga il linguaggio più sempli-ce da imparare e da usare; ciò ha consentitoad una messe innumerevole di utentl~ senzaalcun background culturale nel campo del-l'analisi e della tecnica di programmazione, diredigere programmi senza alcun costruttologico, frutto di una enorme fatica da parte dichi li aveva creati, e privi di qualsiasi leggibi/i-tà per un qualsivoglia utente. Ciò ha portato aconfondere il linguaggio col prodotto, in ciòconfortato dal proliferare di numerose rivisteche hanno fornito a piene mani ciarpameinsulso e senza alcun nesso logico.

Da qui a bollare il Basic di ignominia ilpasso è stato breve. Perché ciò non è :wc-cesso con altri linguaggi (ipocritamente a/>/to-definentisi strutturati, au toesplican ti, autodo-cumentanti, ecc. ecc.)? Solo perché al ({C"od al Cobol od allo stesso Fortran hannolavorato generalmente persone dalla solidacultura informatica, che hanno prodotto ma-teriale di pregio, e, soprattutto, non hanno laconcorrenza (si fa per dire) del solito pro-grammatore della domenica. Bisogna am-mettere con molta onestà che è altrettantofacile scrivere un programma guazzabuglio,incomprensibile e pieno di turpitudini, in Pa-scal che in Basic; questione di ({manico",come si dice dalle mie parti. Perciò, nonfacciamo di ogni erba un fascio, e se è vero,come fermamente credo, che almeno 1'80-90% del software verticale prodotto da pro-grammatori autonomi (parlo di programmato-ri seri I) è redatto in Basic, anche se poicompilato, siamo sinceri, ed accettiamo diprofessare le nostre tendenze (lo fanno i({diversi", a ragione; perché dovremmo ver-gognarci nel nostro habitat programmatorio,con alle spalle un linguaggio che, oggi, nonha nulla da invidiare ad altri, ma ·non sempreè il con trario I).

Dai tempi del 1964, quando ad Hanover,nel New Hampshire, Kenemye Kurtz davanovita, assieme ad un gruppo di studenti, al piùfamoso ed utilizzato linguaggio di program-mazione, molta acqua è passata sotto iponti.Oggi il Basic è divenuto un linguaggio raffina-to, potente, elegante, dotato di tutte le più

Turbo Basie

80rland Internationallnc.4585 Scotts Val/ey OriveScotts Val/eyLA 95066

Edia 80rland s.r.l.Viale Cirene, Il20135 MilanoPrezzo L. 199.000memoria minima necessaria 384K

QuiekBASIC

Microsoh Corpo16011 NE 36th Way80x 97017 - RedmondWA98073

Microsoft ItaliaVia Michelangelo, l20093 Cologno Monzese (MI)Prezzo L. 175.000memoria minima necessaria 256KUpgrade da 3.0 a 4.0: L. 70.000

sofisticate feature proprie degli idiomi piùavanzati; è strutturato, può essere compila-to, può gestire dinamicamente la memoria,può essere ricorsivo, può accedere diretta-mente ai livelli più bassi di programmazione.È divenuto portatile da macchina a macchina(si veda l'articolo su True Basic in Mac Cor-ner di dicembre), è strutturato in manieramolto avanzata, ha abbandonato i numeri dilinea, possiede caratteristiche di utilizzo nelcampo matematico impensabili qualche annofa (ricordo che nel 1982 comprai, per circa 3/4 di milione una ROM matrix per il mio HP

PROVA

OUICKBASIC - TURBO BASIC

87, mentre il True Basic per il Mac, unlinguaggio completo, con un'altrettanto effi-ciente gestione delle matrici costa oggi circadieci volte di meno). Ouale migliore occasio-ne che provare, oggi, un po' del meglio chec'è in circolazione? E come non iniziare pro-prio con le due case che oggi sono divenute,de facto, le produttrici per antonomasia dilinguaggi, vale a dire la Borland e la potentis-sima Microsoft?

Il Microsoft QuicKBASICOuick Basic, giunto alla edizione 3.0, è

racchiuso in una doppia coppia di dischetti,differenti solo per le macchine di destinazio-ne (se cioè prive o no di coprocessore mate-matico) e si presenta come un ambiente disviluppo completo più che come un semplicelinguaggio. Potente, facile da imparare edusare, in possesso di una interfaccia utentesemplice da utilizzare e dotato di inumerevolifacility, OB include un editor di schermoefficiente, un compilatore in linea immediato,un debugger di prim'ordine, un linker com-pletamente (volendo) invisibile all'utente; inaltre parole (così come, d'altro canto, avvie-ne anche in TB) la classica trafila edit-compi-le-debug avviene senza mai uscire del-l'ambiente, magari, volendo, affidandosi adun esteso uso del mouse. La compilazionepuò avvenire senza interruzione al primo er-rore; in questo caso, sebbene, ovviamente,non sia generata alcuna applicazione .EXE,OB «ricorda» e mette a disposizione dell'u-tente tutte le locazioni degli errori, e, alla finedella compilazione, un comando speciale perla rapida correzione degli stessi.

Le caratteristiche più avanzate e preziosedi OB possono essere così riassunte:

QuiekBASIC: lo sereen d'apertura

MCmicrocomputer n. 70 - gennaio 1988 81

PROVA

OUICKBASIC - TURBO BASIC

- costruzione di sottoprogrammi: esiste,così. la possibilità di suddividere i classicimonolitici (l'unico vero grande problema) pro-grammi Basic in moduli distinti. Tramite l'op-zione $INCLUDE è possibile accedere a libre-rie, definite dall'utente, di comune utilizzo,senza che queste stesse librerie siano fisica-mente presenti nel linguaggio stesso.

- Strutturalità avanzata, con caratteristi-che che non hanno nulla da invidiare ai piùsofisticati linguaggi: IF...THEN ...ELSE multili-nea, SELECT ...CASE (presente solo dalla ver-sione 30). DO LOOP, EXIT. ..FOR-DO e chia-mate a sottoprogrammi con passaggio divariabili locali o globali, oltre ai più classicicostrutti FOR ...NEXT (manca, ancora, strana-mente, il costrutto BEGIN ..UNTIL) DEF FN

Operazioni dicaricamento di un file,

la selezione vieneeffettuata battendo il

nome del file, mentrenon è possibile la

selezione con i tasticursore.

Opzioni dicompilazione-debug;si notino, tra le altre,

le ottimizzazionirelative alla velocità di

esecuzione (setta te)ed alla dimensione.

(anche di tipo Long, e supportante anche unnon comune EXIT DEF) permettono di dise-gnare programmi di elevata leggibilità, com-patti, di agevole manutenzione, e, il che nonguasta, di flessibilità e potenza elevata.

- Abolizione dei numeri di linea, ormaidefinitivamente abbandonati grazie al notevo-le miglioramento degli editor. Gli indirizza-menti dei GOSUB e GOTO vengono effettua-ti ad etichette alfanumeriche, anche questocon un notevole miglioramento delle caratte-ristiche di leggibilità.

- Gestione dinamica della memoria, conallocazione elastica della stessa in runtime, erisoluzione dei notevoli problemi spesso col-legati alla allocazione statica, come accade,ad esempio, nel dimensionamento delle ar-ray. Le stesse array, inoltre, possono occupa-re fino a 64K di memoria. Ancora, sempre aproposito di array, è possibile controllarel'allocazione di array già dimensionate e l'a-nalisi di file addizionali aggiuntivi (tramite, adesempio, l'$/NCLUDE) direttamente daBasic.

Tutto questo ed altro è illustrato e gestitoda un pesante manuale di circa 650 pagine,che, comunque, non può essere utilizzatocome tutoria! del linguaggio e che presume,ovviamente, una buona conoscenza delDOS. Nello stesso manuale vengono consi-gliati alcuni libri utili da consultare, tra cui ciha fatto piacere vedere citato il volume di

82

Van Wolverton suIl'MS-DOS, un eccellentemanuale su questo standard.

Dopo i primi due capitoli di presentazione ilmanuale affronta un «guided tour», cosi caroagli implementatori d'oltre oceano, in cuivengono, soprattutto, illustrate le qualità del-l'editor finalizzate al debug di uno dei pro-grammi presenti nel dischetto. Viene presen-tato l'uso di una libreria esterna e la creazio-ne di un file oggetto.

Dal capitolo 4 in poi si entra direttamentenella descrizione dell'ambiente di program-

QuickBASIC b)

Opzioni del compilatore

Opzione risultato

Id setta il debugle setta l'ON ERROR10* impone l'opzione Obj (BCOM.lIB)Iq opzione velocitàIr array in ordine inversoIs evita l'opzione di ottimizzazione delle

stringheIv controllo del confronto delle istru-

zioniIw event trappingIx resume next

mazione; secondo la più classica notazioneMS-DOS, il linguaggio (con i suoi orpelli edaccessori) viene chiamato tramite il comando

qbche può essere seguito da una innumerevolemesse di opzioni, regolanti, tra l'altro, il cari-camento automatico di un file (listato delprogramma), il settaggio di parametri relativiall'uso di schede grafiche o monitor a colori(la presenza di schede colore viene ricono-sciuta direttamente dal linguaggio); inoltre èpossibile già caricare file di libreria, allocarel'ampiezza di buffer (fino a 32767 byte).presettare alcune direttive del compilatore.Si è in ambiente, con la riga di menu di testaselezionabile tramite la pressione di un sin-golo tasto (o tramite mouse, in questo pac-chetto ampiamente supportato, e del tuttoconsigliabile anche per un uso non avanzatodel linguaggio); una particolarità interessanteè l'uso della opzione [shell]. che consente,momentaneamente, di ritornare in ambienteDOS, del tutto funzionale, per eseguire altriprogrammi o comandi specifici di sistemaoperativo. Ouick Basic resta in linea, disponi-bile. Battendo [exit] lo schermo OB apparenello stesso stato in cui era stato lasciato.

Oltre le opzioni [File] ed [Edit]. piuttostostandard, il menu [View] consente una piùagevole manipolazione dello schermo tramiteil settaggio dei tabulatori, la scelta dei coloridi default, l'uso delle barre di scroll. È ancorapossibile installare-deinstallare la finestrad'errore. La compilazione avviene tramitel'opzione [Run]. che permette, altresì. di set-tare diverse opzioni di compilazione, ivi com-presa la destinazione dell'oggetto (.EXE,.L1B, ecc.).

Particolare cura è stata offerta alle opera-zioni di debug, sempre un po' critiche neilinguaggi compilati; oltre i classici TRON eTROFF, il linguaggio offre opzioni come ilTRACE, STEP, e, infine, una originale e prati-ca feature, ANIMATE; tramite essa il pro-gramma scorre continuamente, ma, a secon-da di una particolare opzione scelta (Slow oFast). le linee vengono eseguite con intervallidi qualche secondo. Oltre a ciò, dopo ilsettaggio dell'opzione «Debug» (che è indi-pendente, eseguita com'è da menu, dallaopzione TRON). viene generato un codiceoggetto un po' più ampio e lento, ma che

MCmicrocomputer n. 70 - gennaio 1988

PROVAQUICKBASIC - TURBO BASIC

0000.0000 ------------- r----------------,

Mappa della memoria in runtime durante l'esecuZione di un programma (QwcKBASIC).

MS - DOSrfti?n ..•ot~ia b as sa .- -- -- --- ---- -- - - - -- -- ---- -- - - --------- -- -- -- -- -- -- -- -- -- - - ---

automaticamente ad ogni loro reperimentonel listato (chi conosce il Basic HP ritroveràun vecchio amico, il TRACE VAR) utilizzare inmaniera l'efficiente coprocessori matematicicome 1'8087 o 1'80287, adottare formati nu-merici in standard IEEE, definire costanti(finalmente) simboliche, da utilizzare al postodi valori numerici o di stringa definiti colclassico [= J Il manuale di riferimento sisviluppa in maniera ordinata, con una analisiragionata, esauriente e circostanziata di tuttele istruzioni-funzioni-comandi, e con riferi-menti incrociati ad altri comandi abbastanzanumerosi. Per numerose istruzioni viene rife-rito il diverso comporamento compilatore-interprete, anche se non viene dedicato mol-to spazio ai programmi di tipo CHaiNed. Allatroppo spesso maltrattata e mal considerataDEF FN viene dedicato ampio respiro; essa,in ossequio ai canoni più avanzati, viene quiampliata alla più potente FN multilinea.

La grafica appare abbastanza curata e,anche se non raggiunge, neppure alla lonta-na, implementazioni di altre macchine e lin-guaggi (v. HP). possiede alcuni statementparticolarmente raffinati. Pur mancando unavanzato sistema di gestione grafica, alcunicomandi si comportano come vere e propriemacro [DRAWJ. ad esempio, accetta, comeargomento, una stringa che, con un formato

buffer di comunic~zione

FAR he~p(contiene ~t-ee p~rticol~ri ,meno frequentemente us.ate J

com€' .an- ay di n(ltevo li dimensioni J

t~belle d'~mbiente IJtente,tabe ll€' di errore J ecc.

oodici?' speeificoQUICK BASIC

t'"'""""-_A~ ---------------------------------------------

~ree d~ti---------------------------------------------

d~ti libreri~utente

-------- -------------------------------------area di ampliamento

libreri~ utente---------------------------------------------

an?·a costanti---------------------------------------------

~t-e~ y~'-i~bi1i

------------------------------- --------------~re~ COMMON

i .---------------------------------------------l use,- st~ck~ --------------- --------------------- ---- -----

Il --------------t~~~~~i~~~~~~~~-----------------

(buffer di file ,~rr ~IJ din~miche ,ecc.)l

Finestra VIEW:selezione delle opzionidi editing su schermo.

IJser d.alafine [>S:xxx x

user dat.ap.•rtenza DS :0

.ampiezza64 K ('fers. L.O)

gio). ma un esame approfondito del manualedi base e dell'update 3.0 (una settantina dipagine, di colore grigio, in premessa di ma-nuale) ci permette di scoprire cose e featuredi grande interesse. Vediamo così la possibi-lità di inserire breakpoint (al massimo 8; veramanna per i linguaggi compilati, dove l'analisidi flusso dei valori delle variabili è sempredisastrosamente fastidiosa). definire variabiliWatch (Vigilanza). che saranno monitorate

testa, in fase di compilazione, una serie dieventi come:

overflow dinamico- limiti e dimensionamento delle array- indicazione, sotto forma di locazione di

linea, di errori in runtime- verifica di corrispondenza di tutti i RE-

TURN- verifica di CTRL-BREAK.Si tratta di una operazione, questa, consi-

gliabile almeno nella fase di testaggio inizialedei programmi, visto che, in caso contrario,non solo il programma non si ferma (gene-rando il relativo messaggio d'errore). ma pro-segue per vie imprevedibili, falsando qualsia-si logica di flusso e, d'altro canto, rendendovana qualunque forma di debug.

Lo stesso menu, comunque, possiede nu-merose altre opzioni che consentono di otte-nere, tra l'altro, programmi il più veloci emeno ingombranti possibile, tramite una piùaccurata gestione della memoria.

Molta enfasi (giustamente) è data, nellaillustrazione del linguaggio, ai sottoprogram-mi, vere e proprie procedure pascaliane ca-paci di manipolare, come abbiamo già detto,variabili locali e globali, e, addirittura array,anche multidimensionali. L'utilizzo è del tuttoanalogo alle procedure, con la possibilità disistemare sottoprogrammi anche in librerieesterne (un test ha dimostrato che è possibi-le nidificare sottoprogrammi appartenenti alibrerie diverse) e con l'unica restrizione chesalti indirizzati con GOTO e GOSUB possonosolo avvenire nella stessa libreria.

Ouesta delle librerie è un'altra delle opzionipiù potenti del linguaggio: pilotata dalla istru-zione [buildlib] la creazione di una libreriautente è rappresentativa di un tool di pro-grammazione estremamente efficace. Perchi vuoi penetrare, ancora, nel più profondodel cuore del sistema, tramite la solita[CALLI. Ouick Basic può chiamare subroutinein linguaggio macchina (ovviamente sempreammettendo un eventuale passaggio di para-metri).

Come è nello stile di tutti i manuali diquesto linguaggio la maggior parte del volu-me è dedicata (circa 400 pagine) a riferimen-to delle istruzioni e dei comandi. Il tutto èpiuttosto standard (ovviamente visto nell'otti-ca dei canoni più avanzati di questo linguag-

MCmicrocomputer n. 70 - gennaio 1988 83

PROVAOUICKBASIC - TURBO BASIC

Fase di runtime di unprogramma, conchiamata ad unafunzione esterna nondisponibile (si noti ilmessaggio d'errore)

volume, è dedicata ai messaggi d'errore, cherisultano corredati da efficaci spiegazioni e,ove possibile, da consigli sulle tecniche direcupero. Vengono, ancora, descritte tecni-che diverse, come, ad esempio, la possibilitàdi usare una compilazione separata secondo icanoni classici, per chi proprio vuole farecome ai vecchi tempi.

abbastanza simile all'HPGl (ma con unostandard diverso; peccato! si era fatto 30, sipoteva fare 31) definisce il disegno da ese-guire (le modalità di movimento della pennasono, tra l'altro, abbastanza simili a quelleadottate dal lOGO); CIRClE consente ditracciare cerchi ed archi con pattern, colori eproporzioni diverse. SCREEN, specificatoredel «mode •• dello schermo supporta le sche-de MOPA, CGA, EGA, peraltro differenziatein sette tipologie diverse (Screen 0,1,2.7,8,9,e 10). Comandi specifici sono disponibili peril controllo della penna luminosa; il suono èregolato da un potente metacomando, PLAY,che, in maniera abbastanza simile a ORAW,accetta una stringa-macro in una sola istru-zione.

Microsoft probabilmente pensa che, alme-

no in Basic, la sua metodologia di manipola-zione dei file sia divenuta uno standard defacto; probabile, ma il manuale, sebbene deltutto esauriente, è forse, per questo argo-mento, fatto per chi già conosce in manieranon superficiale l'insieme di comandi cheregolano le operazioni di I/O da file nel vec-chio Basic. Pur essendo vero che il manualenon è un tutorial. avremmo preferito cheall'argomento fosse dedicato maggior spazioper evitare che il neofita (che notoriamente,affronta la manipolazione dei file solo uncerto tempo dopo aver acquisito una buonapadronanza del linguaggio) subisca una battu-ta d'arresto nella fase di apprendimento.

Per concludere l'esame del manuale,un'appendice di una cinquantina di pagine,posta in posizione strategica alla fine del

Il Turbo Basicdella Borland

Turbo Basic si presenta sotto forma di duedischetti pieni zeppi, e di un grosso manualed'istruzione di circa 500 pagine (che, nonvorremmo sbagliarci, pare redatto con unword processor piuttosto avanzato, un Maced una stampante laser). istruzioni cui vannoad aggiungersi quelle comprese nei file «re-acLme» presenti sul dischetto stesso. Il di-schetto comprende i seguenti file/directory:

TB.EXE: è il programma principale e rap-presenta l'ambiente di sviluppo, editor, com-pilatore, biblioteca di runtime del linguaggiostesso. Battendo semplicemente TB, seguitodal [RETURN] si è direttamente in ambiente.

Upgrade 4.0 al QuickBASIC MicrosoftProprio qualche giorno prima dell'uscita

di questo articolo, Microsoft si comunicavatramite una serie di fax e riservando~i diperfezionare successivamente il look delpacchetto, che era disponibile la versione4.0 del suo OuickBASIC. Con la frettanecessaria a fornire l'informazione il piùrapidamente possibile, riferiamo, in questoriquadro, sulle principali differenze tra lanuova release ed il pacchetto che è statooggetto di prova.

OB, in questa ultima versione, supportauna serie di feature, alcune del tutto nuo-ve, altre migliorate rispetto alla versioneprecedente, di cui, di seguito, forniamoqualche ragguaglio:(dove N sta per Nuova feature ed M perMigliorata)- presenza di tipi definiti dall'utente N

supporto avanzato del coprocessorem~mdoo Mhelp in linea intelligente Ninteger di tipo long (32 bit) N

- stringhe di lunghezza fissa N

84

- controllo della sintassi al return(che meraviglia! n.d.r.) N

- I/O sul file binari N- istruzil;me FUNCTION N- moduli multipli in memoria N- compatibilità con Sidekick e Prokey M- modo linsert-sovrascrittura M- tastiera con configurazfone tipo WStarN

ricursipne (chi ha detto che la concor-renza non dà frutti?) N

- listing degli errori durante la compilazio-ne separata M

Sono state migliorate, anche notevol-mente, alcune caratteristiche del linguag-gio, tra cui citiamo l'ampliamento di rangedei numeri in formato IEEE, la riduzione dicerte restrizioni in file di tipo INCLUDE,l'inserimento di «watchpoint», dalla funzio-ne analoga alle watch variable descrittenell'articolo; inoltre è stato aumentato ilnumero dei breakpoint possibili. Alcuni sta-tement, come SEEK, OPEN, SElECT CA-SE, DECLARE SETMEM, STATIC, AS CVle numerosi altri sono stati aggiunti od

aggiornati per una maggiore flessibilità del-l'idioma. Alcuni comandi sono stati auto-matizzati tramite le solite combinazioniCTRl-SHIFT-ESC-DEl-AlT-INS ecc. e alcu-ni, del tutto nuovi. sono stati resi maggior-mente intuibili. l'opzione OEBUG di menu,che vedete nella foto relativa al pacchettooggetto di prova, è stata rimossa dal menuRUN, visto che in questa versione l'opera-zione di debug può essere eseguita inqualunque momento.

Programmi sorgente redatti con vecchieversioni (fin dalla 2.0) possono essere lettidal nuovo linguaggio, e ricompilati in que-sto nuovo ambiente. File di vecchio tipo,attraverso l'uso di un programma compre-so nella documentazione, possono esserericonvertiti e resi trasparenti alla nuovaversione.

Niente male, come update, visto il giàeccellente livello della versione preceden-te! E interessante, fra l'altro, la possibilitàdi ricevere l'uprgrade dalle versioni. prece-denti al costo di 70.000 lire.

MCmicrocomputer n. 70 - gennaio 1988

aaa.BAS: (dove aaa è una stringa di carat-teri) sono programmi sorgenti redatti in Ba-sic, pronti per essere utilizzati.

TB.HPl: file di HELP in linea.README.COM: programma per la lettura

e la stampa del successivo.README-UPDATE: si tratta di file testo

(leggibili, comunque, con un qualunque edi-tor). che possono essere anche non presentisu versioni nuove o più vecchie di quella danoi utilizzata, e contengono informazioni sup-plementari od errata corrige .al manuale.

Prima di entrare in ambiente il manuale(dal settembre '87 è disponibile in italiano, inuna traduzione fedele ed accurata) consiglia,se necessaria, una più accurata definizionedell'ambiente operativo, in modo da ridirigereil compilatore a specifiche opzioni, come

Chiamata al file diHelp (intelligente) del

linguaggio.

PROVAQUICKBASIC - TURBO BASIC

l'uso del coprocessore 8087 o della schedagrafica CGA. Fatto questo si batte TB e sientra in ambiente principale che appare ab-bastanza simile a quello visto il mese scorsoper il Prolog; siamo in Editor, un editor moltointerattivo, già descritto esau rientemente suqueste pagine anche da Giustozzi nella provadel Turbo C; si tratta, comunque, di un toolcomune (nella maggior parte delle sue carat-teristiche) a tutti i pacchetti della Borland, eche assomiglia, volutamente, nel suo utilizzoa WordStar della MicroPro Int. od al Multima-te della Multimate Inc (niente impedisce,comunque, di utilizzare un qualsiasi wp perredigere il textfile, ma mi sembra una compli-cazione inutile); l'uso, anche per chi nonconosce il principe dei wp è del tutto intuiti-vo, specie nella utilizzazione più immediata;ciononostante la pressione del tasto F1 con-sente di disporre di un Help in linea intelli-gente, che fornisce immediatamente unmessaggio esauriente circa la situazione incui ci si trova.

Saltiamo a piè pari la fase di editing (l'edi-tor è talmente friendly da rendere la sessio-ne di prova di questo un semplice tour,tranne poi a doverci ritornare per le featurepiù sofisticate) per avanzare imperterriti nelcuore del linguaggio. Ma prima di passare adanalizzare le caratteristiche stesse dell'idio-

MCmicrocomputer n. 70 - gennaio 1988

Turbo Basic: laclassica schermatad'apertura di tutti ilinguaggi Borland.

ma, vediamo alcune caratteristiche circa lacompilazione; in ciò abbastanza simile allamaggior parte dei Turbo, Basic, attraverso le[OPTIONS] può accedere a diversificate pos-sibilità di compilazione. Il comando [COMPI-LE TOI permette di scegliere di dirigere lacompilazione stessa del programma per otte-nere un programma .EXE, un file con catena-to [ChaiNed, estensione .TBC] o di eseguireuna immediata compilazione in memoria, ilmetodo più pratico durante la fase di test delprogramma stesso. Ancora è lecito selezio-nare alcuni «commutatori di compilazione»,cosi riassumibili:

- opzione 8087- break da tastiera- bounds- overflow- stack test.Con la prima opzione si «indica» al compi-

latore che è disponibile il coprocessore arit-metico, e TB si regola di conseguenza pergenerare l'oggetto con la migliore codificapossibile per le operazioni in virgola mobile.Owiamente, settando questa opzione, il pro-gramma cosi generato non girerà su macchi-ne prive dell'hardware necessario. In man-canza (default). il programma userà 1'8087solo se necessario e disponibile, altrimentiutilizzerà apposite routine soft per ottenere

lo scopo (il tutto, comunque, comporta unrallentamento generale). A protezione di tut-to esiste comunque un settaggio [SET87 =NOI che sbloccherà automaticamente il pro-gramma in caso di incompetenza hardsoft.

La seconda opzione è intuitiva. Con laterza il compilatore attiva un controllo suicontroller delle array, soprattutto per la fuo-riuscita di indici fuori intervallo. Allo stessomodo viene controllato l'overflow, per la veri-fica di supero di capacità, ad esempio, divariabili. Il controllo dello stack permette disetta re, infine, spazio sufficiente per acco-gliere elementi che sarà necessario disloca-re, ad esempio, nelle subroutine, nelle fun-zioni, o nei sottoprogrammi.

Di un'ultima opzione non abbiamo ancoraparlato, quella riguardante i metastatement.Questa ha un proprio menu, e serve adallocare memoria, rispettivamente, per i buf-fer di stack, musica, e comunicazioni.

Ancora più interessante appare il comandoSetup, che permette di inizializzare alcuneopzioni di linguaggio-sistema; tramite questaopzione è lecito definire colori di sfondo e diuso, i percorsi per le directory (anche infunzione delle operazioni di Include di fileaccessori). le attivazioni di finestra, il dimen-sionamento delle stesse, lo zoom su unafinestra prescelta (utile in fase di editing,soprattutto). Il comando [DEBUGl. ancora,offre due opzioni, Trace e Runtime error; conla prima si attiva il traccia mento globale delprogramma (l'opzione dipende, comunque,dai comandi TRON e TROFF presenti even-tualmente nel listato; label. numeri di riga enomi di procedure sono visualizzati in questafinestra ogni qualvolta vengono consideratidall'esecuzione); la funzione Runtime errorviene invece utilizzata per trovare errori in file.EXE.

Dalla pagina 59 in poi (cap. 4) il manualediviene un efficiente tutorial del linguaggio.Niente pare lasciato al caso, e l'utente appe-na esperto sarà forse seccato da certe preci-sazioni forse un po' pedanti. Ma non si puòcondannare il perfezionismo, se questo èprecisione ed illustrazione esaustiva. Perciò ilmanuale parte dalle più semplici regole diredazione di un programma per passare all'e-

85

Le funzioni principalidell'editor Turbo Basic

PROVA

OUICKBASIC - TURBO BASIC

same dei numeri, delle variabili e delle co-stanti (definibili, allo stesso modo delle varia-bili, mediante una operazione di assegnazio-ne), delle array, delle espressioni, degli ope-ratori aritmetici, relazionali e logici, delle so-broutine, funzioni e procedure (queste ultimechiamate appunto con questo nome, e deltutto simili all'equivalente struttura del Pascalod alla function del "C»), con tanto di variabililocali globali, statiche, shared e non. Udite,udite, viene supportata la ricursione nella suaforma più potente (ne parliamo nel riquadro afianco) ed una intera sezione viene dedicataalla manipolazione dei file, dove ne vienetrattato in maniera estesa anche uno forseun po' esotico per i conoscitori del Basic: ilfiel binario (dove tutto è sequenza numericadi byte, senza alcun riferimento a caratteriASCII, stringhe, delimitatori, ecc). La sintassidi manipolazione dei file è abbastanza simileallo standard Microsoft (se ne poteva fare ameno?) e chi proviene dal miserello Basicnon trovevà difficoltà ad adattarsi. La graficasi affida ad alcuni comandi specializati, abba-stanza potenti anche se, alla fin fine nonnumerosi (a quando un Turbo Graphics dedi-cato al Basic), con la comodità di disporre(come d'altro canto accade anche in OB) dicoordinate relative settabili anche in analogiaad un normale piano cartesiano (con l'originein basso a sinistra). I comandi grafici sono intutto una quindicina, ed alcuni si servono di

Ricursione in 8asic: laclassica torre di Hanoi,

con IO dischi, risolta,anche con animazionegrafica, in 51 secondi.

un vero e proprio metalinguaggio (DRAW eCIRCLE sono praticamente identici a quelliche abbiamo visto in Ouick Basic). Anche quila parte più ampia del manuale è rappresen-tata dalla guida di riferimento dei 200 e passacomandi disponibili, e anche qui andiamo unpo' a braccio: vediamo tra quelli meno comu-ni [$COMJ che alloca spazio di memoria per ilbuffer della porta di comunicazione seriale[$DYNAMICl. una metaistruzione che dichia-ra che l'allocazione dei vettori dovrà esseredinamica, [$EVENT) che consente il controllo

tastoli

Esctasti cursore ePgUp, PgDn,Home, EndDelInslctrlVCtrl-KbCtrl-KkCtrl-Kh

Ctrl-Kc

Ctrl-Ky

Ctrl-Kvf1f2f3f4f5f6f7f8

OpzIoni delcompilatore; si notinotra l'altro il settaggiodel coprocessore e lagrandezza dei buffer distack, musica,comunicazioni.

funzione

esce dall' editorspostamento cursore perl'editing di linea e pagina

cancellazione carallereinsert-<:>.writemarca !'inizio del bloccomarca la fine del bloccocancella la marcatura delbloccooperazione di copy di unbloccocancellazione di un bloccomarcatospostamento di un bloccochiamata all'Helpsalvataggio di un fileinizio di un nuovo filen.U.zoom in lineaalliva le finestreinizio del bloccofine del blocco

86

Quick Sort in 8asic;vengono riordinati5000 numeri in IOsecondI circa.

del verificarsi degli eventi definiti dagli state-ment ON ... , [$INCLUDEl. principe delle me-taistruzioni, che consente di compilare un filedi testo esterno, assieme al file corrente,[$SEGMENTI. che permette di spezzettare inmemoria il programma sorgente in segmentiscaricabili (si noti la presenza comune dell'in-dicatore [$]). Manca purtroppo l'opzione DEGper l'uso di gradi trecentosessantesimali, edè possibile caricare e scaricare file ad imma-gine di memoria. La funzione CALL puòchiamare una procedura od una routine inlinguaggio Assembler, oltre ad interrupt disistema. Alcuni comandi curiosi permettonodi eseguire alcune operazioni per lo menoatipiche, come DECR, che permette di dimi-nuire una variabile di un valore stabilito ed

MCmicrocomputer n. 70 - gennaio 1988

INCR, che esegue il contrario (ricordate qual-cosa del genere nel "C»); ENVIRON modifi-ca le informazioni nella tabella di ambiente,IF si presenta in maniera pluritest. LOG am-mette diverse basi, MEMSET dichiara il limi-te massimo di memoria, MTIMER legge ereinizializza il microtimer interno, PMAP tra-duce coordinate fisiche in virtuali e viceversa,SCREEN ammette 7 tipologie di video, conriconoscimento di modo EGA e CGA. Ladifesa della strutturalità del linguaggio è affi-data agli ormai soliti, anche nel Basic, SE-LECT CASE, DO-LOOP, WHILE, ecc.

Come al solito, la rimanente problematicaè affidata ad una serie di appendici cheprendono in considerazione la rappresenta-zione dei numeri, il controllo degli eventi,l'interfaccia col linguaggio Assembler (con

Che cosa èla ricursione

TB ammette la ricursione, finora relegatanelle nascoste oscurità di certi linguaggidedicati, come C e Forth. Quanto si è dettoa proposito di essa! La definizione piùspiritosa ricordo di averla letta qualche an-no fa su una rivista inglese, dove, comeesempio di discorso ricursivo, veniva pro-posta la frase «La pioggia è quella cosa checade quando piove». Scherzi a parte, se èmerito di Borland di aver cavato dalla neb-bia questo potente processo, diamo a Ce-sare quello che è di Cesare e vediamo inche cosa questa consista, utilizzando unesempio contenuto nel manuale stesso.

Si abbia il seguente programma, anzi peressere precisi procedura (o funzione), cheadotta una tecnica ricursiva:

OEF FHFattoriale*(nX)i f nX > I AHO nX < = 170 THEHFHFattoriale* • nX * FHFattariale*{nX-l)

ELSE IFnX = o OR nX • 1 THEH

FHFattorialea = 1ELSE

FHFattarlale* = -IEHO IF

EHO OEF

A parte la brevità del codice, la strutturasi presenta complessa, anche più di quantosembra. Per renderei conto di come funzio-na una procedura ricorsiva, vediamo comeessa fa a calcolare il fattoriale di 3.

Battiamo in modo immediato l'ordine:

PRIHT FHFattariale*{J)

Il valore 3 viene passato per valore allafunzione. Questa (si segua il listato) con-trolla se l'argomento è maggiore di 1 e

MCmicrocomputer n. 70 - gennaio 1988

chiamate di funzioni DOS e BIOS, e creazionidi file INLlNE.COM), il confronto tra il TB edil Basic interpretato, i messaggi di errore(finalmente con una diagnostica sintetica edesauriente; i number error arrivano fino a600, anche se, owiamente, ne vengono uti-lizzati effettivamente molti di meno). Un'ap-pendice richiama una serie di comandi DOSparticolarmente utili o dedicati al linguaggio,e non mancano una serie di codici estesi deitasti e dei codici di scansione della tastiera.Pare proprio che la Borland abbia redattoquesto manuale con il principio di certi grandimagazzini che ragionano secondo il principio:"Una volta entrato il cliente non deve uscireper andare a cercare qualcosa da qualchealtra parte!».

Infine un programma contenuto nel di-

minore od eguale a 170. Superato il con-trollo si tenta di eseguire l'operazione:

FHFattariale* = 3 * FHFattariale*(2)

A questo punto il programma si trova indifficoltà in quanto gli viene chiesto diconsiderare come valore definito [FNFatto-riale#(2)] qualcosa di cui non conosce inve-ce il valore. Allora si sospende momenta-neamente l'elaborazione ed il programmasi applica alla soluzione di FNFattoriale#(2).

Si ricomincia da capo, e la funzioneFNFattoriale# tenta di passare il valore 2.Superato il controllo del > o <=170 ci siritrova di nuovo di fronte alla chiamataricorsiva della funzione, che ancora unavolta non può essere risolta immediata-mente. Anche questa DF viene messa inlista d'attesa e FNFattoriale# viene chia-mato per la terza volta, stavolta con va-lore 1.

Il loop a questo punto si blocca, in quan-to c'è la trappola del secondo THEN (n% =1). FNFattoriale# può terminare la sua cor-sa all'indietro e richiamare l'ultima messada parte [FNFattoriale#(2)] per poterla ese-guire. Viene così ripercorsa, il senso con-trario, la scala delle istruzioni accantonate,fino all'esaurimento dell'argomento dellafunzione principale. La struttura viene com-pletata ed il risultato (6) stampato sulloschermo.

Le tecniche di ricursione, se corretta-mente usate, snelliscono molto il lavoroprogrammatorio, anche se talvolta non èfacile decidere se è il caso di fare o no aloro ricorso.

C'è da dire, come appare evidente nell'a-nalisi appena eseguita, che occorre dellospazio, da qualche parte (per essere preci-si, nello stack) in cui accantonare le opera-zioni sospese. È opportuno, quindi, se siprevede di far uso di tecniche ricursive, diusare la meta istruzione $STACK per creareabbastanza spazio disponibile per lo stackstesso.

PROVAQUICKBASIC - TURBO BASIC

schetto di accompagno al linguaggio permet-te di personalizzare il Turbo Basic, il tutto inmaniera definitiva o prowisoria, tramite leseguenti operazioni:- impostazione di un percorso per i file diaiuto ed impostazione- personalizzazione della tastiera- modifica dei modi di edit implicito- impostazione di modo di schermo impli-cito.

Altro che semplice linguaggio, e quantosiamo lontani dal Basic o dall'Applesoft delbuon vecchio Apple Il; abbiamo parlato inquesto articolo spesso di «ambiente di pro-grammazione ••, e così può essere considera-to, a tutti gli effetti TB; l'unico commento,per utilizzare un gergo "turbo •• è dire «Chebomba! ••.

Volete un difetto? Uno l'abbiamo trovato eve lo diciamo senza timore di essere smenti-ti. Edia Borland, nel tradurre il manuale, haconservato la vecchia copertina ma ha usatocarta semipatinata di buona qualità per com-porre il volume. La durezza di questa carta, inuna con la robusta rilegatura, ha portato apresentare un manuale destinato a sopporta-re impunemente maltrattamenti oltraggiosi;ma questa robustezza si è tradotta in unadifficoltosa manipolabilità del volume, che,almeno quando è nuovo, non ne vuoi saperedi stare aperto sul tavolo; ho provato aforzare, forse un po' troppo, ed il dorso haceduto. Troppa grazia, come si dice dalle mieparti!

Conclusioni(Quick e Turbo)

Quanto cammino è stato fatto dai Basic inpochi anni! Altro che linguaggio debole erugginoso; i linguaggi di oggi sono attrezzi diprecisione, ben adeguati alla raffinate mac-chine su cui girano! E di fronte a tool comeQuick o Turbo impallidiscono fior di Pascal eC. Perciò, è proprio il momento di smetterlacon la vecchia storia del linguaggio per mon-goloidi del software.

Ma dal confronto chi esce, alla fin fine,vincitore? Turbo, con la velocità di complica-zione entusiasmante, la sua ricorsività, il suoeditor raffinatissimo, la maggiore vicinanzaalla macchina, o Quick, con le sue indubbiefacility, le innumerevoli opzioni, la sua, sevogliamo, consanguineità col DOS? Consen-titeci di essere buoni (questo articolo è statoscritto qualche giorno prima di Natale) e didichiarare un incontro pari: questo ha qualco-sa, quello ne ha altre!

Ma cosa importa? al di fuori di tutto fapiacere, ad uno che ha sempre ammirato ilBasic e non si è mai vergognato di professar-sene cultore (tenga conto, il lettore, che chiscrive è uno che ha lavorato e lavora, percerte sue applicazioni, in Forth, Lisp, Pasca!.e Cl vedere l'evoluzione che questo lin-guaggio ha subito, divenendo raffinato, com-pleto, elegante, strutturato, pulito, e restan-do comunque facile da usare.

Sarà difficile, per chi abbia provato QB oTB, atteggiarsi a giudice sprezzante di unlinguaggio.. troppo poco «in •• nei sacri am-bienti.. Me

87