![]() |
|
Модераторы: Се ля ви |
![]()
|
|
| Тутанхамец |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Здравствуйте!
Не очень представляю, как надо было назвать тему и куда ее поместить. Есть два вариант кода:
Пример на VB, но записать можно на любом языке. Я стараюсь писать по второму варианту, то есть так, чтобы при проверке условия не выполнялось много раз одна и та же операция. Вроде бы, по логике работы цикла for (что в Basic, что в Pascal, что в C) выражение считается каждый раз. Но замечаю, что некоторые кадры, которые понимают в программировании гораздо больше меня, часто пишут первый вариант. Может они знают что-то, чего я не знаю? Может, допустим, компиляторы что-нибудь оптимизируют? В общем, вопрос: второй вариант действительно быстрее? Понимаю, что это зависит от языка. Пусть каждый скажет про тот язык, о котором знает. |
||||
|
|||||
| IvanB |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
По моему скромному мнению вроде-как должен быть первый.
А она (операция) и так будет выполняться. Я как-то попробовал такую вещь на VB:
В результате выдаёт 13...... Это в VB 6.0..... В других языках такого не видел. Т.е. получается, что значение переменной для сравнения в цикл передаётся один раз. Вроде так. Это сообщение отредактировал(а) IvanB - 12.5.2006, 07:50 --------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
||||
|
|||||
| Тутанхамец |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Нда, Иван, действительно...
Проверил сейчас такую штуку.
Цикл все равно выполняется много раз. Удивлен. Такое чувство, что в досовских бейсиках было иначе. Помню ведь, что, когда я exit for не знал, выходил из цикла, присваивая n заведомо меньшее значение. В паскале (Делфи) та же штука. Пишет 10 и не зацикливается.
Для С++ проверить сейчас не могу, нет среды. Но, наверное, там то же самое. Был не прав IvanB, спасибо. Мне что-то в голову не пришло, как проверить. |
||||
|
|||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
Переместил из Алгоритмов
хотя сюда она тоже не очень подходит, но, как мне кажется, всё-таки ближе, чем алгоритмы... -------------------- qqq |
|||
|
||||
| Void |
|
||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 9 Всего: 173 |
VB и Pascal разобрали. По поводу C++ скажу, что тут все зависит от оптимизатора. Если параметры цикла изменяются внутри его тела, программа обязана использовать изменившиеся значения. Оптимизатор может вынести вычисление константных выражений из тела цикла. Так, в нижеприведенном коде MSVC 8.0 выполнил вынос во всех 4-х вариантах:
А вот в C# (и вообще .NET) может произойти интересная вещь: код с ручным выносом длины индексируемого массива может оказаться медленнее! Дело в том, что JIT работает достаточно шаблонно, и может распознать такой код и убрать рантайм проверки выхода за границы массива:
Но не распознать такой:
Вывод стандартный: Premature optimization is the root of all evil -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||
|
|||||||
![]()
|
| Правила раздела "Философия программирования": | |
|
|
Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО: • вопросы перспективного развития методов написания ПО; • изменяющиеся языки и методологии программирования; Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Философия программирования | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |