Si parla tanto, tantissimo di dotNET e di come sia una
gran bella tecnologia. Bene, penso sia arrivato il momento di guardarla
anche da altri punti di vista. Il mio è quello di uno che, di
base, è abbastanza informato anche se non si è ancora addentrato in tutti i
meandri di dotNET. Spero non ci siano informazioni sbagliate, quindi dico quello
che so sperando che sia giusto .
Cominciamo dal fatto che dotNET esiste anche per altre piattaforme, più
precisamente Mono, che è standard e tutte 'ste robe qui.
Non so se qualcuno ci ha fatto caso, ma MS cerca a tutti i costi di uscire
con dotNET2 mentre i ragazzi di Mono stanno ancora cercando di arrivare a finire
la corrispondenza alla 1.1 di dotNET. Questo la dice lunga su quanto sia
"completo" il port e quanto MS sia disponibile a che dotNET sia
multipiattaforma. Qualcuno potrebbe quindi chiedersi il perché della decisione
di Microsoft di standardizzare C# ed il CLR.
La mia opinione è che sia stata
una mossa geniale, oltre che un grandioso specchietto per le allodole: una
standardizzazione non significa necessariamente dover seguire lo standard e
Microsoft ha dimostrato più volte di essere allergica agli standard, perfino i
suoi medesimi(vedi pasticcio con le typelibraries di Office, tanto per citare
l'esempio più conosciuto, oppure perfino le incompatibilità di dotNET 1.1 SP1).
Inoltre, Visual Studio ha la fetta più grossa di mercato su dotNET, questo è
indubbio, quindi la stragrande maggioranza di coloro che vorranno usare dotNET
lo faranno con VS.
Perché il designer WinForms è stato incluso nel framework?
Semplice, perché non è su quello che si basano i proventi di Visual Studio, ma
sulla vendita del prodotto in se e sui servizi accessori. Ancora una volta, un
modo per Microsoft di attrarre persone e dare una parvenza di non
monopolio(rendendo ad esempio possibile la realizzazione di SharpDevelop). Dunque,
qui mi pare adesso sia chiaro, no?
Passiamo ad un altro punto fondamentale: Microsoft dice che dotNET risolverà
il problema dell'inferno delle DLL(altrimenti noto come DLL Hell). In cosa
consiste questo ecc. Il risultato era un malfunzionamento generalizzato delle
applicazioni coinvolte.problema? Nel fatto che un certo(alto, molto alto) numero
di sviluppatori non ha fatto "le cose perbene"(cit) e quindi alcune DLL andavano
a sovrascriverne altre, senza alcuna accortezza per i numeri di versione,
generando malfunzionamenti di ogni sorta e specie.
Dunque, lo strumento
"principe" per la risoluzione di questo problema in dotNET è l'uso dello strong
naming. Come funziona? Semplicemente, si "firma" un assembly con un certificato
che attesta che l'assembly ha la versione X.Y e che quindi tutte le applicazioni
che fanno riferimento a quella versione di quell'assembly sanno
che è lui. Parte fondamentale di questo processo è la Global Assembly Cache, GAC
per gli amici, che appunto conserva gli assembly più utilizzati. Cosa succede,
però? Nonostante sia possibile registrare degli assembly nella
GAC, Microsoft sconsiglia questa pratica a quanto ho capito.
Ergo,
strong naming ti saluto. Inoltre, so che non ce n'è bisogno ma lo dico lo
stesso, è normale che se non vengono rispettate le regole di base di "civile
convivenza" tra gli assembly e compagnia, qualcosa di molto, molto, molto brutto
dovrà succedere prima o poi, vi pare?
Adesso invece, occupiamoci della "portabilità": qui il discorso deve prendere
una ramificazione dicotomica. Il problema è che bisogna distinugere tra
lato server e lato client. Non solo, ma anche tra diverse versioni del
Framework, perché ormai ci avviamo alla 2.0 ed il numero sta crescendo in modo
preoccupante. Il perché di questa mia preoccupazione lo vediamo dopo.
Occupiamoci intanto del fattore portabilità sul lato client. Voi mettereste il
motore di una macchina moderna dentro ad una vecchia 500? Non penso proprio.
Però è, in poche parole, quello che vorrebbero fare con dotNET ed i varii
Windows(9x,ME, ecc). Capite bene che non solo mi sembra un'idea abbastanza
peregrina di concetto(ed infatti nessuno osa ammetterlo pubblicamente), ma
anche, a mio parere, praticamente irrealizzabile, vista la frequenza dei
crash di Windows 98, tanto per dirne uno. Non mi si venga per favore a dire
che non ce ne sono più, perché non è semplicemente vero. Una mia cara amica ha
Windows ME. Un altro amico ha 98. Ce ne sono molti di più di quanti molti di noi
spererebbero, mi sa, e non soltanto in ambito aziendale.
Ho voluto affrontare il tema della portabilità in maniera dicotomica perché
la questione della "compatibilità" delle varie versioni del framework tra loro è
un fattore importante. Molto importante. Stando a questo articolo, le cose non sono rosee per dotNET2, per i motivi
riportati. "Certo, comunque in caso di problemi si può sempre usare il framework
1.1 side-by-side", viene detto. Sicuro, aggiungo io, tanto non abbiamo mica
altri programmi da far girare sul sistema no - oltre alle applicazioni dotNET.
Facendo un rapido conto e mantenendosi su una media di 20MB a framework e
considerando il caso peggiore(1.0, 1.1 SP1 e 2.0), soltanto
di base ci portiamo dietro la bellezza di 60 MB.
Naturalmente, non è finita qui, perché oltre al CLR dobbiamo anche portarci i
vari assembly che, vale la pena ricordarlo, sono DLL. Già, sono DLL, però non
condividono lo spazio di memoria. Quindi per ogni applicazione avremo un
caricamento di tutte le DLL. Tanti auguri.
Altro da aggiungere? Direi di si... spesso si dice che esiste NGEN, un tool
capace di preconvertire il codice IL in codice nativo... già... ne vogliamo
parlare? Questo articolo, fà chiaramente intendere come stanno
veramente le cose, al di là della propaganda e non sono cose da
poco. Il perché è presto detto: nell'articolo si dice(testualmente):" The downside, of course,
is that whenever the runtime (for example via a Service Pack) or one of the
dependencies of your ngen images changes (version upgrade or patch), your ngen
image becomes invalid". Capito? Quindi, non solo valgono soltanto per il
computer per il quale vengono generate, ma anche soltanto fino al prossimo
update di una qualsiasi cosa che in qualche modo modifichi lo stato del sistema
inerentemente all'immagine considerata. Credo che sia abbastanza ovvio che sia
così, perché è chiaro che se cambia qualcosa magari cambiano gli indirizzi e
così via, però fà anche capire che il trade-off nella maggior parte dei casi,
almeno dal mio punto di vista, non è accettabile.
Bene, per ora mi fermo qui, anche se avrei molte altre cose da dire... però
prima preferisco aspettare i commenti .
Buona Domenica,
Andrea