home.jpg (1906 bytes) Superbase Next Generation  

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.

 

Copyright © 2003 Superbase Developers plc, Cambridge, UK, Tutti i diritti riservati.