Немного предыстории: я нахожусь на 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
Кастинг это исправляет, но я бы не хотел. Я также получаю другие глупые ошибки, связанные с получением long
значений из вычислений и невозможностью использовать их для индексации в массивах. 64-битная поддержка D еще не до конца? Что я могу сделать, чтобы избежать проблем в будущем, изучая D? Необходимость явного использования приведений и типов повсюду кажется противоположностью того, что привлекло меня в первую очередь к языку ...