2008-10-01 6 views
8

Ci sono un sacco di driver & famose applicazioni che non sono disponibili in 64-bit. Adobe ad esempio non fornisce un plug-in Flash-Player a 64-bit per Internet Explorer. E per questo motivo, anche se sto usando Vista a 64 bit, devo eseguire l'IE a 32 bit. Microsoft Office, Visual Studio, inoltre, non vengono spediti in AFAIK a 64 bit.Qual è il grosso problema con le versioni di binari BUILDING a 64 bit?

Ora personalmente, non ho avuto molti problemi a sviluppare le mie applicazioni a 64-bit. Devo solo ricordare alcune regole empiriche, ad es. utilizzare sempre SIZE_T invece di UINT32 per lunghezze di stringhe ecc.

Quindi la mia domanda è: cosa impedisce alle persone di creare per 64 bit?

risposta

2

Solo un'ipotesi, ma penserei che una grande parte di esso sarebbe di supporto - Se Adobe compila la versione a 64 bit, devono supportarla. Anche se potrebbe essere un semplice switch di compilazione, dovrebbero comunque eseguire molti test, ecc., Seguito dalla formazione del personale di supporto per rispondere correttamente, quando si imbattono in problemi che li risolvono o si traduce in una nuova versione di il binario a 32 bit o un ramo nel codice, ecc. Così mentre sembra semplice, per una grande applicazione può ancora finire per costare molto.

0

Il loro Linux/Flash blog spiega in qualche modo perché non ci sia ancora un Flash Player a 64 bit. Alcuni sono specifici per Linux, altri no.

+0

Il motore JIT e garbage collection ActionScript di Windows, per riassumere. –

+0

Questo è stato due anni fa, non comprerei che è così difficile. – stimms

+0

Stanno per rilasciarlo, se me lo chiedi. Avrei messo i soldi su di esso in uscita nello stesso periodo di CS4. CS5 al più tardi. – Oli

0

Principalmente un problema di supporto e controllo qualità. Il lavoro di ingegneria da costruire per 64-bit è abbastanza banale per la maggior parte del codice, ma lo sforzo di test e il costo del supporto non si ridimensionano allo stesso modo.

Per quanto riguarda i test, dovrai comunque eseguire tutti gli stessi test, anche se "sai" che devono passare.

Per molte applicazioni, la conversione in un modello di memoria a 64 bit non offre alcun vantaggio (poiché non richiede mai più di un paio di GB di RAM) e può effettivamente rallentare le cose, a causa del più grande dimensione del puntatore (rende ogni campo oggetto due volte più grande).

Aggiungete a ciò la mancanza di richiesta (a causa del problema uovo/gallina), e potete vedere perché non ne varrà la pena per la maggior parte degli sviluppatori.

15

Se si inizia da zero, la programmazione a 64 bit non è così difficile. Tuttavia, tutti i programmi che menzioni non sono nuovi.

È molto più semplice creare un'applicazione a 64 bit da zero, piuttosto che portarla da una base di codice esistente. Ci sono molti trucchi durante il porting, specialmente quando si entra in applicazioni dove è stato fatto un certo livello di ottimizzazione. I programmatori usano molte piccole ipotesi per guadagnare velocità, e questi non sono sempre facili da portare rapidamente a 64-bit. Alcuni esempi che ho avuto a che fare con:

  • Corretto allineamento di elementi all'interno di una struttura. Al variare delle dimensioni dei dati, le ipotesi che alcuni campi di una struttura siano allineati su un limite di memoria ottimale potrebbero non riuscire
  • La lunghezza di long cambia gli interi, quindi se si passano valori su un socket a un altro programma che potrebbe non essere a 64 bit, devi refactoring il tuo codice
  • Le lunghezze dei puntatori cambiano, così difficile da decifrare il codice scritto essere un guru che ha lasciato la compagnia diventare un po 'più complicato per eseguire il debug
  • Le librerie sottostanti dovranno anche avere il supporto 64-bit correttamente collegamento.Questa è una parte importante del problema del porting del codice se ci si basa su qualsiasi libreria che non sia open source
+0

Le piattaforme che utilizzano un modello di programmazione LLP64 (come Microsoft Windows su x64) non hanno numeri interi a 64 bit. – bk1e

1

