Falcon - il linguaggio

Introduzione               
 
Falcon è un lingaggio di scripting multi paradigma creato a partire dal 2003 dal programmatore italiano Giancarlo Niccolai, partendo da un progetto che originariamente si chiamava Haste. Le caratteristiche di questo strumento sono così tante che veramente si ha l'impressione di avere a che fare con qualche cosa al di fuori degli schemi. E l'intento dell'autore è esattamente quello. Piuttosto che creare un clone di altri linguaggi con qualche differenza qua e là, Niccolai ha cercato realmente di fare qualche cosa di nuovo, qualche cosa che il mondo della programmazione potesse ricordare. Certamente non è una ambizione da poco ma qualcuno deve pur provarci....

Questo linguaggio supporta innanzitutto un ampio ventaglio di paradigmi:
  • a oggetti, classico
  • procedurale
  • funzionale
  • tabulare
  • prototype oriented
  • message oriented

Di ciascun aspetto parleremo con calma ma una prima spiegazione la merita proprio questo pluralismo. L'idea base è quella di fornire uno strumento duttile che si pieghi alle necessità dello sviluppatore senza costringerlo a seguire una strada rigidamente imposta. Mi pare una caratteristica interessante anche se i critici non mancano mai in occasioni come questa di sottolineare che "non incoraggia uno stile di programmazione definito". Se sia un pro (come a me pare) o no (come legittimamente ad altri può apparire) fate vobis. Io credo che sia positivo avere per le mani qualcosa di così potente e che sia dovere di chi programma fare buon uso di quanto gli viene messo a disposizione. Però, come detto, c'è anche chi la pensa diversamente e può avere le sue ragioni.

Falcon, che è stato scritto interamente in C/C++, gira in una propria macchina virtuale, molto efficiente, è pertanto un linguaggio interpretato (in futuro si potranno avere degli eseguibili per la piattaforma sottostante) nella progettazione del quale tuttavia l'aspetto prestazionale è stato messo in primo piano. Falcon è veloce. La VM è stata costruita da zero, quindi niente Java o .Net di mezzo. Questo può essere un piccolo handicap i due colossi appena citati si portano dietro una quantità enorme di conoscenza. documentazione e strumenti ma l'autore di Falcon voleva di più e ha saputo "sporcarsi le mani" facendo da solo. Quantomeno è apprezzabile non vi pare? Questo linguaggio è' disponibile per Windows, Linux e Mac ed il suo campo applicativo si può considerare quasi totale. Da un lato si presta ad essere integrato in altri sistemi, da buon linguaggio di scripting, come ad esempio dispositivi embedding ma è anche adatto per creare siti Web dinamici, così come complesse applicazioni stand-alone. A parte questi aspetti general purpose Falcon dà il meglio di sè in particolare 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 con ed inclusione in sistemi embedded
  • Risoluzione di problemi ad alto livello

Viceversa in caso di pesanti elaborazioni dati o per applicazioni di grafica 3D probabilmente al momento Falcon non è la scelta migliore. In futuro ovviamente potrebbero esserci librerie esterne dedicate.

Detto che sono in corso operazioni di integrazione del linguaggio con altri framework, com Qt, possiamo generalizzare le carateristiche del linguaggio come segue:

  • Falcon è un linguaggio typeless o se preferite "dinamico". 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 = "mamma"
    nell'ambito dello stesso programma rende più delicato il processo di rilevazione dei bugs. La disputa tra linguaggi statici e dinamici è una questione aperta che non si chiuderà forse mai.
  • 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 se si vuole c'è da divertirsi.

Come in tutte le cose ci sono delle controindicazioni. Il linguaggio perfetto non esiste e, oltre agli ambiti in cui Falcon ha un po' il fiato lungo ci sono altre considerazioni da fare: sicuramente qeusti linguaggio si presenta ancora un po' indietro in termini di diffusione. La Community è ridotta, l'insieme presumibilmente 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. Se la produttività immediata è un must certamente alcuni di questi problemi possono dare un po' fastidio, è innegabile. Se volete impararlo "tutto" ci vorrà un po' di tempo, sicuramente. Per questo la sua adozione su larga scala è tutta da verificare; non sempre i prodotti software hanno una diffusione pari ai loro meriti. Vale tuttavia la pena evidenziare che Falcon è tra i linguaggi di scripting supportati da Kroos, il framework di scripting per KDE e da AppCelerator's Titanium. Non è male, considerando che l'adozione è ben antecedente l'uscita della versione 1.0 di Falcon.

Se comunque volete provare uno strumento dalle potenzialità sorprendenti e che interesserà anche dal punto di vista della teoria che gli gira intorno direi che Falcon non vi deluderà e il suo studio sarà tempo ben investito. Tra l'altro il prezzo dell'investimento è zero, Falcon è gratuitamente disponibile con licenza GPL/FPLL ma in pratica vuol dire che, se non vi va di donare di vostra iniziativa, potete usare questo linguaggio da subito senza pagare nulla.