RelHost.Net


   

Falcon - introduzione

Falcon è un linguaggio di programmazione pensato e creato da un italiano, Giancarlo Niccolai, partito, come quasi tutti gli scrittori di linguaggi, da un'idea base... principalmente quella di creare uno strumento flessibile, capace di soddisfare le esigenze di qualunque programmatore di modo che fosse in grado di piegarsi al processo logico di creazione del programma seguendone le linee di pensiero senza dover obbligare lo sviiluppatore a modificare la propria logica. L'obbiettivo è, evidentemente, la massima produttività. Partendo da questa premessa del tutto ideale è interessante notare come, nella pratica, Falcon sia, veramente, un eccellente linguaggio multiparadigma. E' possibile lavorare in maniera procedurale, prototype-oriented, object-oriented, funzionale, message oriented ed infine, a partire dalla release 0.8.12 è supportata anche la programmazione tabellare. In progetto per la ver. 1.0 anche il supporto ad un settimo paradigma, la programmazione logica. Di tutti questi aspetti parleremo in maniera diffusa. Già questa serie di caratteristiche è abbastanza unica... ma non è tutto. Per la versione 1.0 avremo anche una forma di programmazione basata su contratto, della quale parleremo al momento della sua implementazione. Ovviamente è presente un meccanismo di garbage-collection che è peraltro in fase di ottimizazione e revisione in vista della prima versione ufficiale. La possibilità di esprimersi attraverso vari paradigmi e la disponibilità di abbondanti features consente allo sviluppatore di modulare il linguaggio ai suoi schemi mentali (e non il contrario). Altri ritengono che tutto questo possa portare più confusione che vantaggi reali; tutti i punti di vista sono assolutamente rispettabili a mio avviso, il poter disporre di così tanti strumenti è invece un aspetto decisamente positivo. Sta allo sviluppatore fare buon uso di quanto gli viene offerto tenendo presente l'aspetto senza dubbio vantaggioso di non dover cambiare linguaggio qualora si voglia adottare un paradigma in particolare tra quelli disponibili. Tant'è che alcuni linguaggi in voga, come C#, stanno, piano piano, aggiungendo features su features in particolare rivolgendosi verso la programmazione funzionale. E' il linguaggio che deve supportare lo sviluppatore non quest'ultimo che deve modificare il proprio pensiero per adattarsi al linguaggio, almeno in linea di principio e come già detto al'inizio.

I campi applicativi per Falcon sono ovviamente vastissimi, non è impossibile nemmeno di utilizzare questo strumento per la generazione di pagine Web dinamiche (cosa che è già stata fatta tramite integrazione con Apache2).
Quanto visto finora è senza dubbio molto promettente ma non è tutto. Falcon è un linguaggio interpretato (in un prossimo futuro potrebbero essere generati direttamente degli eseguibili) ed è stato scritto completamente in C/C++. Le sue prestazioni sono sorprendendenti, la VM è realmente rapida e i risultati sono in alcuni campi decisamente superiori a quelle di altri strumenti analoghi... ed è ancora in fase di ottimizzazione, anzi al momento questo aspetto è stato messo da parte in attesa di avere un boost prestazionale a partire dalle versioni successive alla 0.9. Inoltre è in corso una integrazione con librerie grafiche come Qt ed è anche compreso tra i linguaggi supportati da Kross, il framework di meta-scripting di KDE4, con vicini di casa molto blasonati come Ruby e Python. Falcon è disponilibile su piattaforma Windows, Linux , Solaris e Mac mentre se ne sta curando il porting anche per BSD.

Ci sono controindicazioni? Beh, con la premessa che non esiste il linguaggio definitivo e perfetto, sicuramente Falcon si presenta ancora un po' indietro in termini di diffusione. La Community è ridotta, il linguaggio soffre ancora di qualche baco qua e là (ciò che è evidentemente del tutto comprensibile ed aggiungo che la qualità mi sembra, di contrasto, davvero molto elevata) mancano IDE o strumenti RAD dedicati ed anche il supporto da parte di più diffusi editor di testo è, al momento, ancora non ai massimi livelli. La libreria run-time è piuttosto ridotta rispetto a quanto disponibile per altri linguaggi e questo è un altro difetto di gioventù non facilmente recuperabile in tempi brevi. Va sottolineato come l'autore e i suoi soltanto dalla versione 0.9 hanno un po' spinto per diffondere il linguaggio, avendo invece in precedenza fatto pochissima pubblicità al linguaggio, il quale va detto è open source e fruibile gratuitamente. Si tratta comunque di un progetto di ampia portata, ambizioso e pesante, costantemente in evoluzione. Se vogliamo, esiste un fascino dai due volti legato a questo linguaggio; il primo è che si tratta di un prodotto italiano e, con la dovuta oggettività, un po' di campanilismo a volte ci vuole. Inoltre il voler sviluppare da 0 un prodotto di questa portata, senza sponsor ne appoggi è, a parer mio, una sfida che va quantomeno apprezzata e provata. Oggi ci sono molti linguaggi di scripting, alcuni affermati altri in via di consacrazione... ultimamente è in voga la moda di appoggiarsi a piattaforme precotte come .Net (è il caso di Boo e Cobra ma anche IronPython e IronRuby) oppure Java (Groovy, Scala) il che fornisce un boost notevole, questo è fuori discussione, ma è altrettanto vero che si tratta di scelte un po' di comodo, per quanto assolutamente degne e condivisibili. Il sapersi sporcare le mani, mi si passi il termini, anche con la scrittura di librerie e tools di base è un'arte difficile ma anche tanto degna di rispetto e ammirazione.

