Một nền chút: Tôi đang trên Mac OSX Lion (64 bit, rõ ràng) và Tôi là một thời gian dài phát triển Java quan tâm đến việc học tập D.D Loại Automatic lỗi (64 bit vấn đề?)
Tôi nhặt một bản sao của Ngôn ngữ lập trình D và tôi đang bối rối về một vài điều. Thứ nhất, nếu tôi cố gắng một cái gì đó như sau (thẳng từ cuốn sách):
int[] months = new int[12];
foreach (i, ref month; months) {
month = i + 1;
}
tôi nhận được lỗi sau:
Error: cannot implicitly convert expression (i + 1LU) of type ulong to int
này được cố định bằng cách thay đổi i
-int i
.
Tôi nghĩ rằng điều này là do loại tự động cho số trên nền tảng 64 bit là ulong
và do đó, suy luận loại không thực sự hiệu quả.
Bây giờ tôi có vấn đề sau đây:
bool binarySearch(T)(T[] input, T value) {
// ...
int i = input.length/2;
// ...
}
Đó trả về lỗi biên dịch sau:
Error: cannot implicitly convert expression (input.length/2LU) of type ulong to int
sửa Đúc này, nhưng tôi không muốn. Tôi cũng nhận được các lỗi ngớ ngẩn khác liên quan đến việc nhận các giá trị long
từ các phép tính và sau đó không thể sử dụng chúng để lập chỉ mục thành các mảng. Hỗ trợ 64 bit của D có phải là chưa đến mức không? Tôi có thể làm gì để tránh rắc rối trong tương lai khi học D? Phải sử dụng rõ ràng các loại phôi và loại ở mọi nơi dường như ngược lại với thứ thu hút tôi đến ngôn ngữ ngay từ đầu ...
Lưu ý: Đây chỉ là "ngớ ngẩn" bởi vì bạn đã không sử dụng C, và trong Java, kiến trúc độc lập mã không thực sự tồn tại. Vì vậy, bạn buộc phải sử dụng số nguyên 32 bit hoặc số nguyên 64 bit trong Java để lập chỉ mục một mảng, trong khi trong C (và D), bạn nên sử dụng 'size_t' khi lập chỉ mục một mảng. Điều này làm cho mã của bạn chính xác hơn nhiều (và nền tảng độc lập), mặc dù tất nhiên, D xử lý việc đánh máy này cho bạn. (Trong cả C và D, 'size_t' hầu như luôn được tự động đặt biệt với một số nguyên 32 bit không dấu hoặc một bit không dấu 64 bit, đó là lý do tại sao bạn nhìn thấy một trong những tên đó thay vì' size_t'.) – Mehrdad