Non è così semplice come capovolgere un interruttore sul compilatore. Almeno, non se vuoi farlo bene. L'esempio più ovvio è che è necessario dichiarare tutti i puntatori usando i tipi di dati a 64 bit. Se si dispone di un codice che fa presupposti sulla dimensione di questi puntatori (ad esempio un tipo di dati che alloca 4 byte di memoria per puntatore), è necessario modificarlo. Tutto questo deve essere stato fatto in tutte le librerie che usi. Inoltre, se ne manchi solo alcuni, finirai con puntatori in down-casted e nella posizione sbagliata. I puntatori non sono l'unico punto appiccicoso ma sono certamente i più ovvi.

+0

Beh, a volte mi sento davvero fortunato che ho deciso di (ab) usare Java ... * scnr ;-) – Georgi

5

Oltre alle cose nel @jvasak's post, la cosa più importante che può provoca bug:

  • puntatori sono più grandi di interi - un enorme quantità di codice fa l'ipotesi che le dimensioni sono le stesse.

Ricordate che Windows non sarà nemmeno consentire a un'applicazione (sia a 32-bit o 64-bit) per gestire i puntatori che hanno un indirizzo di cui sopra 0x7FFFFFFF (2GB o superiore) a meno che non sono stati appositamente contrassegnato come "LARGE_ADDRESS_AWARE" perché molti le applicazioni considereranno il puntatore un valore negativo ad un certo punto e cadranno.

3

Un'altra ragione per cui molte aziende non hanno affrontato lo sforzo di creare versioni a 64 bit è semplicemente che non è necessario.

Windows ha WoW64 (Windows su Windows 64 bit) e Linux può avere le librerie a 32 bit disponibili a fianco del 64 bit. Entrambe ci permettono di eseguire applicazioni a 32 bit in ambienti a 64 bit.

Fintanto che il software è in grado di funzionare in questo modo, non vi è alcun incentivo importante per convertire a 64 bit.

Eccezioni a questo sono cose come driver di periferica in quanto sono legati in profondità con i sistemi operativi e non possono essere eseguiti nel livello a 32 bit che offrono i sistemi operativi a 64 bit basati su x86-64/AMD64 (IA64 non è in grado di fai questo da quello che capisco).

Sono d'accordo con te su Flash Player, sono molto deluso da Adobe che non hanno aggiornato questo prodotto. Come hai sottolineato, non funziona correttamente a 64 bit richiedendo di eseguire la versione a 32 bit di Internet Explorer.

Penso che sia un errore strategico da parte di Adobe. Dovendo eseguire il browser a 32 bit per il flash player è un inconveniente per gli utenti e molti non capiranno questa soluzione. Ciò potrebbe portare gli sviluppatori a temere l'utilizzo del flash. La cosa più importante per un sito Web è assicurarsi che tutti possano vederlo, le soluzioni che alienano gli utenti in genere non sono popolari. La popolarità di Flash era alimentata dalla sua popolarità, più siti lo utilizzavano, più utenti ne avevano sui loro sistemi, più utenti ne avevano sui loro sistemi, più i siti erano disposti a usarlo.

Il mercato al dettaglio spinge avanti queste cose, quando un consumatore generale va a comprare un nuovo computer, non sapranno che non hanno bisogno di un sistema operativo a 64 bit ma lo otterranno perché lo sentono è l'ultima e la più grande cosa, il futuro dell'informatica, o semplicemente perché non conoscono la differenza.

Vista è fuori per circa 2 anni e Windows XP 64 bit era fuori prima. Nella mia mente è troppo lungo che una tecnologia importante come Flash non venga aggiornata se vogliono mantenere il loro mercato.Potrebbe avere a che fare con Adobe che acquisisce Macromedia e questo è un segno che Adobe non ritiene che Flash sia parte del loro futuro, trovo difficile crederlo visto che penso che Flash e Dreamweaver siano le parti principali di ciò che hanno ottenuto da Macromedia , ma allora perché non l'hanno ancora aggiornato?

4

I problemi più grandi che ho incontrato nel porting del codice C/C++ a 64 bit sono il supporto di librerie di terze parti. Per esempio. al momento ci sono solo versioni a 32 bit dell'API di Lotus Notes e anche MAPI, quindi non puoi nemmeno collegarti a loro.

Inoltre, poiché non è possibile caricare una DLL a 32 bit nel processo a 64 bit, viene nuovamente eseguito il burnt cercando di caricare le cose in modo dinamico. Ci siamo imbattuti nuovamente in questo problema cercando di supportare Microsoft Access a 64 bit. Da wikipedia:

Il motore di database Jet rimarrà 32 bit per il prossimo futuro. Microsoft non ha intenzione di nativamente supporto Jet con le versioni a 64 bit di