2008-10-01 9 views
8

Hay un montón de controladores & aplicaciones famosas que no están disponibles en 64 bits. Adobe, por ejemplo, no proporciona un complemento Flash Player de 64 bits para Internet Explorer. Y debido a eso, aunque estoy ejecutando Vista de 64 bits, tengo que ejecutar IE de 32 bits. Microsoft Office, Visual Studio tampoco se distribuye en AFAIK de 64 bits.¿Cuál es el problema con la creación de versiones de binarios de 64 bits?

Ahora personalmente, no he tenido muchos problemas para crear mis aplicaciones en 64 bits. Solo tengo que recordar algunas reglas generales, p. use siempre SIZE_T en lugar de UINT32 para longitudes de cadena, etc.

Entonces, mi pregunta es, ¿qué impide a las personas construir para 64 bits?

Respuesta

2

Solo una conjetura, pero creo que una gran parte sería soporte: si Adobe compila la versión de 64 bits, tienen que ser compatibles. Aunque puede ser un simple interruptor de compilación, todavía tendrían que pasar por muchas pruebas, etc., seguido de capacitar a su personal de soporte para que respondan correctamente, cuando se topan con problemas que les solucionan cualquiera de los resultados da como resultado una nueva versión de el binario de 32 bits o una bifurcación en el código, etc. Por lo tanto, aunque parezca simple, para una aplicación grande puede terminar costando mucho.

0

Su Linux/Flash blog va de alguna manera para explicar por qué no hay un reproductor Flash de 64 bits todavía. Algunos son específicos de Linux, otros no.

+0

El motor JIT y la basura recogida ActionScript, para resumir. –

+0

Eso fue hace dos años, no creo que sea tan difícil. – stimms

+0

Están a punto de lanzarlo, si me preguntas. Pondré dinero en él al mismo tiempo que CS4. CS5 a más tardar. – Oli

0

Principalmente un problema de soporte y control de calidad. El trabajo de ingeniería para construir para 64 bits es bastante trivial para la mayoría del código, pero el esfuerzo de prueba y el costo de soporte no se reducen de la misma manera.

En el lado de las pruebas, igual tendrá que ejecutar las mismas pruebas, aunque "sepa" que deben pasar.

Para muchas aplicaciones, la conversión a un modelo de memoria de 64 bits en realidad no brinda ningún beneficio (ya que nunca necesitan más de unos pocos GB de RAM), y puede hacer las cosas más lentas, debido a la mayor tamaño de puntero (hace que cada campo de objeto sea dos veces más grande).

Agregue a eso la falta de demanda (debido al problema del huevo/gallina), y puede ver por qué no valdría la pena para la mayoría de los desarrolladores.

15

Si está empezando desde cero, la programación de 64 bits no es tan difícil. Sin embargo, todos los programas que mencionas no son nuevos.

Es mucho más fácil crear una aplicación de 64 bits desde cero, en lugar de exportarla desde una base de código existente. Hay muchos inconvenientes al realizar la migración, especialmente cuando ingresa en aplicaciones donde se ha realizado algún nivel de optimización. Los programadores usan muchas suposiciones para ganar velocidad, y estos no siempre son fáciles de transportar rápidamente a 64 bits. Algunos ejemplos que he tenido que tratar:

  • Alineación correcta de los elementos dentro de una estructura. A medida que cambian los tamaños de los datos, las suposiciones de que ciertos campos en una estructura se alinearán en un límite de memoria óptimo pueden fallar
  • La longitud de long cambia los enteros, por lo que si pasa valores sobre un socket a otro programa que puede no ser de 64 bits, que necesita para refactorizar su código
  • puntero de modificación longitudes, como tan difícil de descifrar el código escrito ser un gurú que ha dejado a la empresa a ser un poco más difícil de depurar
  • bibliotecas subyacentes también tendrá que contar con el apoyo de 64 bits para adecuadamente enlazar.Esta es una gran parte del problema de portar código si confía en cualquier biblioteca que no sea de código abierto
+0

Las plataformas que utilizan un modelo de programación LLP64 (como Microsoft Windows en x64) no tienen enteros largos de 64 bits. – bk1e

1

