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

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

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

[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:33 pm (UTC)(link)
> Во-первых, goto EndCycle;

костыль.

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

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

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

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

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

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

[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:43 pm (UTC)(link)
Арчер, ты хоть понимаешь зачем все эти высокоуровневые языковые абстракции нужны? Их, в частности, можно машинно анализировать - чего, доказанно, нельзя сделать с МТ. И ассемблером.

:)

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

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

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

[identity profile] gns-ua.livejournal.com 2011-09-07 07:53 pm (UTC)(link)
Ну, в смысле, я могу представить как гото будет самым правильным и очевидным решением - ну так и используй его!:) Я не из тех.

Но, вот, у нас в петоне нету гото. Синтаксис заставляет рефакторить, и я на это несколько раз уже натыкался. То есть в крайнем случае я зарайзю эксепшен, но пока удаётся обходиться.

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

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

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

[identity profile] ctype.livejournal.com 2011-09-07 08:04 pm (UTC)(link)
тут ударение надо ставить на другом, б-кодер скатится в спагетти даже с самыми верными концептами
а я например страдаю без множественного наследования, с++ templates и макрософ ...

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

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

[identity profile] gns-ua.livejournal.com 2011-09-07 08:08 pm (UTC)(link)
Скатится, не без того.

Б-кодер и на петоне напишет спагетти с лёгкостью - я вот случайно написал давеча, теперь уже смотрю на свой собственный код как на говно. Но мне можно, я на незнакомом языке полгода назад начал писать ;-)

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

[identity profile] tassadar-ha.livejournal.com 2011-09-07 08:34 pm (UTC)(link)
Ну, я с 9 класса всякие системы удаленного администрирования ваял на досуге, так что, это уже 10 лет назад, получается :-) Кстати, первые более-менее серьезные проги как раз на Дельфи писал, а потом уже был C и Ассемблер. И - да, согласен, в 99% можно, но в том 1% - стоит не тупо следовать догме, а разобраться в плюсах и минусах обоих путей.

А вообще, это я в поддержание твоего тезиса о том, что хорошо бы понимать, откуда и когда возникает то или иное правило или закономерность.

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

[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] v-l-a-d.livejournal.com 2011-09-07 09:19 pm (UTC)(link)
Про это еще профессор Луговский говорил!

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

[identity profile] v-l-a-d.livejournal.com 2011-09-07 10:10 pm (UTC)(link)
почему?

Page 1 of 3