Eh già ... finalmente sono state rese disponibili
le versioni a 64 bit di Windows
(XP e 2003 Server).
Tecnicamente parlando, il salto è enorme.
L'architettura hardware e l'instruction set consentono di lavorare in modo
nativo con valori di 8 byte: fondamentalmente, i registri sono grandi il doppio,
e vengono ovviamente implementate le istruzioni necessarie a
manipolarli.
I vantaggi, a mio giudizio, vanno in due filoni principali.
Da un lato, le capacità di elaborazione su quantità "grandi" (l'artimetica su
valori a 64 bit risulta ora infinitamente più performante).
Dall'altro la capacità di indirizzamento: puntatori il
doppio più capienti, e possibilità di indirizzare una quantità di memoria
praticamente illimitata (anche se andrei piano con queste considerazioni, visto
che un illustre personaggio
, alcuni anni orsono, sosteneva che il limite dei 640Kb
non sarebbe mai stato un ostacolo !).
Queste caratteristiche vanno ovviamente sfruttate dal software che vi è
costruito sopra.
A partire dal sistema
operativo, per arrivare al software applicativo.
In quest'ottica, credo che la scelta di adottare come target un ambiente
virtuale risulti assolutamente vincente.
Immaginate cosa vorrebbe dire ricompilare ex-novo un'applicazione
nativa.
Controllare di non aver fatto assunzioni legate alla piattaforma
(principalmente sulle dimensioni dei puntatori, allocazioni di memoria, ecc...).
Gestire due versioni dello stesso software, almeno in forma binaria, per
architetture IA32 e IA64.
Spostare tutte queste problematiche nello strato di Virtual Machine non è
cosa da poco, perchè il "lavoro sporco" lo hanno fatto altri, e probabilmente
meglio di come avremmo potuto fare noi (ricordandosi sempre, comunque, che gli
IntPtr esistono e vanno utilizzati in modo appropriato !).
Discutendo il modello di compilazione Just-In-Time, i sostenitori degli
ambienti virtuali portano spesso la maggiore adattabilità all'effettiva
architettura di esecuzione come argomento, a parziale contrappeso rispetto
ad una maggiore lentezza, dovuta ad un ulteriore livello di
indirezione.
Questa argomentazione non mi aveva mai convinto, e tuttora non riesce a
farlo, rimanendo nell'esclusivo campo delle prestazioni.
Però ha risvolti decisamente importanti quando si parla di condivisione di
componenti fra architetture differenti, in termini di uniformità di sviluppo,
manutenibilità ed astrazione.
Non credo che queste considerazioni abbiano mai avuto un peso
primario nella scelta di adottare .NET come piattaforma, almeno rispetto ad altri
fattori, rapidità di sviluppo in primis. Credo, però, che potranno iniziare ad
averlo ora che l'introduzione di hardware e sistema operativo a 64 bit è una
realtà del presente, anche in campo consumer.