Небольшая предыстория: я на Mac OSX Lion (очевидно, 64-битная) и я долгое время Java-разработчик, заинтересованный в изучении D.
Я взял копию Языка программирования Dи не понял несколько вещей. Во-первых, если я попробую что-то вроде следующего (прямо из книги):
int[] months = new int[12];
foreach (i, ref month; months) {
month = i + 1;
}
я получаю следующую ошибку:
Ошибка: невозможно неявно преобразовать выражение (i + 1LU) типа ulong в int
Это исправлено изменив i
на int i
.
Я думаю, это связано с тем, что автоматический тип чисел на 64-битной платформе — ulong
, поэтому вывод типа на самом деле не работает.
Теперь у меня возникла следующая проблема:
bool binarySearch(T)(T[] input, T value) {
// ...
int i = input.length / 2;
// ...
}
Это возвращает следующую ошибку компиляции:
Ошибка: невозможно неявно преобразовать выражение (input.length / 2LU) типа ulong в int
Приведение исправляет это, но я лучше нет. Я также получаю другие глупые ошибки, связанные с получением длинных
значений из вычислений и невозможностью использовать их для индексации в массивы. 64-битная поддержка D еще не реализована? Что я могу сделать, чтобы избежать проблем в будущем при изучении D? Необходимость явно использовать приведения типов и типов везде, кажется, противоположна тому, что привлекло меня в языке в первую очередь...