Just a Ride
Dicevo altrove di aver provato Vala, il linguaggio C#-like scritto usando GLib e GObject come base, e che viene “compilato” in C invece di usare una VM e un linguaggio intermedio1.
Ho trovato dei difetti nel layer di traduzione, ma sono dovuti essenzialmente alla giovane età del progetto, e il team di sviluppo sta raccogliendo intorno a sé una quantità di collaboratori più o meno saltuari che fa ben sperare. In più, la mera esistenza di Vala sta spingendo a completare il supporto per l’introspezione in GObject2.
Quello che più mi interessa, però, è la possibilità di avere un linguaggio a medio/alto ufficialmente sanzionato da GNOME - come Objective-C da Apple. Intendiamoci: la quantità di binding già presenti è enorme, e già oggi se volessi scrivere un’applicazione per GNOME potrei farlo in Perl, come in Java, come in C# e perfino con quel train wreck di Python3. Tuttavia, i bindings sono quello che sono: si portano dietro virtual machine, ambienti di runtime, licenze, implementazioni patent encumbered e altre amenità.
Intendiamoci: non ho nulla contro le VM - a parte l’obiezione classica: “sto già usando una macchina virtuale su una macchina reale, perché devo usarne un’altra ancora per ogni linguaggio?”; tuttavia, e specie sulle macchine su cui lavoro, una virtual machine è già sufficiente - figuriamoci quattro o cinque. Mi piacerebbe che qualcuno prendesse Mono e ci portasse più di tre o quattro linguaggi; mi piacerebbe ancora di più che qualcuno prendesse Parrot e lo completasse. Mi piacerebbe, insomma, avere una macchina virtuale per tutti i linguaggi ad alto livello. Se non posso averla, allora tanto vale usare Vala.
- si potrebbe arguire come, in realtà, la VM usata sia il sistema operativo ospite, e che sicuramente esistono più piattaforme con un compilatore C che piattaforme che supportano Java o C# [↩]
- ovvero la possibilità di avere meta-informazioni a runtime su una libreria, sulle API e sui tipi di dati esportati [↩]
- che, spero, Python 3.0 affosserà definitivamente con tutte le modifiche arbitrarie alle API senza vere nuove feature; non ci resta, quindi, che sperare in IronPython per una implementazione sana di mente? non voglio pensarci [↩]