|
Introduzione
Superbase sta rigenerandosi. Nella nuova generazione di prodotti in fase di sviluppo le caratteristiche che risaltano
sono flessibilità, supporto per ambienti multi-piattaforma, facilità d'uso, e potenza. Questa introduzione
descriverà lo stato attuale dello sviluppo, alcune considerazioni progettuali, i piani di sviluppo del prodotto,
e le strategia per il passaggio al nuovo linguaggio per i clienti attuali.
Obiettivi
Superbase è un programma che ha girato sotto l'ambiente operativo Windows fin dalla versione 3.0 di Windows
stesso. Durante quel periodo, ha progredito da un linguaggio strutturato in BASIC capace di avere un solo programma
alla volta in memoria, solo variabili globali, e come processi di controllo significativo di flusso solo i comandi
GOSUB, GOTO e RETURN ad un linguaggio capace di fornire funzioni definibili dall'utente, variabili globali e locali,
con la capacità di caricare e dismettere dinamicamente dalla memoria moduli di programma insieme ad un potente
modello ad eventi e a meccanismi di gestione degli eventi definiti dall'utente, e successivamente ad un prodotto
che include un potente e ricco linguaggio di programmazione ad oggetti con un controllo sempre maggiore sull'interfaccia-utente.
Durante questo cammino, è sempre stato mantenuto un alto livello di compatibilità tra le varie versioni
man mano che erano rilasciate. Programmi scritti nel 1992 possono tranquillamente girare senza alcun intervento
o con solo poche modifiche sotto Superbase 2001. Questo alto livello di compatibilità ha comportato un costo.
Per avere un'idea, l'ammontare delle risorse richieste per produrre il linguaggio ad oggetti della versione 3 è
stato appena un quinto delle risorse investite per essere sicuri che che la linea di prodotti della versione 2
fosse il più compatibile possibile con il nuovo linguaggio.
Ciò è stato sostanzialmente troppo oneroso. Parte del problema è rappresentato dal fatto che
Superbase come prodotto e linguaggio di sviluppo, è cresciuto ed ha progredito da dove era iniziato. E'
diventato sempre più difficile per Superbase, mantenere elevati standard qualitativi senza dedicare risorse
consistenti per questo scopo. Ci sono troppe parole chiave (keywords), troppe situazioni in cui cose fatte con
lo stile di sviluppo della versione 2, provandole con la tecnologia della versione 3 semplicemente non funzionano.
Avendo premesso ciò, se qualcuno cerca di utilizzare solo la tecnologia propria della versione 3.x ed evita
di utilizzare la tecnologia delle versioni 1.x, è allora possibile operare bene con il prodotto con un ragionevole
investimento di tempi e di sforzi. E comunque permangono ancora molti aspetti da valutare.
Quando ci siamo seduti per disegnare la nuova versione next-generation di Superbase, ci ciamo resi conto di dover
indirizzare al meglio un certo numero di punti critici. Uno di questi era dar vita ad un prodotto che non fosse
una semplice alternativa a Microsoft Access o a Visual Basic e Jet Engine. Non solo volevamo avere un nuovo prodotto
Superbase che potesse interessare agli attuali clienti Superbase, ma che potesse attirare un'ampia schiera di clienti
completamente nuovi. Volevamo produrre un qualcosa in grado di attirare i potenziali utenti così come successe
per la versione originale di Superbase, semplice da utilizzare e con tutti i mezzi necessari per fornire e sviluppare
velocemente ed efficacemente soluzioni. Era evidente che per accattivare i potenziali nuovi clienti, non potevamo
limitarci ad offrire una versione se pur migliorata di VB sotto Win32. Abbiamo così deciso di dar vita ad
un prodotto multi-piattaforma. Abbiamo anche deciso di assegnare maggior importanza alla progettazione di un linguaggio
valido, logico, semplice da apprendere che non nel continuare ad assicurare continuità nella compatibilità.
In ogni riunione societaria abbiamo sempre ribadito che per poter dar vita ad un prodotto veramente potente e flessibile
bisognava interrompere la compatibilità con la vecchia linea di prodotti. Questa linea ha trovato d'accordo
più del 95% dei soci. Abbiamo anche deciso di migliorare il supporto per le lingue diverse dall'inglese,
adottando l'Unicode come pagina di codice interna del nuovo linguaggio.
Col progredire dei lavori, ci siamo resi conto della necessità di supportare un'ampia varietà di
nuove piattaforme, per cui ci siamo posti come meta il supporto dei dispositivi palmari basati su EPOC/SymbianOS,
WindowsCE (PocketPC), e PalmOS. Intendiamo anche supportare i sistemi operativi Win32, Linux, e Macintosh OS-X.
Per far si che ciò avvenga adeguatamente, i programmi dovrebbero essere compilati in un codice che possa
girare senza alcuna modifica su ciascuna delle piattaforme su indicate (a meno che non si intendano utilizzare
con il programma tecnologie specifiche del sistema operativo in cui deve girare).
Ci siamo anche resi conto durante lo sviluppo che un altro potenziale e formidabile uso del linguaggio poteva essere
quello di generare lo scripting per i server web, dal momento che un simile utilizzo non richiede la presenza di
una UI, ed è ciò che stiamo facendo.
Un aspetto che ci è stato comunemente richiesto nel passato è l'interoperabilità con i controlli
Active-X e OCX. Abbiamo anche avuto richieste per l'interoperabilità con .NET, con le classi Java, e con
le librerie di controllo Delphi. Stiamo valutando tutte le possibilità e la maggior parte di esse sarà
supportata, anche se non necessariamente sin dalla prima versione. Il supporto per .NET verrà progettato
per essere multi-piattaforma, quello per Java potrebbe essere o no una buona idea, tutto il resto, se utilizzato,
vincolerebbe le apllicazioni sviluppate all'ambiente operativo Win32, ma ad alcuni ciò potrebbe non interessare.
Un aspetto molto importante per noi è fornire un IDE molto potente. Riconosciamo l'importanza che può
avere un buon IDE nell'aspetto partico della sua utilizzazione, della velocità di uno sviluppo, e della
gestione di un progetto per qualsiasi linguaggio esso sia stato concepito. Il nostro traguardo a lungo temine è
di fornire un IDE di prima classe, scritto direttamente con il nostro nuovo linguaggio. Ciò ci permetterà
di fornire l'IDE non appena il linguaggio verrà reso compatibile sulle piattaforme previste. Le prime versioni
non presenteranno l'IDE definitivo, ma avranno ancora un IDE nativo di Win32 con supporto MDI, gestione dei progetti,
possibilità di compilazione, di esecuzione e debugging all'interno dell'IDE stesso ed altre utili funzioni.
Allo stato attuale dello sviluppo, l'IDE già fornisce una formattazione colorata del codice per il linguaggio,
un ambiente MDI, la barra delle icone, modalità a pieno schermo, ed altre utili caratteristiche.
Rilascio di pietre miliari
Superbase Internet Server Next Gen
Il nuovo linguaggio, chiamato in codice Lambda, ha fatto progressi importanti ed è praticamente pronto per
un rilascio iniziale, anche se circoscritto ad un prodotto specifico. Il primo prodotto ad essere rilasciato è
sostitutivo di Superbase Internet Server. In parte lo si deve al fatto che sicuramente è il prodotto più
immediato e semplice da rilasciare allo stato attuale. Infatti non richiede alcun oggetto di interfaccia utente
poichè il suo scopo è quello di fornire un linguaggio di scripting per i server web che possa indirizzare
pagine web dinamiche. Deve fornire semplicemente la capacità di interagire con un server web e di accedere
ai database. Con questi strumenti è possibile produrre applicazioni web potenti e impressionanti. Queste
applicazioni, girano sia sotto Win32 sia sotto Linux. Lo stesso programma compilato gira senza necessità
di alcuna modifica sotto entrambi le piattaforme citate.
Il prodotto supporterà tre metodi differenti, CGI, ISAPI, e FastCGI.
Kit di sviluppo per portatili - EPOC
Lo stadio successivo dello sviluppo sarà concentrato su un kit di sviluppo che inizialmente sarà
destinato all'EPOC ed ai cellulari Nokia serie 9210/9290. Abbiamo già effettuato il porting del linguaggio
per il cellulare Nokia ed è possibile far girare sul Nokia programmi in grado di acquisire dati con una
connesione Internet, attraverso la nostra tecnologia PPCS. Non appena il kit sarà pronto, sarà molto
semplice scrivere programmi con maschere multiple, programmare i quattro bottoni di comando al lato di ciascuna
maschera (che corrispondono ai quattro pulsanti al lato dello schermo), posizionare pulsanti di comando, controlli
di modifica, etichette, ed altri elementi di interfaccia-utente sulla maschera, e riempirli con i dati via PPCS
attraverso una connesione Internet così come sarà posibile salvare i dati localmente utilizzando
il nostro nuovo micro motore database (micro non per capacità o potenzialità, ma solo perchè
è in grado di girare su piccoli dispositivi portatili). Sarà persino possibile scrivere e compilare
programmi utilizzando direttamente il cellulare, anche se l'IDE girerà inizialmente sotto Win32 e sarà
anche possibile testare il programma sotto Win32.
Kit di sviluppo per portatili - Pocket PC e PalmOS
Faremo seguire il rilascio del kit di sviluppo EPOC attraverso il porting del linguaggio e del motore database
prima per Windows CE (Pocket PC 2002) e quindi per PalmOS (da decidere ancora quale versione del sistema operativo
OS). Non appena saranno pronti rilasceremo una versione aggiornata del Kit di sviluppo per portatili.
Superbase Personal Next Gen
Si arriverà anche al rilascio di una versione realmente dedicata all'utente-finale, completamente riscritta
e che userà il nuovo micro motore (che girerà anche sotto Linux, Win32, e Mac OS-X).
Superbase Next Gen Workbench di sviluppo
Infine rilasceremo una versione completa di sviluppo in grado di creare applicazioni multi-piattaforma in grado
di girare sotto Win32, Linux, e Mac OS-X con una serie completa di componenti database e GUI. Il linguaggio presenterà
un unico strumento di riferimento per andare incontro a tutte le complesse necessità di una moderna organizzazione
di sviluppo.
Librerie Componenti Superbase Next Gen
Una serie di librerie componenti opzionali saranno infine disponibili. Saranno componenti per poter ad esempio
accedere a database SQL, componenti basati su IP come oggetti client e server per email e che potranno essere aggiunti
al progetto, oggetti web server e browser che potranno essere parte di un progetto, e così via. Le possibilità
qui potranno essere limitate solo dalla propria immaginazione!
Strategie per la migrazione
Inizialmente abbiamo sperato di produrre un pacchetto di programmi che potesse essere d'aiuto nel convertire un
prodotto esistente nel nuovo linguaggio. Ma durante il progredire dello sviluppo e dell'implementazione del nuovo
linguaggio ci siamo resi conto che sarebbe stata un'impresa troppo azzardata ed ardua. Ciò perchè
ci sono troppi modi di scrivere del codice Superbase e che renderebbero del tutto inutile qualsiasi programma di
conversione automatica. Inoltre, con le nuove possibilità offerte dal nuovo linguaggio, un programma tradotto
senza modifiche funzionali (se mai fosse stato possibile) non sarebbe un buon programma nel nuovo linguaggio. I
programmatori tendono a scrivere i loro programmi ciascuno a modo proprio per un certo numero di ragioni. Una di
queste è la non completa familiarità con le proprietà del linguaggio. Un'altra è rappresentata
dalle limitazioni imposte dal linguaggio stesso. I programmi scritti con il nuovo linguaggio, avranno a disposizione
una tal serie di possibilità, che risulterebbe difficoltoso tradurre semplicemente un vecchio programma
in uno nuovo ignorarando la maggior parte delle nuove possibilità offerte.
Il nuovo linguaggio ha inoltre limitazioni in alcuni punti, non presenti nel vecchio. Il nuovo linguaggio non ha
variabili globali, non ha rimandi GOSUB, GOTO, e nessun modo di uscire da una espressione di blocco se non alla
fine. Non vi è la presenza di comandi del tipo current file, current index, o current record. Dal momento
che nel nuovo linguaggio i file, i campi, gli indici ed i record sono rappresentati da oggetti non potrebbero essere
richiamati utilizzando il comando Campo.FILE ma tuttalpiù con il comando File.Campo . Ciò da vita
a problemi rilevanti per molti programmatori della versione attuale. Per altri, specialmente per quelli che hanno
adottato buone pratiche di programmazione durante la versione 2 e 3 dei prodotti Superbase, non costituirà
un ostacolo significativo apprendere il nuovo linguaggio.
Non ci sono solo aspetti negativi, poichè ovviamente, il nuovo linguaggio, presenterà un'enorme serie
di caratteristiche non presenti nell'attuale linea del prodotto. Vi è un piccolo set di parole-chiave (keywords),
e grande rilievo è stato dato alla coerenza del modo con cui gli oggetti sono progettati. Sono disponibili
funzioni ed oggetti definiti dall'utente. Tipi di dati complessi possono essere creati e manipolati facilmente.
Le variabili stringa hanno virtualmente grandezza illimitata. Il linguaggio include il supporto per valori nulli
e infiniti. I numeri interi ed i numeri in generale hanno una precisione ed una scala virtualmente illimitata.
I valori decimali (numeri) non hanno perdita di precisione e possono gestire correttamente i decimali continui.
Vi è un vero tipo di dati booleano. Supporto delle date, times e datetimes. L'accesso ai file per l'input
e l'output di flussi può essere facilmente creato con il supporto dei dati sia che siano sotto forma di
stringa che binaria. Non vi è limite al numero dei file che possono essere aperti ed utilizzati nello stesso
momento (compatibilmente con le limitazioni imposte dal sistema operativo in cui si opera). I componenti database
sono ora considerati oggetti nel nuovo linguaggio e sono accessivibili come tali. Maschere multiple, possono essere
aperte nella stessa finestra ma solo una per volta può essere selezionata nella finiestra. Il linguaggio
è multi-processo (multithreaded), anche nei sistemi operativi che non supportano il multithread. Vi è
supporto diretto per i sockets con i quali è aperta un'enorme serie di possibilità per i programmi
progettati per interagire con i protocolli standard Internet.
La strada che abbiamo deciso di seguire è quella di fornire un'imponente serie di funzionalità simili
a quello cui sono attualmente abituati i programmatori Superbase. Forniremo anche una DLL file engine per permettere
agli attuali utilizzatori di Superbase 2001 di trasferire i loro file dal formato esistente al nuovo formato database
e continuare ad utilizzare i loro vecchi programmi. Il nuovo motore database potrà essere utilizzato direttamente
dal nuovo linguaggio. Ciò permetterà ai vecchi programmi di continuare ad operare così come
sono ma anche di interagire con il nuovo linguaggio. Infine, daremo la possibilità di scrivere routine nel
nuovo linguaggio e di chiamarle con il veccio linguaggio in mamiera tale che nuove funzionalità potranno
essere aggiunte al vecchio codice utilizzando il nuovo linguaggio. Tutto ciò faciliterà la familiarizzazione
con le capacità del nuovo linguaggio senza necessariamente dover cominciare completamente da zero. Man mano
che ci si sentirà sempre più a proprio agio con il nuovo linguaggio, si potrà valutare il
modo migliore per cambiare dal vecchio linguaggio al nuovo. In molti ci hanno già detto che approfitteranno
di questa opportunità per ristrutturare le loro applicazioni e cogliere i vantaggi del nuovo linguaggio.
SBL e LAMBDA a confronto
Così come nel SBL, tutti i programmi Lambda iniziano con la funzione main(). Quando sono di ritorno da quella
funzione, il programma ha termine. Ciò è abbastanza simile al modo di operare del linguaggio attuale
nel runtime system. fare clic qui per visuallizzare lo stato corrente della documentazione. La tabella che segue
mette a confronto i vari aspetti dei due linguaggi.
Data Types
string
Il tipo string è simile alle strings presenti nel SBL. Vi è comunque un certo numero di differenze
significative in quanto la string Lambda non ha limitazioni nella dimensione (a meno che non siano limitazini specifiche
del sistema operativo) e il tipo string è rappresentato da un carattere a 2-byte (sebbene nella maggior
parte dei casi, i programmatori non si troveranno di fronte ad un problema per questo).
integer
Nell' SBL ci sono quattro tipi di interi, interi piccoli con un valore compreso da -32768 a +32767, interi lunghi
con un valore compreso da -2147483648 a 2147483647 e l'oggetto HugeInteger con una precisione massima di 122880
cifre significative. Nel Lambda c'è solo un tipo di interoche ha una precisione maggiore dell'attuale HugeInteger
nell' SBL.
number
Il numero Lambda può essere paragonato al numero float o reale di SBL, e quindi è fondamentalmente
un numero doppio (double) ed ha un aprecisione massima di 14 cifre significative ed una scala massima di +/- 10300.
Il tipo numero nel linguaggio SBL è creato con l'utilizzazione della funzione matematica floating-point
e perciò è soggetto ad errori di arrotondamento. Il tipo numero in Lambda ha essenzialmente precisione
e scala, ed è inoltre capace di supportare i decimali continui come frazioni vere. Non è implementato
con il floating point e perciò non è soggetto ad errori di arrotondamento.
boolean
Nel linguaggio SBL non c'è la presenza di un tipo booleano. Tipicamente viene utilizzato un numero intero
associandolo ai valori 0 per falso, -1 per vero. Nel Lambda , sono utilizzati vaolri intrinsechi .true e .false
con il tipo booleano.
Parole chiave (Keywords )
if
E' simile a quello presente nel SBL eccetto che il Lambda non richiede THEN e un END IF è sempre invece
richiesto.
while
Così come l'attuale WHILE, il ciclo while continua fino a che la condizione è vera. Differisce
nel fatto che il ciclo while termina al comando end while e ci può anche essere una condizione seguente
il comando. Inoltre, la prima condizione non è richiesta.
function
Questa parola chiave è usata per definire una funzione sia nel linguaggio SBL che nel Lambda . In entranbi
i linguaggi, la funzione ha termine quando incontra il comando end function. Nel Lambda la funzione è valenza
sia di FUNCTION che SUB. Entrambi possono restituire o no un valore. Il programmatore può decidere di ignorare
il valore restituito da una funzione. Il valore restituito dalla funzione può essere una variabile, un avalore
o una espressione che segue direttamente il comando end function statement.
Funzioni
.lstr
Questa è funzionalmente equivalente alla funzione LEFT$ nell' SBL.
.rstr
E' essenzialmente la stessa funzione RIGHT$ nell' SBL.
.substr
Equivale alla funzione MID$ nell' SBL.
.instr
La funzione Lambda .instr è equivalente alla funzione INSTR di SBL senza supporto del primo parametro
opzionale. Per ottenere lo stesso risultato, è necessario passare il .substr() della stringa come primo
argomento così che l'unica parte valutata sarà quella voluta.
.tostr
Simile alla funzione STR$ function dell' SBL, più completa e che supporta tutto eccetto la notazione
scientifica. La versione Lambda richiede anche la presenza di una base numerica nell'espressione.
.toval
La funzione VAL è molto simile, eccetto che la versione richiede in più due parametri addizionali,
un astringa contenente i caratteri da ignorare e una base numerica nel caso di necessità di interpretazione
della stringa come numero. Basi numeriche tra 2 and 36 sono consentite.
.char
E' simile alla funzione CHAR$ tranne che per il fatto di supportare l'intero set Unicode come da norma ISO 10646.
.charval
E' essenzialmente uguale alla funzione ASC nell' SBL eccetto che supporta anche l'intero set Unicode.
.if
La funzione SBL IF (non l'espressione) è la stessa funzione Lambda .if .
.fix
E' del tutto simile alla funzione FIX dell' SBL.
.len
E' funzionalmente equivalemte alla funzione LEN dell' SBL, sebbene nel Lambda i caratteri sono di 2 byte, la
funzione .len restituisce il numero dei caratteri, non il numero dei byte.
Altre differenze linguistiche
Il nuovo linguaggio distingue tra caratteri minuscoli e maiuscoli. Tutte le parole chiave, le funzioni intrinseche,
e le funzioni di sistema così come i nomi dei tipi si presentano in caratteri minuscoli. Le funzioni intrinsecheiniziano
sempre con un punto, come ad es. .instr(). Le funzioni intrinseche necessitano sempre delllo stesso numero di
parametri e non presentano parametri nominati, per cui .instr() sempre prenderà solo 2 parametri.
Le funzioni definite dall'utente possono avere parametri nominati e valori di default. Non tutti i parametri devono
essere passati quando si chiama una funzione e non c'è bisogno che siano nell'ordine corretto se viene usato
il nome del parametro. Il valore restituito da una funzione può essere ignorato.
Non ci sono caratteri speciali associati ai tipi di dati variabili, per cui le variabili stringa non hanno il simbolo
finale del dollaro, i numeri interi non hanno il simbolo finale percento, ecc.
Possono essere definiti oggetti dall'utente, i quali oggetti a loro volta possono includere altri oggetti definiti
dall'utente. E' abbastanza semplice creare nella memoria tipi di dati complessi e strutture, come ramificazioni,
liste collegate, code ed altro ancora.
Non c'è un modo per interrompere una espressione di blocco. Ciascuna espressione di blocco ha solo un sistema
per entrare ed uscire.
Lambda è multiprocesso (multithreaded) ed include il supporto per le connessioni socket, tra le numerose
altre implementazioni in fase di perfezionamento.
Conclusioni
Come si sarà potuto dedurre, molti aspetti importanti sono stati presi in considerazione durante lo sviluppo
del nostro nuovo linguaggio next-generation. Lo si è concepito per presentarsi semplice nell'apprendimento
e comodo nell'utilizzo ancora più di quanto lo sia mai stato in nostro prodotto esistente. Questo comunque
comporta il prezzo di non essere direttamente compatibile con il prodotto esistente.
Ciò non sta a significare che intendiamo abbandonare alla deriva i nostri attuali clienti.Ci saranno strumenti
per convertire i file database dal formato corrente a quello nuovo. Ci saranno anche strumenti per convertire le
maschere, i report dal vecchio al nuovo formato. Questi strumenti saranno ottimizzati per lavorare con Superbase
2001 e potranno essere integrati nel Project Manager in una versione aggiornata di manutenzione del prodotto. La
parte più difficoltosa della transizione riguarderà i programmi scritti dai nostri utenti. Anche
in quest'area, stiamo facendo un grande sforzo per fornire nel nuovo linguaggio funzioni equivalenti a quelle del
vecchio linguaggio che diano nella maggior parte dei casi la stessa funzionalità.
Ci sarà un reparto applicazioni per assistere coloro che desiderano convertire le loro applicazioni. Probabilmente
forniremo gratuitamente una valutazione del pacchetto stimando quanto sforzo potrà essere richiesto per
convertire il pacchetto stesso. Inoltre si potrà discutere della quantità di benefici che potranno
scaturire per il pacchetto con l'utilizzo delle caratteristiche presenti nel nuovo prodotto. Ci sarà un
gruppo news di discussione e possibilmente un forum web per discutere sui problemi collegati alla conversione.
Siamo fortemente convinti che la conversione dei programmi al nuovo linguaggio, assumendo che siano stati anzitutto
modificati in qualche modo nel linguaggio SBL utilizzando le caratteristiche del processo ad eventi e che siano
stati rimosse tutte le aree problematiche del progetto, non risulterà eccessivamente difficile. I vantaggi
derivanti dalla conversione di gran lunga sopravanzano le difficoltà che la transizione presenta.
In entrambi i casi, Superbase Developers plc continuerà a dare supporto ai suoi clienti in questo processo.
Abbiamo in gran conto ognuno dei nostri attuali clienti che nel corso degli hanni hanno preferito fare affidamento
sugli strumenti migliori, piuttosto che non su quelli più conosciuti e pubblicizzati.
|
|