-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2010-03-21 a las 13:43 -0000, Camaleón escribió:
El Sun, 21 Mar 2010 14:07:50 +0100, Carlos E. R. escribió:
Mmm.
Y parte de los problemas que describen son del C, donde un "entero" tiene un tamaño distinto según para que maquina sea el compilador... eso les pasa por no definir nombres unívocos y universales.
Supongo que la culpa no será sólo del lenguaje sino también del programador ¿o esas cosas no se pueden depurar con las herramientas que proporciona C? :-?
No, no es depurable porque es imposible adivinar las intenciones del programador al usar un nombre u otro. El párrafo es este: One important cause of non-portability of software is the incorrect assumption that all computers have the same word size as the computer used by the programmer. For example, if a programmer using the C language incorrectly declares as int a variable that will be used to store values greater than 2¹⁶-1, the program will fail on computers with 16-bit integers. That variable should have been declared as long, which has at least 32 bits on any computer. Programmers may also incorrectly assume that a pointer can be converted to an integer without loss of information, which may work on (some) 32-bit computers, but fail on 64-bit computers with 64-bit pointers and 32-bit integers. El problema es que la definición de "int" o de "long int" es variable, es del tipo "se garantiza que tiene un tamaño mínimo de" y cosas así, en vez de especificar "tiene un tamaño exacto de". Lo que hacemos los programadores es hacer un programita de cuatro lineas que nos pone en pantalla el tamaño de las variables, y a partir de ese momento trabajamos con esa idea mental. El problema es cuando el programa se cambia de máquina y se recompila, por ejemplo, en un 64bit, y de repente unas cuantas variables cambian de tamaño. O peor aún, lo haces en uno más pequeño y los punteros se desbordan... la lias parda. Es por hacer la cuenta de la vieja. Ese párrafo de la wikipedia tan solo esboza el problema. Otra parte del problema es que el compilador de C te permite (puede que ahora te den un warning más o menos gordo) asignar entre sí variables de distinto tamaño o tipo (un puntero a un entero, pe). En otros compiladores de más fuerte tipado para hacer eso tienes que asegurar al compilador que efectivamente quieres hacer esa asignación concreta aunque sea peligroso. El tema de la portabilidad del software no es nada sencillo.
Realmente esa cifra 4.294.967.295 (que expresa tiempo en segundos en samba) equivale a unos ciento treinta y pico años. Es una curiosa forma de aplicarlo. Y una limitación auto-impuesta/ficticia para los sistemas de 64 bits ¿no? :-?
Si usaras un entero de 64 bits entonces tendrías ficheros de configuración distintos según tuvieras sistemas de 64 o de 32 bits.
O dicho de otro modo, no por recompilar un programa para otro procesador mayor tienes todas sus ventajas. También hay que tocar el programa.
Claro. Lo extraño es que no hayan optimizado samba para los 64 bits. O no en todos los aspectos.
De todas formas, para inhabilitar una opción no se me ocurriría usar valores enormes o impensables. No me parece una solución infalible. Prefiero hacerlo en dos pasos: primero un conmutador (0|1) y luego, si "1", permitir la asignación de valores.
Tendrían que usar configuraciones portables, del tipo de "infinito", no un número muy grande. Ya te he dicho que lo de la portabilidad no es precisamente un tema sencillo... yo no me he peleado con ella. - -- Saludos Carlos E. R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkumUKIACgkQtTMYHG2NR9XkewCfRKrrFYVkArrqWgJ7nTnMJWCN e8QAmQFQ4/W/CV5el9d4FwB4Cxsq2Cwb =aakR -----END PGP SIGNATURE-----