gns_ua: (Default)
gns_ua ([personal profile] gns_ua) wrote2011-09-07 05:11 pm

(no subject)

то что ты сейчас пытаешься сделать (использовать ассемблер в программах на Delphi) — ошибка. Генетическая. Российская. Всей образовательной системы страны. Таких преподов надо увольнять сразу же. Если выжигать эту дурь из мозгов каленым железом не получается. Правильно им копейки платят. Они это заслужили.

http://lurkmore.ru/Pascal#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B_.D0.9F.D0.A0.D0.90.D0.92.D0.94.D0.AB_.D0.BF.D1.80.D0.BE_Delphi

А я говорил!

[identity profile] tassadar-ha.livejournal.com 2011-09-07 04:30 pm (UTC)(link)
Да, туда же воинствующие анти-goto-шники, пишущие адские флаги для выхода из цикла.

[identity profile] gns-ua.livejournal.com 2011-09-07 06:18 pm (UTC)(link)
Аццкие флаги выхода из цикла и гото - близнецы-братья.

break, continue - вот наша сила. Когда ты видишь "goto LABEL" тебе нужно сделать умственное усилие, найти эту лэйбл и осознать "ага, это выход с цикла". Когда ты видишь break (или raise) ты сразу понимаешь что происходит.

А если тебе надо брекать сразу три уровня вложенности циклов, то, наверное, тебе на самом деле надо рефакторить всё.

[identity profile] st-archer.livejournal.com 2011-09-07 07:30 pm (UTC)(link)
Во-первых, goto EndCycle;

Во-вторых, не раз и не два попадались мне связанные с математикой (да и не только) задачи, где без вложенности никак. Ну идет итерация по нескольким переменных, хоть ты тресни.

[identity profile] gns-ua.livejournal.com 2011-09-07 07:33 pm (UTC)(link)
> Во-первых, goto EndCycle;

костыль.

> Во-вторых, не раз и не два попадались мне связанные с математикой (да и не только) задачи, где без вложенности никак. Ну идет итерация по нескольким переменных, хоть ты тресни.

И там во внутреннем цикле надо брекать внешний?

[identity profile] st-archer.livejournal.com 2011-09-07 07:39 pm (UTC)(link)
Не костыль, а говорящее название ;)

Несколько раз (редко, не спорю, но таки бывало) попадалось и такое, что нужно дать всем циклам по голове. Конечно, можно throw new exception - ну так по сути тот же самый goto - в данном контексте.

[identity profile] gns-ua.livejournal.com 2011-09-07 07:43 pm (UTC)(link)
Арчер, ты хоть понимаешь зачем все эти высокоуровневые языковые абстракции нужны? Их, в частности, можно машинно анализировать - чего, доказанно, нельзя сделать с МТ. И ассемблером.

:)

Ладно. Я в субботу отмечаю тридцатник на Комсомолке, ты будешь?

(no subject)

[identity profile] st-archer.livejournal.com - 2011-09-08 10:31 (UTC) - Expand

[identity profile] v-l-a-d.livejournal.com 2011-09-07 09:14 pm (UTC)(link)
Использовать throw в качестве управляющей конструкции - моветон

[identity profile] tassadar-ha.livejournal.com 2011-09-07 07:30 pm (UTC)(link)
break и continue не помогают при выходе из нескольких вложенных циклов, и тогда начинается изврат, который компиоятор на уровне ассемблера превращает в тот-таки goto, потому что других циклов он не знает.

[identity profile] gns-ua.livejournal.com 2011-09-07 07:35 pm (UTC)(link)
Конечно внутри jmp! В haskell нет goto, но после компиляции внутри, разумеется, будут jmp.

Не о том ведь речь.

[identity profile] tassadar-ha.livejournal.com 2011-09-07 07:43 pm (UTC)(link)
Идея избегать излишних goto изначально же появилась как улучшение читаемости кода. И если читаемость страдает без goto, то почему бы его не использовать, как пример, для выхода из вложенных циклов.

[identity profile] gns-ua.livejournal.com 2011-09-07 07:47 pm (UTC)(link)
Не "читаемости", а "сопровождаемости". Разные вещи.

Мой пятнаднадцатилетний стаж говорит что без гото жить вполне можно, а вот гото увеличивает шансы построить спагетти-код и не заметить этого.

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-07 20:04 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-07 20:08 (UTC) - Expand

(no subject)

[identity profile] tassadar-ha.livejournal.com - 2011-09-07 20:34 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-07 19:53 (UTC) - Expand

(no subject)

[identity profile] st-archer.livejournal.com - 2011-09-08 10:31 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 10:52 (UTC) - Expand

(no subject)

[identity profile] v-l-a-d.livejournal.com - 2011-09-08 20:13 (UTC) - Expand

[identity profile] st-archer.livejournal.com 2011-09-08 10:33 am (UTC)(link)
Хах, посмотрел синтаксис Java для выхода из вложенных циклов - практически тот же goto, вид сзади.

