Un linguaggio non è multipiattaforma soltanto perché utilizza una VM

Vai alla fonte

L’altro giorno, mentre giravo come mio solito tra forum e blog, mi sono imbattuto nella solita discussione informatica tra “opposte fazioni”. Questa volta le fazioni in campo erano quelle degli sviluppatori .NET e degli sviluppatori Java, purtroppo non ricordo il sito internet in cui ho letto la discussione, altrimenti ve lo linkerei, tuttavia molti di voi avranno già chiara l’idea del tipo di discussione in cui mi sono imbattuto.

Riassumendo il discorso girava su tre questioni principali:
1) .NET è una copia spudorata di JAVA;
2) .NET è software proprietario, JAVA è software libero;
3) Java è migliore per sviluppare software multipiattaforma;

.NET è una copia spudorata di JAVA

La prima questione ricorda molto il chiasso generato dal video di David Pogue sulle differenze tra l’interfaccia grafica di OSX e Vista. Io non credo che David Pogue si fosse preso tanto sul serio durante la realizzazione di quel video, tant’è che l’intero filmato ha un’impostazione ilare, canzonatoria si, ma divertente e non troppo seria. Io ad esempio avevo pubblicato quel video come pretesto per discutere il mio punto di vista sulle interfacce grafiche, punto di vista che tra l’altro ho approfondito meglio proprio l’altro giorno con un articolo su Kde 4.1. Eppure quel video è stato preso molto sul serio da altri utenti del web e David Pogue è diventato, a seconda dei casi, un fazioso utente MAC o un dispensatore di verità assolute.

Il logo di Java

Ora, io che sono un avversore dei Brevetti Software perché trovo assurdo che si possano brevettare cose come un bottone che svolge una determinata funzione su un sito internet o il concetto stesso di negozio online; io che sono convinto del fatto che sia impossibile stabilire se sia nato prima l’uovo o la gallina e che ritengo gli algoritmi informatici un bene di tutti, come le formule matematiche, come potrei mai sostenere teorie balzane su chi abbia inventato prima i widgets (o gadgets o plasmoidi)?

Allo stesso modo accapigliarsi su quale linguaggio abbia copiato l’altro equivale, a mio modesto avviso, ad accapigliarsi per stabilire la paternità dell’algoritmo bubble sort. Eppure per molti queste battaglie “morali” hanno un senso.

.NET è software proprietario, JAVA no

In realtà già confrontare .NET con JAVA è un errore. dotNet infatti è un framework, quindi semmai andrebbe confrontato con NetBeans o Struts. Tra l’altro .NET supporta molti linguaggi, anche se non saprei dirvi “come” in quanto non ho mai sviluppato con tale piattaforma. Lo stesso errore viene fatto anche in altre diatribe, quella che ad esempio mette a confronto PHP con RAILS. Detto questo quindi il confronto si dovrebbe fare sui linguaggi di programmazione, nello specifico C# e JAVA. Su questo sarei quasi concorde con i sostenitori di JAVA, che però è diventato software libero praticamente l’altro ieri, però esistono compilatori open source per C# (Mono, DotGnu), lo standard de facto è Visual C#, che è proprietario e funziona solo su piattaforma Microsoft, ma gli standard vengono scelti dagli utenti (in questo caso gli sviluppatori), che quindi devono prendersi necessariamente la loro parte di colpe. Tuttavia non si può trascurare il fatto che è possibile sviluppare software libero (ed anche proprietario) utilizzando implementazioni libere di compilatori C#, che, lo ricordo, è uno standard ISO.

Microsoft net logo

Java è migliore per sviluppare software multipiattaforma

