Długa wersja...
Pewien współpracownik zapewnił mnie dzisiaj po obejrzeniu mojego użycia while (1)
w skrypcie Perla, który for (;;)
jest szybszy. Argumentowałem, że powinny być takie same, mając nadzieję, że tłumacz zoptymalizuje wszelkie różnice. Skonfigurowałem skrypt, który będzie uruchamiał 1 000 000 000 dla iteracji pętli i tej samej liczby pętli while i rejestruje czas między nimi. Nie mogłem znaleźć żadnej znaczącej różnicy. Mój współpracownik powiedział, że profesor powiedział mu, że while (1)
robi porównanie, 1 == 1
a for (;;)
nie. Powtórzyliśmy ten sam test przy 100-krotnej liczbie iteracji w C ++ i różnica była nieistotna. Był to jednak graficzny przykład tego, o ile szybciej można skompilować kod w porównaniu z językiem skryptowym.
Krótka wersja...
Czy jest jakiś powód, aby preferować a while (1)
over a, for (;;)
jeśli potrzebujesz nieskończonej pętli, z której chcesz się wyrwać?
Uwaga: jeśli nie wynika to jasno z pytania. To była czysto zabawna dyskusja akademicka między kilkoma przyjaciółmi. Zdaję sobie sprawę, że nie jest to super ważna koncepcja, nad którą wszyscy programiści powinni się męczyć. Dzięki za wszystkie świetne odpowiedzi. Ja (i jestem pewien, że inni) nauczyłem się kilku rzeczy z tej dyskusji.
Aktualizacja: Wspomniany wyżej współpracownik odniósł się do odpowiedzi poniżej.
Cytowany tutaj na wypadek, gdyby został zakopany.
Pochodzi od programisty zespołu AMD. Stwierdził, że programiści C (ludzie) nie zdają sobie sprawy, że ich kod jest nieefektywny. Powiedział jednak dzisiaj, że kompilatory gcc są bardzo dobre i pozbawiają ludzi takich jak on interes. Powiedział na przykład, i powiedział mi o
while 1
vsfor(;;)
. Używam go teraz z przyzwyczajenia, ale gcc, a zwłaszcza interpretery, będą wykonywać tę samą operację (skok procesora) przez oba te dni, ponieważ są zoptymalizowane.