Страница 9 из 15
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 12:44:17
Лекс Айрин
vitaly_l,
википедия писал(а): Вечный двигатель первого рода — устройство, способное бесконечно совершать работу без затрат топлива или других энергетических ресурсов. Согласно закону сохранения энергии, все попытки создать такой двигатель обречены на провал. Невозможность осуществления вечного двигателя первого рода постулируется в термодинамике как первое начало термодинамики.
Вечный двигатель второго рода — машина, которая, будучи пущена в ход, превращала бы в работу всё тепло, извлекаемое из окружающих тел. Невозможность осуществления вечного двигателя второго рода постулируется в термодинамике в качестве одной из эквивалентных формулировок второго начала термодинамики.
Добавлено спустя 1 минуту 56 секунд:Хотя я встречал более мягкую формулировку для ВД 2 рода.
Добавлено спустя 2 минуты 23 секунды:vitaly_l писал(а): когда упоминают страшного и коварного: BSODa.
Настоящий программист не боится Синего Экрана... подумаешь, система склеила ласты.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 13:00:23
vitaly_l
Лекс Айрин писал(а):будучи пущена в ход, превращала бы в работу всё тепло, извлекаемое из окружающих тел.
Солнечная батарея - это и есть двигатель второго рода, особенно если разместить подальше от планеты, чтобы свет поступал постоянно. Полученную энергию, без проводов - можно передавать на полюс планеты и тогда на северном полюсе можно зажечь "вечную лампочку", для белых медведей, а то им страшно без света длинными полугодовыми ночами.
Лекс Айрин писал(а):подумаешь, система склеила ласты.
Ого... значит:
GoTo - это инструмент для настоящих программистов?!
В хокей(GoTo) - играют только настоящие программисты?!
Художники хотят освоить хокей из GoTo... Конструкции из GoTo - проще придумывать... но проверять сложнее...
.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 13:06:25
vada
Есть еще существенный недостаток GOTO. Он отражен в науке (о правильности программы). Небольшой такой раздел кибернетики.
Не буду вдаваться в теоремы и аксиомы, ибо, большинство их за 30 лет забыто, но кое-что помню:
1) Программный блок считается правильным если на вход ему поданы правильные данные и на выходе получены правильные данные.2) Из первого следует что у блока должен быть один вход и один выход (GOTO нарушает это правило).Надеюсь, что все знают про юнит тестирование кода? Так вот это тестирование служит для доказательства правильности программы.
Юнит тестирование считается завершенным если тесты прошли по ВСЕМ ветвям кода. Если это не так, то программы нельзя считать правильной.
Код с конструкцией GOTO нельзя гарантированно протестировать юнит тестами. От сюда следует что программа с GOTO не может быть правильной.
Ну это все теоретические всяческие выкладки. Практически юнит тесты не спасают от ошибок, но это ошибки уже другого рода.
Это уже ошибки в ДНК постановщиков и программистов