[identity profile] ctype.livejournal.com 2011-09-07 07:53 pm (UTC)(link)
использование throw для выхода из циклов еще более расово неверно чем гоуту

[identity profile] gns-ua.livejournal.com 2011-09-07 08:06 pm (UTC)(link)
А джава вообше говно :)

* глядя на компоненты большого проекта, написанные на джаве/скале и обдумывая их переписывание на петоне ввиде выпиливания девелопера.

[identity profile] ctype.livejournal.com 2011-09-07 08:21 pm (UTC)(link)
java осталась мной не понята , сложилось впечатление что каждый java кодер вместо решения задачи пишет универсальное решение для всего и вся , что в результате выливается в абсрдную сложность даже простых вещей.

(no subject)

[identity profile] st-archer.livejournal.com - 2011-09-08 10:39 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 10:47 (UTC) - Expand

(no subject)

[identity profile] tassadar-ha.livejournal.com - 2011-09-08 11:37 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 11:44 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 11:45 (UTC) - Expand

(no subject)

[identity profile] tassadar-ha.livejournal.com - 2011-09-08 12:10 (UTC) - Expand

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-08 17:02 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 10:42 (UTC) - Expand

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-08 17:14 (UTC) - Expand

[identity profile] v-l-a-d.livejournal.com 2011-09-07 09:17 pm (UTC)(link)
Странно, что никто не предложил единственный расово верный способ прерывания двойного цикла - return.
Потому как если в функции вначале два вложенных цикла, а после них ещё что-то делается, то это явный признак того, что задачу надо декомпозировать.

[identity profile] v-l-a-d.livejournal.com 2011-09-07 09:17 pm (UTC)(link)
Под "декомпозировать" я в данном случае подразумеваю "бить на более мелкие функции", если что

[identity profile] st-archer.livejournal.com 2011-09-08 10:34 am (UTC)(link)
Кстати, педивикия нам намекает:

Другие варианты решения этой проблемы — помещение вложенных циклов в отдельную процедуру и использование команды досрочного выхода из процедуры, а в языках с поддержкой исключений — генерацию исключения, обработчик которого располагается за пределами циклов. Однако подобные решения могут снижать производительность, в особенности если этот участок кода вызывается многократно (поскольку и вызовы процедур, и операторы работы с исключениями транслируются далеко не в одну машинную инструкцию).

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 10:46 (UTC) - Expand

(no subject)

[identity profile] v-l-a-d.livejournal.com - 2011-09-08 13:18 (UTC) - Expand

(no subject)

[identity profile] st-archer.livejournal.com - 2011-09-08 13:22 (UTC) - Expand

[identity profile] ctype.livejournal.com 2011-09-07 09:54 pm (UTC)(link)
использование нескольких returnов в одной функции - еще более расово неверно, чем goto

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-08 16:03 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 16:04 (UTC) - Expand

(no subject)

[identity profile] st-archer.livejournal.com - 2011-09-08 16:34 (UTC) - Expand

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-08 17:16 (UTC) - Expand

(no subject)

[identity profile] st-archer.livejournal.com - 2011-09-08 17:18 (UTC) - Expand

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-08 17:25 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 17:37 (UTC) - Expand

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-08 17:55 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 18:00 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 18:04 (UTC) - Expand

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-08 18:40 (UTC) - Expand

(no subject)

[identity profile] v-l-a-d.livejournal.com - 2011-09-08 20:15 (UTC) - Expand

(no subject)

[identity profile] st-archer.livejournal.com - 2011-09-08 17:54 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 17:30 (UTC) - Expand

(no subject)

[identity profile] st-archer.livejournal.com - 2011-09-08 17:54 (UTC) - Expand

(no subject)

[identity profile] ctype.livejournal.com - 2011-09-08 16:05 (UTC) - Expand

(no subject)

[identity profile] gns-ua.livejournal.com - 2011-09-08 16:06 (UTC) - Expand

[identity profile] st-archer.livejournal.com 2011-09-08 10:29 am (UTC)(link)
Кстати, тоже подумал об этом, но есть один недостаток - в случае, если нужно выйти не из всех циклов сразу. муша в таком случае использование ретурнов рискует вылиться в написание кучи процедур. Или к рекурсиям. Или к косвенным рекурсиям.

[identity profile] gns-ua.livejournal.com 2011-09-08 10:50 am (UTC)(link)
> Или к рекурсиям. Или к косвенным рекурсиям.

Дорогой двачик, есть одна scheme....

SICP читал?:)

[identity profile] gns-ua.livejournal.com 2011-09-07 06:22 pm (UTC)(link)
break, continue, да и само-райзеные эксепшены в некотором смысле синтаксический сахар над гото или аццкими условиями. Но и объектно-классовые штуки на уровне языка, это тоже синтактик шугэр, потому что прочитав SICP мы знаем из чего они сделаны и можем их сделать "вручную" :)

[identity profile] ctype.livejournal.com 2011-09-07 07:54 pm (UTC)(link)
longjmp наше всьо