Per il momento l'unico sito affidabile (a parte questo :D) è quello ufficiale nella pagina dei links troverete quel poco che c'è in giro su Web (per ora :-)). E' possibile iscriversi al forum, al quale potrete preferire il newsgroup sy Google su il canale IRC, sul quale ho sempre avuto risposte chiare ed educate ai miei tanti quesiti ancorchè fossero banali, prelevare l'interprete, seguire l'evoluzione del progetto, scaricare la documentazione ufficiale. Quest'ultima, va detto, è di qualità molto superiore a ciò che si trova in giro relativamente ai linguaggi di nuova generazione, a testimonianza di una cura direi insolita che l'autore e i suoi collaboratori riversano in questo progetto.

In conclusione si tratta certamente di uno strumento di qualità, con un futuro tutto da costruire ma ricco di promesse.

Ambiti applicativi.

Falcon è un linguaggio di scripting e come tale si comporta. A detta dell'autore stesso esso può esprimersi al meglio nei seguenti ambiti:

  • Integrazione con elementi circostanti preesistenti siano librerie o altri sistemi con cui interagire

  • Manipolazione testo

  • Analisi dei dati, laddove siano escluse pesanti manipolazioni statistiche

  • Manutenzione di sistemi

  • File-dumping

  • Interazione ed inclusione in applicazioni preesistenti

  • Risoluzione di problemi ad alto livello

Viceversa laddove, come accennato, le implicazioni computazionali siano pesanti (analisi statitstica di grosse moli di dati) ma anche relativamente alla gestione di grafica 3D Falcon segna un po' il passo.

Da parte mia non ho la pretesa di insegnare nulla a nessuno: sto seguendo l'evoluzione di Falcon e ne sto apprendendo l'uso. Il materiale presente è solo il frutto delle mie fatiche in questo senso, fatiche i cui risultati intendo condividere con chi è interessato. Inoltre forse riuscirò ad organizzare un repository di risorse di vario genere su questo linguaggio. Ovviamente gratuitamente ho ricevuto e gratuitamente darò... tutto quanto troverete qui insomma è disponibile for free senza alcun bisogno di richieste, al massimo una mail ringraziamento, se siete in buona.

Caratteristiche generali:

  • Falcon è un linguaggio typeless o se preferite debolmente tipizzato. Questo implica varie considerazioni che forse non è il caso di fare in questa sede.... in generale viene garantita una grande flessibilità e dinamismo in quanto nessuna variabile "sposa" a vita in certo tipo e può appunto dinamicamente essere associato ad uno diverso d quello di partenza. Ovviamente però la possibilità di scrivere:
    a = 1 e poi
    a = "1"
    nell'ambito dello stesso programma rende più delicato il processo di rilevazione dei bugs.

  • Come detto è multiparadigma, vedasi più in alto i paradigmi pienamente supportati

  • è altamente orientato al multithreading ed al parallelismo, opzione certamente utile vista la diffusione dei sistemi multi-core e la scarsa disponibilità di strumenti davvero validi in questo campo.

  • E' facilmente integrabile in altre applicazioni ed ambienti e può quindi cooperare favorevolmente con questi. In pratica nonostante sia possibile creare complete applicazioni stand-alone è anche semplice utlizzarlo insieme ad altri sistemi.

  • E' nativamente internazionalizzato. Vedremo cosa questo significa più avanti. Ma è una caratteristica piuttosto rara, direi

  • E' prestazionalmente già abbastanza valido e le future migliorie in questo senso lo renderanno ancora più all'avanguardia da questo punto di vista

  • Supporta la metaprogrammazione e tramite questa caratteristica il linguaggio ha la capacità di gestire le sue stesse applicazioni al momento della compilazione.

  • Permette l'esecuzione di coroutines, per garantire una certa forma di parallelismo chiamiamolo "leggero".

  • Dispone di un proprio meccanismo di file system virtuale, che permette la gestione di dati di natura e provenienza diversa.

  • E' possibile accedere direttamente ai dati in formati binario, quindi gestire i dati stessi al livello più basso possibile

  • altro ancora.....

Insomma c'è da divertirsi....