Phiên bản dài ...
Một đồng nghiệp đã khẳng định ngày hôm nay sau khi thấy tôi sử dụng while (1)
tập lệnh Perl for (;;)
nhanh hơn. Tôi lập luận rằng họ nên giống nhau với hy vọng rằng người phiên dịch sẽ tối ưu hóa mọi khác biệt. Tôi thiết lập một tập lệnh sẽ chạy 1.000.000.000 cho các vòng lặp lặp và cùng số vòng lặp while và ghi lại thời gian giữa. Tôi không thể tìm thấy sự khác biệt đáng kể. Đồng nghiệp của tôi nói rằng một giáo sư đã nói với anh ta rằng họ while (1)
đang làm một phép so sánh 1 == 1
và for (;;)
không. Chúng tôi lặp lại thử nghiệm tương tự với số lần lặp 100 lần với C ++ và sự khác biệt là không đáng kể. Tuy nhiên, đây là một ví dụ đồ họa về việc mã được biên dịch nhanh hơn bao nhiêu so với ngôn ngữ kịch bản.
Phiên bản ngắn...
Có bất kỳ lý do để thích while (1)
hơn một for (;;)
nếu bạn cần một vòng lặp vô hạn để thoát ra?
Lưu ý: Nếu nó không rõ ràng từ câu hỏi. Đây hoàn toàn là một cuộc thảo luận học thuật thú vị giữa một vài người bạn. Tôi biết rằng đây không phải là một khái niệm siêu quan trọng mà tất cả các lập trình viên nên thống nhất. Cảm ơn tất cả các câu trả lời tuyệt vời mà tôi (và tôi chắc chắn rằng những người khác) đã học được một vài điều từ cuộc thảo luận này.
Cập nhật: Đồng nghiệp đã nói ở trên cân nhắc với một phản hồi bên dưới.
Trích dẫn ở đây trong trường hợp nó được chôn cất.
Nó đến từ một lập trình viên lắp ráp AMD. Ông tuyên bố rằng các lập trình viên C (poeple) không nhận ra rằng mã của họ không hiệu quả. Anh ấy nói hôm nay mặc dù, trình biên dịch gcc rất tốt và đưa những người như anh ấy ra khỏi doanh nghiệp. Ông nói ví dụ, và nói với tôi về
while 1
vsfor(;;)
. Bây giờ tôi sử dụng nó theo thói quen nhưng gcc và đặc biệt là thông dịch viên sẽ thực hiện cùng một thao tác (nhảy bộ xử lý) cho cả hai ngày này, vì chúng được tối ưu hóa.