No es tan simple como simplemente presionar un interruptor en su compilador. Al menos, no si quieres hacerlo bien. El ejemplo más obvio es que necesita declarar todos sus punteros utilizando tipos de datos de 64 bits. Si tiene algún código que haga suposiciones sobre el tamaño de estos punteros (por ejemplo, un tipo de datos que asigna 4 bytes de memoria por puntero), tendrá que cambiarlo. Todo esto debe haberse hecho en cualquier biblioteca que use, también. Además, si pierde unos pocos, terminará con punteros fundidos y en el lugar equivocado. Los punteros no son el único punto pegajoso, pero sin duda son los más obvios.

+0

Bueno, a veces realmente me siento afortunado de haber decidido (ab) usar Java ... * scnr ;-) – Georgi

5

Además de las cosas en @jvasak's post, la principal cosa que puede causa errores:

  • punteros son más grandes que enteros - una gran cantidad de código hace la suposición de que los tamaños son los mismos.

Recuerde que Windows no incluso permitirá una aplicación (ya sea de 32 bits o 64 bits) para manejar punteros que tienen una dirección de arriba 0x7FFFFFFF (2 GB o superior) a menos que hayan sido especialmente marcado como "LARGE_ADDRESS_AWARE" debido a que muchos las aplicaciones tratarán el puntero como un valor negativo en algún punto y se caerán.

3

Otra razón por la que muchas empresas no han realizado el esfuerzo de crear versiones de 64 bits es simplemente que no es necesario.

Windows tiene WoW64 (Windows en Windows 64 bit) y Linux puede tener las librerías de 32 bit disponibles junto con los 64 bit. Ambos nos permiten ejecutar aplicaciones de 32 bits en entornos de 64 bits.

Mientras el software pueda funcionar de esta manera, no hay un incentivo importante para convertir a 64 bits.

Las excepciones a esto son cosas como controladores de dispositivos, ya que están vinculados con los sistemas operativos y no pueden ejecutarse en la capa de 32 bits que ofrecen los sistemas operativos basados ​​en x86-64/AMD64 de 64 bits (IA64 no puede haz esto por lo que entiendo).

Estoy de acuerdo con usted en el reproductor flash, pero estoy muy decepcionado con Adobe por no haber actualizado este producto. Como ha señalado, no funciona correctamente en 64 bits, lo que requiere que ejecute la versión de 32 bits de Internet Explorer.

Creo que es un error estratégico por parte de Adobe. Tener que ejecutar el navegador de 32 bits para Flash Player es un inconveniente para los usuarios, y muchos no entenderán esta solución. Esto podría llevar a los desarrolladores a ser aprensivos sobre el uso de flash. Lo más importante para un sitio web es asegurarse de que todos puedan verlo, las soluciones que alienan a los usuarios generalmente no son populares. La popularidad de Flash se nutrió de su propia popularidad, cuantos más sitios lo usaran, más usuarios lo tenían en sus sistemas, cuantos más usuarios lo tenían en sus sistemas, más sitios estaban dispuestos a usarlo.

El mercado minorista empuja estas cosas hacia adelante, cuando un consumidor general va a comprar una computadora nueva, no van a saber que no necesitan un sistema operativo de 64 bits porque lo van a escuchar porque lo escuchan es lo último y mejor, el futuro de la informática, o simplemente porque no conocen la diferencia.

Vista ha estado fuera durante aproximadamente 2 años y Windows XP de 64 bits ya estaba disponible. En mi opinión, es demasiado tiempo para que una tecnología importante como Flash no se actualice si quieren conservar su mercado.Puede que tenga que ver con que Adobe se haga cargo de Macromedia y esto es una señal de que Adobe no cree que Flash forme parte de su futuro, me resulta difícil de creer ya que creo que Flash y Dreamweaver fueron las partes principales de lo que obtuvieron de Macromedia , pero ¿por qué no lo han actualizado todavía?

4

El problema más grande que he encontrado al portar nuestro código C/C++ a 64 bits es el soporte de bibliotecas de terceros. P.ej. Actualmente, solo hay versiones de 32 bits de la API de Lotus Notes y también de MAPI, por lo que ni siquiera puede vincularlas.

Además, dado que no puede cargar una DLL de 32 bits en su proceso de 64 bits, se quemará de nuevo al intentar cargar cosas dinámicamente. Nos encontramos con este problema de nuevo tratando de admitir Microsoft Access en 64 bits. De wikipedia:

El motor de base de datos de Jet seguirá siendo de 32 bits en el futuro previsible. Microsoft no tiene planes de forma nativa Jet apoyo en las versiones de 64 bits de Windows de

Cuestiones relacionadas