Questa è la parte più interessante di tutta la discussione, forse il motivo principale che mi ha spinto a scrivere questo pezzo. Lo sviluppo multipiattaforma va di moda e per molti l’uovo di colombo dello sviluppo multipiattaforma sono proprio i linguaggi interpretati, come appunto Java, C#, ma anche Python o Ruby. Colpa di Java in principal modo, linguaggio che per primo ha pubblicizzato ampliamente la sua natura “multi device”, colpa anche del mercato che ormai (per fortuna) richiede sempre maggiore interoperabilità tra i sistemi operativi.

In realtà il parallelo secondo cui i linguaggi interpretati sono intrinsecamente e “naturalmente” multipiattaforma è una fantasmagorica fesseria. La programmazione multipiattaforma richiede particolari attenzioni ed accortezze che poco hanno a che fare con il tipo di linguaggio utilizzato, questo è vero sia per i linguaggi compilati che per i linguaggi interpretati. Anche quando si sviluppa lato server, ad esempio con PHP, spesso bisogna avere accortezze per accertarsi che il nostro programma funzioni sia su server Windows che su server Gnu/Linux o BSD, figurarsi quando si sviluppa un’applicazione desktop che magari si appoggia largamente su librerie esterne e fa uso di chiamate di sistema, che in quanto tali variano a seconda del kernel e delle API del sistema operativo!

Anche se esistono versioni multipiattaforma di interpreti del vostro linguaggio preferito ciò non vuol dire necessariamente che scrivere un software multipiattaforma sia un gioco da ragazzi, anzi, le difficoltà cresceranno man mano che crescerà la complicazione del software che state sviluppando. Se scrivete un programma senza valutare attentamente le librerie che userete ed il metodo d’approccio alle chiamate di sistema state sicuri che il vostro software sarà tutt’altro che multpiattaforma.

Visto che le complicazioni sono quasi le stesse con tutti i linguaggi (con differenze minime derivanti più dalle librerie a disposizione che non dal linguaggio stesso in quanto tale) ecco quindi che il vantaggio dei linguaggi interpretati rispetto al C++ è soltanto, ed in teoria, la maggiore velocità e semplicità di sviluppo dell’applicazione rispetto al linguaggio compilato per eccellenza. Ma tale punto a favore svanisce letteralmente quando in gioco entrano le prestazioni.

gtk logo

Ci sarà un motivo se la maggior parte delle applicazioni che utilizzate nei vostri computer sono sviluppate in C e C++ e non in .NET e Java. Ditemi, quanti di voi utilizzano Azureus (ora Vuze) o Deluge , e quanti invece hanno abbandonato questi client in favore dei più leggeri Transmission e Utorrent? Quanti utilizzano Banshee invece di Rhythmbox o Amarok? Perché Office, OpenOffice, Gimp, Photoshop, Firefox sono scritti con linguaggi compilati? Perché il progetto Looking Glass è rimasto sempre un proof of concept mentre Compiz furoreggia ormai da un po’ sulle linux box di molti amanti del pinguino?

Pensare di creare sistemi desktop pesantemente basati su linguaggi interpretati come Java e C# è una follia, eppure è una follia che molti appoggiano. Va bene che i computer oggi hanno potenze spropositate ma se devo comprare un quad core solo per avere velocità e funzionalità pari ad un misero Athlon XP a questo punto dov’è il vantaggio? La mia conclusione quindi é: volete sviluppare programmi multipiattaforma davvero concorrenziali? Usate C++ e C. Sviluppate programmi più semplici e specialistici per i piccoli e medi uffici? Se potete utilizzate lo stesso C++, sarete sempre più avanti rispetto ai vostri concorrenti, anche se avrete qualche difficoltà in più in fase di sviluppo. Ove non siano necessarie funzionalità avanzate sviluppate applicazioni web based con un server centralizzato, il deployment sarà decisamente più semplice. Nel caso di sviluppo di applicazioni web based la scelta del linguaggio sarà decisamente basata su altri canoni, (così come le scelte variano a seconda del tipo di device che si intende programmare) ma di questo magari parleremo in un’altra occasione.

Commenta

Articoli Correlati