Если вы хотите иметь заведомо неправильную программу, пользуйтесь GOTO.
Да! Еще одну аксиому приведу:
Каждая программа имеет хотя бы одну ошибку.

Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 13:15:00
Лекс Айрин
vitaly_l писал(а):GoTo - это инструмент для настоящих программистов?!
Да нет. Настоящий программист не должен этого допускать.
vitaly_l писал(а):Художники хотят освоить хокей из GoTo... Конструкции из GoTo - проще придумывать... но проверять сложнее...
А хоккей на костылях не хотят?
Как раз проще использовать все доступные конструкции... иначе очень тяжело пробираться через забот из меток. Не знаю как Вы, а я привык думать на используемом ЯВУ.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 13:40:54
vitaly_l
vada писал(а):От сюда следует что программа с GOTO не может быть правильной.
Лекс Айрин писал(а):Настоящий программист не должен этого допускать.
Лады, 100% убедили! К моему счастью, я только в одной функции попробовал пользоваться GoTo и тут же спросил про возможные проблемы на этом холиваре.
И громадное спасибо всем, т.к. я получил исчерпывающе доказательства!
Таким образом посовещавшись, художники, кассационную жалобу программистов на действия GoTo в отношении программ рассмотрели и постановили:
1) На территории художников - оператором GoTo пользоваться отныне и навсегда запрещено, т.к. у художников отсутствуют инструменты проверки работы программ использующих GoTo.
2) Переделать функцию, в которой использован оператор GoTo.
3) Аргумент Лекс Айрин "Настоящий программист не боится Синего Экрана... подумаешь, система склеила ласты." - признать незаконным и провокационным.
Холивар Кассационной инстанции окончен. Желающие вправе похоливарить на данную тему в НаиВысшем холиваре у художников, в продолжение данного топика.
ВСЕМ БОЛЬШУЩЕЕ СПАСИБО!
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 13:48:05
Лекс Айрин
vitaly_l писал(а): Аргумент Лекс Айрин "Настоящий программист не боится Синего Экрана... подумаешь, система склеила ласты." - признать незаконным и провокационным.
согласен со вторым, но не с первым.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 13:53:25
vitaly_l
Лекс Айрин писал(а):согласен со вторым, но не с первым.
Аргумент не признан, для открытия НаиВысшего холивара в отношении операторов: GoTo и repeat until. В НаиВысшем холиваре отказано, т.к. Лекс Айрин не подготовился и не предоставил в холивар вкусные: печеньку или орешек
в виде полезной информации. А информацию про склеивание ласт - художники уже переварили и давно уже не боятся страшного и коварного BSODa.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 14:02:44
Лекс Айрин
vitaly_l, а сама информация о наличии такой возможности? Вообще, Синий экран возникает даже тогда, когда, по идее, система может переварить ошибку. Но программистам "самой любимой компании" проще аварийно завершить работу системы.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 14:08:24
vitaly_l
Лекс Айрин писал(а):система может переварить ошибку
То есть, можно отловить коварного BSODa и вырубить программу, а не систему? А как? try? Но выше говорилось что try BSODa - не остановит. Там же сбой файловой системы. Правильно?
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 14:23:29
Лекс Айрин
vitaly_lможно даже, если правильно все сделать, продолжить выполнение программы.. но только если не порушены системные структуры.
И вот как раз обработчик ошибок и должен выполнять действия не допускающие этого... ну или корректно завершить программу, если нет смысла в дальнейшем выполнении (структуры данных программы нарушены до невосстановимого состояния). К сожалению, многие программисты пользуются данным механизмом неправильно. Они просто замыкают ошибку, но не выполняют действий по исправлению ситуации.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 14:34:02
vitaly_l
Лекс Айрин писал(а):выполнять действия не допускающие этого
ну это, легко сказать, однако мудрый vada уверяет что, нет программы, в которой отсутствует хотя-бы одна ошибка.
Лекс Айрин писал(а):корректно завершить программу, если нет смысла в дальнейшем выполнении (структуры данных программы нарушены до невосстановимого состояния)
А как определить что, структура программы нарушена? Ну например, при обнаружении шибки в except: можно выйти "без сохранения"... типа halt(); чтобы не попортить рабочие установки программы (если они делаются при выходе из программы) и обрабатываемый файл. Сама же программа на диске не перепишется. С другой стороны, если программа свалит систему, а система не сможет потом себя реанимировать... вот тогда "уя" как страшно. Но я уже признал, эти аргументы. Поэтому НаиВысший холивар не могу открыть. Нужна реальная информация про GoTo и repeat until, доказывающая, что GoTo полезен, т.к. он признан запрещённым к использованию.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 15:16:37
Лекс Айрин
vitaly_l писал(а): однако мудрый vada уверяет что, нет программы, в которой отсутствует хотя-бы одна ошибка.
это не мешает предпринимать шаги по их исключению.
vitaly_l писал(а):А как определить что, структура программы нарушена?
это должен делать обработчик.
vitaly_l писал(а): можно выйти "без сохранения"... типа halt();
А кто говорит, что это "без сохранения"? Корректно написанная программа сохраняет все, что можно и восстанавливает до чего дотянется даже падая. Это тоже обработчик. И, судя по тому, что СЭС я в программе написанной на паскале еще не видел... этот механизм работает хорошо.
vitaly_l писал(а): Нужны реальные доказательства и информация про GoTo и repeat until.
Вам уже дали практически всю инфу по данному вопросу. Тем более, что именно ВЫ хотели знать о чем-то что портит аппаратуру и/или ось. Вам данная инфа предоставлена... а после этого вы говорите "Фи! Это не куртуазно!"
А насчет BSODа... просто не надо его бояться. Нужно понимать, что это нормальное явление.поймите, что рискованные шаги типа перепрыгивания из процедуры в процедуру почти закономерно приведут к ошибке... если это, например, драйвер, то и до "Высшей Справедливости" недалеко.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 15:48:21
vitaly_l
Лекс Айрин писал(а):Вам уже дали практически всю инфу по данному вопросу.
И что же, у программистов для Карлсона, не осталось, ни капельки - вкусного малинового варенья?
Лекс Айрин писал(а):Фи! Это не куртуазно! Вам уже дали практически всю инфу по данному вопросу.
Отвечу словами Карлсона:
Ну нет, это я не ем — один пирог и восемь свечей. Лучше так — восемь пирогов и одна свечка!
Какой же ты всё-таки гадкий!
Мне ничего не надо. Только, может быть, гору шоколада, какой-нибудь торт огромный, и пребольшой-большой кулёк конфет, и всё!!!…
Слушай, ты же забыл варенье! И конфеты ты же оставил!
Как же так? Ботинок есть, а ребёнка в нём нет.
Так это вы таскали мои плюшки!?
Это я шалю. Ну, то есть балуюсь...
Оспорить решение художников можно только предоставив обоснованную информацию в защиту GoTo. И баста! Он улетел, но обещал вернуться!
.
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 16:05:36
hinst
GoTo нельзя
Re: (решено) GoTo или repeat until?
Добавлено: 07.09.2015 16:10:06
скалогрыз
vitaly_l писал(а):этот ассемблер - мне более понятен
о! так ты ассемблер знаешь! тогда я тебе скажу, такую вещь.
Repeat Until более экономный чем Goto при той же реализации. И экономный repeat-until на как минимум на одну инструкцию.
Например
и
Код: Выделить всё
i:=1;
loop:
inc(i);
if i<10 then goto loop;
для repeat until ассемблер таков
Код: Выделить всё
; [5] i:=1;
mov word ptr [ebp-4],1
ALIGN 4
@@j7:
; [7] inc(i);
inc word ptr [ebp-4]
; [8] until i=10;
mov ax,word ptr [ebp-4]
cmp ax,10
je @@j9
jmp @@j7
@@j9:
; [9] end;
а для goto такой
Код: Выделить всё
; [16] i:=1;
mov word ptr [ebp-4],1
@@j14:
; [18] inc(i);
inc word ptr [ebp-4]
; [19] if i<10 then goto loop;
mov ax,word ptr [ebp-4]
cmp ax,10
jl @@j15
jmp @@j16
@@j15:
jmp @@j14
@@j16:
; [20] end;
код в целом идентичен, кроме дополнительной jmp инструкции (собственно самого goto)
Если вернёшься к самому первому примеру, с которой началась тема, то увидишь, что там происходит та же самая ситуация.
Как итоге, чем больше замен repeat...until на goto, тем больше лишних инструкций.