un poco de historia: Estoy en Mac OS X Lion (64 bits, obviamente) y yo soy un largo tiempo de desarrollo de Java interesado en aprender D.errores D Automatica (Número 64 bits?)
Me recogió una copia de El lenguaje de programación D y estoy confundido en algunas cosas. En primer lugar, si intento algo como lo siguiente (directamente desde el libro):
int[] months = new int[12];
foreach (i, ref month; months) {
month = i + 1;
}
me sale el siguiente error:
Error: cannot implicitly convert expression (i + 1LU) of type ulong to int
Esto se corrige cambiando i
-int i
.
Creo que esto se debe a que el tipo automático para números en una plataforma de 64 bits es ulong
y la inferencia de tipo no funciona.
ahora tengo el siguiente problema:
bool binarySearch(T)(T[] input, T value) {
// ...
int i = input.length/2;
// ...
}
que devuelve el siguiente error de compilación:
Error: cannot implicitly convert expression (input.length/2LU) of type ulong to int
correcciones de lanzar este, pero yo preferiría no hacerlo. También recibo otros errores tontos relacionados con la obtención de valores long
de los cálculos y luego no poder usarlos para indexarlos en matrices. ¿El soporte de D de 64 bits aún no está a la altura? ¿Qué puedo hacer para evitar problemas en el futuro mientras estoy aprendiendo D? Tener que utilizar explícitamente moldes y tipos de todo el mundo parece ser lo contrario de lo que me atrajo de la lengua en el primer lugar ...
Nota: Esto sólo es "tonta" porque no ha utilizado C y en Java, código independiente de la arquitectura en realidad no existe. Entonces, o bien se ve obligado a usar enteros de 32 bits o enteros de 64 bits en Java para indexar una matriz, mientras que en C (y D), debe usar 'size_t' al indexar una matriz. Esto hace que su código sea mucho más correcto (e independiente de la plataforma), aunque, por supuesto, D maneja este tipeo para usted. (Tanto en C como en D, 'size_t' casi siempre tiene un alias automático para un entero de 32 bits sin signo o uno de 64 bits sin signo, razón por la cual está viendo uno de esos nombres en lugar de' size_t'). – Mehrdad