Un linguaggio non è multipiattaforma soltanto perché utilizza una VM

 

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 , purtroppo non ricordo il sito 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 ;
2) .NET è software proprietario, è software libero;
3) è migliore per sviluppare software ;

.NET è una copia spudorata di

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 , tant’è che l’intero filmato ha un’impostazione ilare, canzonatoria si, ma divertente e non troppo seria. Io ad esempio avevo pubblicato quel 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 è 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à ’algoritmo bubble sort. Eppure per molti queste battaglie “morali” hanno un senso.

.NET è software proprietario, no

In realtà già confrontare .NET con è 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 . Su questo sarei quasi concorde con i sostenitori di , 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 , 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

è migliore per sviluppare software

Questa è la parte più interessante di tutta la discussione, forse il motivo principale che mi ha spinto a scrivere questo pezzo. Lo sviluppo va di moda e per molti l’uovo di colombo dello sviluppo sono proprio i linguaggi interpretati, come appunto , C#, ma anche Python o Ruby. Colpa di 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” è una fantasmagorica fesseria. La programmazione 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 funzioni sia su server 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 di interpreti del vostro linguaggio preferito ciò non vuol dire necessariamente che scrivere un software sia un da ragazzi, anzi, le difficoltà cresceranno man mano che crescerà la complicazione del software che state sviluppando. Se scrivete un 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 ’applicazione rispetto al linguaggio compilato per eccellenza. Ma tale punto a favore svanisce letteralmente quando in entrano le prestazioni.

gtk logo

Ci sarà un motivo se la maggior parte delle applicazioni che utilizzate nei vostri sono sviluppate in C e C++ e non in .NET e . 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 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 e C# è una follia, eppure è una follia che molti appoggiano. Va bene che i 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 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 .

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Post correlati

 

Discussion

What do you think? Leave a comment. Alternatively, write a post on your own weblog; this blog accepts trackbacks [trackback url].

Leave a Reply