D Автоматические ошибки типов (проблема с 64-битной версией?)

Небольшая предыстория: я на 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? Необходимость явно использовать приведения типов и типов везде, кажется, противоположна тому, что привлекло меня в языке в первую очередь...

6
задан 16 March 2012 в 05:22
поделиться