Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.154.208] |
|
Страницы: (12) « Первая ... 7 8 [9] 10 11 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#121
,
|
|
|
Qraizer, то что ты описываешь никак не может объяснять нафига юзать goto в коде. По вашим словам получается что в последний раз они код писали в в 98 году что ли? Свежий код, старый, любой код майкрософта пестрит goto.
Добавлено Ну у тебя там вызов трех функций в if выражении получился, что действительно в твоем примере смахивает на говно. А у меня сначало все это присваивается указателем. По твоему ты не будешь if пихать на проверку не нулевого указателя или что? Так что либо получается необоснованное с твоей стороны "говно", либо ты что то не договариваешь. Ну так я проверил. Метка не подсвечивается в синтаксисе языка. Переход - разве что по F12, но он работает вообще практически на любой конструкции языка, это не для меток сделано. Больше я ничего не нашел Цитата OpenGL @ Прыгать? Киля, в этой ветке дискуссии речь ведётся о функциях, влезающих в один экран, в которых прыгать никуда не надо априори, и которые с goto тоже бывают более читабельные. Ты специально только делаешь вид, что ведёшь себя глупо, или это результат настоящего и всамделишного полёта мысли? В этой ветке дискуссии вы приводите либо выдуманные функции, которые занимают 5 строчек кода, и где можно легко обойтись и без goto, либо ссылки на код функций по 150 строчек кода. Цитата OpenGL @ О, надо же. Ты прямым текстом признался, что не читатель. Уважуха! Не каждый может признать за собой недостатки Где? Ну вот где я признался что я не читатель? Хорошо, если ты согласен что писать goto в С++ оцтой, почему ты тогда пытаешься оправдать код на С++ с использованием goto ? напиши тогда - Да, в С++ вот тут говнецо. А если бы код был бы Сишный, тогда возможно и норм. Тогда к тебе лично вопросы отпадут. Но вы сначало пишите что в С++ никто никогда в проде goto не использовал, мол де есть же RAII, а потом пишите - ну и что тут такого, обычная практика. Да где же это обычная практика, если даже K&R в бородатых 80-х писали что нифига это не нормально даже для Си, ну кроме некоторых случаях. Не для С++, а для Си!!! А вы мне втираете - что это чуть ли не единственный способ решить задачу очистки ресурсов. Добавлено Короче ладно. Хватит переливать из пустого в порожнее. Я по прежнему остался при своем. goto используют люди из за ограниченности мышления, либо из за лени ну и в качестве костылей. Больше ему нет нигде нормального применения. Если будете возражать, попробуйте придумать задачу, нормальную, не костыль вставить, а обычную такую задачу, где без него не обойтись. Тогда будем говорить. а так реально уже задолбало. выходит разговор глухого со слепым. |
Сообщ.
#122
,
|
|
|
Цитата KILLER @ Больше ему нет нигде нормального применения. А как же явный оверхед при замене функционала? Или ты что, реально решил померятmся таймерами штоле? |
Сообщ.
#123
,
|
|
|
Цитата KILLER @ Ну у тебя там вызов трех функций в if выражении получился, что действительно в твоем примере смахивает на говно. А у меня сначало все это присваивается указателем. По твоему ты не будешь if пихать на проверку не нулевого указателя или что? Так что либо получается необоснованное с твоей стороны "говно", либо ты что то не договариваешь. А, то есть ты даже не видишь, что, вставив проверки в твой код, ты получишь ровно то, что написано у меня? Цитата KILLER @ Метка не подсвечивается в синтаксисе языка. Логично - по дефолту она того же цвета, что и остальной текст. Но ты в настройках волен поменять цвет хоть на серобуромалиновый Цитата KILLER @ Переход - разве что по F12, но он работает вообще практически на любой конструкции языка, это не для меток сделано И что? Цитата KILLER @ В этой ветке дискуссии вы приводите либо выдуманные функции, которые занимают 5 строчек кода, и где можно легко обойтись и без goto, либо ссылки на код функций по 150 строчек кода. Невнушабельно. Давай для пущей убедительности функции в 1 строку с одной стороны, и 424242 строки - с другой Цитата KILLER @ Да где же это обычная практика, если даже K&R в бородатых 80-х писали что нифига это не нормально даже для Си, ну кроме некоторых случаях. И это притом, что в книге есть цитата наподобие "впрочем, покажем примеры, где goto может быть в тему"? Цитата KILLER @ Я по прежнему остался при своем. goto используют люди из за ограниченности мышления, либо из за лени ну и в качестве костылей. Ну в этом, полагаю, никто тут не сомневается - что факты не способы поколебать твою упёртость истина достаточно очевидная |
Сообщ.
#124
,
|
|
|
Цитата KILLER @ Qraizer, то что ты описываешь никак не может объяснять нафига юзать goto в коде. По вашим словам получается что в последний раз они код писали в в 98 году что ли? Свежий код, старый, любой код майкрософта пестрит goto. Нет. Просто не меняют однажды вымученное из-за ограничений, но работающее. А что, надо сразу же броситься тут же отперерефактнить всё нахрен? Платишь? Знаешь ли, когда половина проекта в одной парадигме, другая в другой – это тоже говнокод. Так что ежели чё там новое добавляется, хотя, насколько мне известно, MS давно положила болт на развитие MFCей с ATLями, так уж пусть будет лучше в едином стиле. Добавлено Цитата KILLER @ Ну я фактически именно это и сделал. Запостил код на C, и попозже два его аналога на C++. напиши тогда - Да, в С++ вот тут говнецо. А если бы код был бы Сишный, тогда возможно и норм. Добавлено Цитата KILLER @ Почему единственный-то? Наглядный, простой и быстрый. Другие "вычеркните что-нибудь одно и приходите к нам" ©. А вы мне втираете - что это чуть ли не единственный способ решить задачу очистки ресурсов. Добавлено Цитата KILLER @ Он находит применение в неструктурных алгоритмах. Представь себе блоксхему с входом/выходом в/из середины. Не встречал? Ну что сказать, бывает... Больше ему нет нигде нормального применения. |
Сообщ.
#125
,
|
|
|
Цитата OpenGL @ А, то есть ты даже не видишь, что, вставив проверки в твой код, ты получишь ровно то, что написано у меня? У тебя проверяется результат функции, а в моем случае будет проверка указателей. Ну конечно, одно и то же. ты небось еще и в циклах пишешь нечто подобное? for(SomeIteratorObject ItObj = GetBegin(); ItObj != GetHeavyEnd(); ++ItObj) ? Если ты подразумевал конкретно указатели - обоснуй в чем заключается говно при таком подходе, который предложил ты и продублировал по твоему я? нонче не модно указатели проверять ноль? Или может быть модно пихать везде и всюду goto? Вот я не понимаю реально - ты кричишь, я не предлагаю использовать goto везде, но иногда его можно применить. При этом ты приводишь код, который может легко обойтись без всяких goto, и будет восприниматься легче, чем аналог с goto. Может для тебя на данном этапе спора goto читабельнее остальных конструкций? Добавлено Цитата OpenGL @ Логично - по дефолту она того же цвета, что и остальной текст. Но ты в настройках волен поменять цвет хоть на серобуромалиновый Цвет чего? У меня цвет поменяет только метка? Или остальные идентификаторы тоже? Добавлено Цитата Qraizer @ Знаешь ли, когда половина проекта в одной парадигме, другая в другой – это тоже говнокод. Ну как не крути у них и так говнокод и так говнокод, потому что у них есть примеры без goto. Значит они нарушают свою парадигму с goto. Выходит ведь так? Добавлено Цитата Qraizer @ Он находит применение в неструктурных алгоритмах. Представь себе блоксхему с входом/выходом в/из середины. Не встречал? Ну что сказать, бывает... Вообще то я речь завел не о блоксхемах и не о микроконтроллерах каких нибудь. Речь шла про код майкрософта. goto говнокодом был что в 80-х, что сегодня. Но ваше право отмазывать майкрософт за их говнокод. |
Сообщ.
#126
,
|
|
|
KILLER, ты или бесконечно наивен, или так же бесконечно идеалист Ну не бывает так, что б в коммерческой компании, не страдающей долей альтруизма, взяли и начали переписывать то, что работает и проверено временем, просто потому, что стандарт поменялся, парадигмы появились и так далее по списку. С формальной точки зрения ты, конечно, прав. Ковырял как-то утёкший код Win2k, местами я ещё в свои первые годы писал лучше, чем то, что было там. Но то, что было там, оно работало. И, скорее всего, работает до сих пор где-то в оставшихся системных утилитах, вроде той же очистки диска. Так зачем это трогать? Что в итоге выиграет корпорация?
|
Сообщ.
#127
,
|
|
|
Цитата B.V. @ Ну не бывает так, что б в коммерческой компании, не страдающей долей альтруизма, взяли и начали переписывать то, что работает и проверено временем, просто потому, что стандарт поменялся, парадигмы появились и так далее по списку. Я это очень прекрасно понимаю. И так уж и быть не буду с этим спорить. Пусть будет так. На рефакторинг нужны человекочасы, это определенные трудозатраты и так далее. Но! Но ведь от этого код то лучше не станет? Ведь верно? Если что это риторический вопрос касательно тебя, потому как в следующем предложении ты на него ответил, и я с тобой соглашусь: Цитата B.V. @ С формальной точки зрения ты, конечно, прав. Добавлено Цитата B.V. @ Так зачем это трогать? Что в итоге выиграет корпорация? Да мне то, по большому счету вообще пофигу какой у них там код, пусть хоть все на goto перепишут. Я не работаю в майкрософт, и не занимаюсь рефакторингом или поддержкой их кода. Я юзаю их функции/классы/библиотеки, работает, да и ладно. Просто спор был конкретно об неком коне в вакууме. Лично я считаю что их код местами лютый говнокод. Это лично мое мнение. Есть у них и очень навороченный код, до которого я даже не дорос еще. Вот по сути и все. Просто меня начали убеждать, на сколько я понял - поменять свое мнение о их коде, который я считаю говнокодом. Добавлено Цитата OpenGL @ И это притом, что в книге есть цитата наподобие "впрочем, покажем примеры, где goto может быть в тему"? Во многих книгах, очень известных авторов так же можно найти описание применения какого нибудь говнокода, с оговоркой "впрочем кое где этим можно кое что заткнуть". Например у того же Рихтера есть такие примеры. Добавлено Цитата Qraizer @ Почему единственный-то? Наглядный, простой и быстрый. Другие "вычеркните что-нибудь одно и приходите к нам" ©. Ну извиняй, не так сформулировал, я имел ввиду "А вы мне втираете - что это чуть ли не единственный рассово верный способ решить задачу очистки ресурсов." Посмотри код что привел OpenGL, я не знаю задачу целиком, но его псевдокод - можно легко переписать без goto. И тем не менее, в начале дискуссии он в принципе соглашался с моей позицией. А сейчас кричит, что любой другой вариант - говно нечитабельное, а с goto - ну просто супер пупер код. Я сейчас конкретно не тебя обвиняю Qraizer. Я сейчас просто показываю уровень аргументации. И ты писал, что в проде не припомнишь чтоб goto юзал. Думаю на Си ты писал побольше чем мы с OpenGL вместе взятые умножить на 10. И тем не менее - я не совсем пониманию твою позицию. То ли ты goto пытаешься отмазать, то ли код майкрософта. При этом из всех споров про goto, я так понял что ты бы его юзнул, в исключительной ситуации. А не как правило. Так я думаю это абсолюнто всех касается, и меня в том числе. Но приведенные примеры - не являются исключительными ситуациями имхо. Вот взять хотя бы твой код, который вчера я переписывал без goto. Сколько у автора улетело времени на его написание? И почему он сделал именно вот так, а не по другому? Ведь там функция довольно сложная вышла, даже без goto, ее по хорошему нужно было смело бить на три. RestoreStateFromFile, SaveStateFromFile, ну и собственно алгоритм счетчиками. Почему он так не сделал? Мне лично не понятно. Более того, там не goto ломает читабельность, а вырвиглазные reinterpret_cast<char*>(trololo) Добавлено Цитата JoeUser @ А как же явный оверхед при замене функционала? Или ты что, реально решил померятmся таймерами штоле? Какой оверхед еще? 3 процессорные инструкции оверхед или что? |
Сообщ.
#128
,
|
|
|
Цитата KILLER @ У тебя проверяется результат функции, а в моем случае будет проверка указателей. Киля, ты не разглагольствуй, а покажи кодом эти все проверки. Вот вернула build1 ошибку (да пусть даже упростим и предположим, что она только один указатель возвращает, хотя это не так), а значит требуемые для последующих этапов данные не готовы. Надо освободить то, что уже насоздавалось. Твои действия? Цитата KILLER @ Если ты подразумевал конкретно указатели - обоснуй в чем заключается говно при таком подходе, который предложил ты и продублировал по твоему я? Потому что все эти построения делаются в рамках одного единого и неделимого алгоритма, смысл каждой части которого существует только в контексте остальных частей. К тому же алгоритма не особо-то и большого (данная функция занимает всего-то чуть больше 100 строк) и не особо сложного, учитывая, что коллега вот буквально сегодня без моей подсказки быстро внёс в него необходимые изменения, и, я уверен, внёс бы, если бы писалось всё на си с goto. И смысл тогда разбивать алгоритм на функции с кучей параметров, если это только затруднит последующий анализ и займёт больше места, не дав взамен ничего, кроме отсутствия предмета твоей религиозной ненависти? Цитата KILLER @ Цвет чего? У меня цвет поменяет только метка? Или остальные идентификаторы тоже? Зайди уже в настройки студии, а Как минимум 2015 и выше - настройка цвета меток есть. |
Сообщ.
#129
,
|
|
|
Цитата OpenGL @ Вот вернула build1 ошибку (да пусть даже упростим и предположим, что она только один указатель возвращает, хотя это не так), а значит требуемые для последующих этапов данные не готовы. То ты меня высмеиваешь за то, что я написал то же самое. То задаешь какие то глупые вопросы относительно моего кода. Я ж тебе по функциям расписал. внутри каждой функции есть свой клинап(под ним можешь подразумевать как раз обработку ошибки, произошедшую внутри конкретного конструктора структуры). Если что то не получилось - тебе функция вернет нулевой указатель. Ну а дальше я просто не стал писать if, который ты за меня написал в своем дополнении к своему коду. Цитата OpenGL @ Потому что все эти построения делаются в рамках одного единого и неделимого алгоритма, смысл каждой части которого существует только в контексте остальных частей. А что значит неделимый алгоритм? Псевдокод ты написал как раз таки делимый. Цитата OpenGL @ И смысл тогда разбивать алгоритм на функции с кучей параметров, если это только затруднит последующий анализ и займёт больше места, не дав взамен ничего, кроме отсутствия предмета твоей религиозной ненависти? Ну то что ты привел псевдокодом - бьеться легко на функции. Я же не виноват, что ты не можешь выразить суть задачи псевдокодом. Более того, то что ты привел - я не вижу там смысла писать goto даже на Си. Ну вот не вижу в упор. Понимаешь, goto можно влепить куда угодно. И обосновать это твоими словами. Так спорить сложно. Я ожидал, что ты приведешь нечто, что поставит меня в тупик, и вынудит с тобой согласится. А на деле выходит так, что ты приводишь то, что легко переписывается и без goto, но делаешь упор на то, что если бы ты писал на Си, то написал бы обязательно goto(как будто без него пиндец как больно было бы), и твой код все бы поняли. Я уверен что можно что угодно переписать на goto - и это даже будет понятно. Но зачем писать с goto, если можно написать и без goto? Вот в чем вопрос. Цитата OpenGL @ Зайди уже в настройки студии, а Как минимум 2015 и выше - настройка цвета меток есть. Хз, я не нашел Да и раньше я писал, что все не ограничивается одной только MSVS. Добавлено По поводу настроек студии, ты можешь не заморачиваться. Я особо и не искал. Ну если есть такая возможность, покрасить отдельно метку в студии - ну есть так есть. Мне в принципе хватает того, что по умолчанию она не покрашена. Дело в том, что в настройки студии я не особо лазаю, так как не ограничен одной только студией. А вот переход по меткам - было бы интересно услышать как настроить. Может когда пригодится. Я нашел только go to definition, но оно работает в одну сторону, и предназначено не для скакания по меткам. |
Сообщ.
#130
,
|
|
|
Цитата KILLER @ Я ж тебе по функциям расписал. внутри каждой функции есть свой клинап(под ним можешь подразумевать как раз обработку ошибки, произошедшую внутри конкретного конструктора структуры) Нет у функций никакого cleanup - всё, что было создано на предыдущих этапах (включая часть вспомогательных данных, нужных только для построения, т.е. результат работы первого цикла - не один, грубо говоря, массив, а несколько) нужно и на последующих, поэтому единственное место, где всё удаляется - главный cleanup. Или всё гораздо (нет, ГОРАЗДО) хуже, и ты предлагаешь удалять, например, результаты успешного build1 при неуспехе build2 - в cleanup секции в build2, а также в build3 в случае его неуспеха, куда мы придём в случае успеха build2, и ещё дополнительно - в главной секции cleanup, куда мы придём в случае успеха вообще всего? Цитата KILLER @ Ну то что ты привел псевдокодом - бьеться легко на функции. Разумеется, бъётся. Только толку-то? |
Сообщ.
#131
,
|
|
|
Цитата KILLER @ Можно на метках закладки сразу ставить (Ctrl+K/K), дабы опосля по ним F2 шлёпать. А вот переход по меткам - было бы интересно услышать как настроить. Может когда пригодится. |
Сообщ.
#132
,
|
|
|
Цитата Славян @ Можно на метках закладки сразу ставить (Ctrl+K/K), дабы опосля по ним F2 шлёпать. Славян, про закладки я знаю, иногда даже активно использую, если код запутанный. И раньше писал, что мне видится разве что только закладками метки помечать, чтоб по ним прыгать. Но - это ведь их нужно для начала расставить. А это уже потеря времени, ради понимания происходящего. Добавлено Цитата OpenGL @ Нет у функций никакого cleanup - всё, что было создано на предыдущих этапах (включая часть вспомогательных данных, нужных только для построения, т.е. результат работы первого цикла - не один, грубо говоря, массив, а несколько) нужно и на последующих, поэтому единственное место, где всё удаляется - главный cleanup. Или всё гораздо (нет, ГОРАЗДО) хуже, и ты предлагаешь удалять, например, результаты успешного build1 при неуспехе build2 - в cleanup секции в build2, а также в build3 в случае его неуспеха, куда мы придём в случае успеха build2, и ещё дополнительно - в главной секции cleanup, куда мы придём в случае успеха вообще всего? Мне сложно парировать не зная сути задачи. Извини, но все тузы в данном случае у тебя на руках, а я играю в слепую. Я так не могу спорить. |
Сообщ.
#133
,
|
|
|
Цитата KILLER @ И ничего не поменялось. Простой, быстрый, понятный, но уж точно не единственный. KILLER, просто присмотрись: это ровно тот же самый __finally с __leave, только сделан руками, потому что язык встроенных средств не имеет, а компилятор подходящих расширений языка.Ну извиняй, не так сформулировал, я имел ввиду "А вы мне втираете - что это чуть ли не единственный рассово верный способ решить задачу очистки ресурсов." Цитата KILLER @ Ну да. Я знаю средства, предоставляемые мне языком, понимаю их достоинства и недостатки, знаю "правила хорошего тона", и не имею предрассудков в аккумуляции всего при принятии решений. Если я увижу, что goto конкретно вот тут не проявляет своих отрицательных сторон, но в сравнении с другими средствами проявляет положительные, заюзаю и не поморщусь. И это справедливо для любых других средств, той же рекурсии, например. Или не дай бог switch(). Ну и если некий код вызывает вопросы типа "нахрена так", то это не означает автоматически, что он плохой. Возможно, были причины написать именно так, которых мы не знаем. Другое дело, чтобы из-за этого "нахрена" коду плохо не стало. Вот на это надо смотреть. Ну так и не стало же. Сколько ссылок ты не давал, столько раз я и приходил к выводу, что мол, да, странно, но вот так тоже нормально, плохих последствий не имеет.И ты писал, что в проде не припомнишь чтоб goto юзал. ... То ли ты goto пытаешься отмазать, то ли код майкрософта. При этом из всех споров про goto, я так понял что ты бы его юзнул, в исключительной ситуации. А не как правило. Кстати вот, а почему у тебя switch() не вызывает отторжения? Это же самая что ни на есть неструктурная конструкция, похлеще goto, я бы сказал: у того хоть метка одна, а тут куча, ветвление динамическое по результату выражения, а не статически в конкретную метку, да ещё и без контроля границ вариантов, как было бы при вложенных if()/else. И ещё кстати, на предмет вложенных if(): приемлемая глубина вложения как-то коррелирует с таковой для циклов? Вишь, сколько вопросов, на которые однозначных ответов нет и быть не может. Цитата KILLER @ Ну, автором был я. Восстанавливал код по памяти, изначально это был такой же полусинтетический пример для другого ресурса, давно почившего лет за 10 до этого. А тот в свою очередь являлся выжимкой некой вполне практической задачи, писавшейся для однозадачной DOS. Код сохранения/восстановления внедрялся в уже готовую программу, когда выяснилось, что программа будет работать слишком долго, и не факт, что всё это время комп не понадобится для более срочных задач. Почитай, более 20-и лет назад, откуда я помню-то истоки.Сколько у автора улетело времени на его написание? И почему он сделал именно вот так, а не по другому? Ведь там функция довольно сложная вышла, даже без goto, ее по хорошему нужно было смело бить на три. RestoreStateFromFile, SaveStateFromFile, ну и собственно алгоритм счетчиками. Почему он так не сделал? Цитата KILLER @ Ну, это не ко мне. Бинарный ввод/вывод у потоков диктует char*, что тут сделаешь. Более того, там не goto ломает читабельность, а вырвиглазные reinterpret_cast<char*>(trololo) |
Сообщ.
#134
,
|
|
|
Цитата Qraizer @ это ровно тот же самый __finally с __leave, только сделан руками, потому что язык встроенных средств не имеет, а компилятор подходящих расширений языка. __finally говно еще то, по крайней мере в С++. Я так понимаю - это уже из области SEH исключений? Я сталкивался с этим, и очень плотно сталкивался, и матюкался и плевался. Потому что когда ты попадаешь в этот блок - фрейм стека теряется напрочь, и ты ничего не можешь сделать, вернее можешь - но это все нужно делать вручную, чтоб сохранить фрейм стека. В Си - возможно это благо и чудо, я не буду спорить, потому как в Си я с этим не работал, но там нет и классов. А я с этой херней работал именно в С++ и с классами. Правда было это довольно давненько, лет 5 назад, а то и 8. Деталей я не помню сейчас. Но! вся эта шняга типа __finally нужна для конкретных вещей. А goto - не нужен для конкретных вещей. И если вылетит Access Violation - __finally в принципе может как то помочь, а вот goto - нет. Потому что это два разных уровня взаимодействия с программой. Я могу ошибаться конечно, может я что подзабыл или ты что то другое имел ввиду. Я не знаю. Цитата Qraizer @ Ну да. Я знаю средства, предоставляемые мне языком, понимаю их достоинства и недостатки, знаю "правила хорошего тона", и не имею предрассудков в аккумуляции всего при принятии решений. Тогда довольно странно слышать от тебя что ты goto в прод не коммитил. Цитата Qraizer @ Если я увижу, что goto конкретно вот тут не проявляет своих отрицательных сторон, но в сравнении с другими средствами проявляет положительные, заюзаю и не поморщусь. Если бы у бабушки были яйца, то она была бы дедушкой. Мне видится что это из той же оперы. Я могу тебе сказать ровно то же самое. Вот зуб даю, если я увижу, что goto конкретно вот тут не проявляет своих отрицательных сторон, но в сравнении с другими средствами проявляет положительные, заюзаю и не поморщусь, но пока у меня таких ситуаций не было. А у тебя были? Я имею ввиду не на велосипедах? И да я читать умею. Знаю что не были. Ну так тогда о чем речь ? Цитата Qraizer @ И это справедливо для любых других средств, той же рекурсии, например. Или не дай бог switch(). Конечно. Цитата Qraizer @ Ну и если некий код вызывает вопросы типа "нахрена так", то это не означает автоматически, что он плохой. Возможно, были причины написать именно так, которых мы не знаем. Другое дело, чтобы из-за этого "нахрена" коду плохо не стало. Вот на это надо смотреть. Ну так и не стало же. Сколько ссылок ты не давал, столько раз я и приходил к выводу, что мол, да, странно, но вот так тоже нормально, плохих последствий не имеет. Конечно не означает. Но ты ведь задумаешься - а можно ли избавится от этого и как? Или не будешь задумываться? Если ты не будешь задумываться - значит ты стороник goto. А если задумаешься, значит - ты такой же противник как и я. Но судя по тому что в прод ты не припомнишь чтоб goto коммитил, я могу сделать вывод, что ты либо не сталкивался с таким, либо все таки задавался вопросом - "нахрена так"? "А могу я по другому сделать?" И судя по всему - всегда получал ответ - "Да, я могу сделать по другому.". Ну разве не так получается? Цитата Qraizer @ Кстати вот, а почему у тебя switch() не вызывает отторжения? Незнаю Но скажу честно, я не припомню когда я использовал switch в последний раз. Хотя могу сказать наверняка - я точно его использовал несколько раз. Цитата Qraizer @ Ну, автором был я. Восстанавливал код по памяти, изначально это был такой же полусинтетический пример для другого ресурса, давно почившего лет за 10 до этого. А тот в свою очередь являлся выжимкой некой вполне практической задачи, писавшейся для однозадачной DOS. Код сохранения/восстановления внедрялся в уже готовую программу, когда выяснилось, что программа будет работать слишком долго, и не факт, что всё это время комп не понадобится для более срочных задач. Почитай, более 20-и лет назад, откуда я помню-то истоки. Ну если это было давно по молодости - то тогда это многое объясняет и все становится понятно, и я претензий никаких не имею. Я по молодости так же не гнушался использовать макросы вместо констант, и goto, и писал еще похуже трешаки. Я просто думал что этот код ты выдрал с прода, для демонстрации возможностей goto. Ну в принципе даже по той первой теме, из за этого кода срач вышел на десяток страниц помница. Не каждый так сможет написать. Цитата Qraizer @ Ну, это не ко мне. Бинарный ввод/вывод у потоков диктует char*, что тут сделаешь. Ну меня в основном запутало именно сохранение состояния. Я поначалу думал что оно играет какую то важную роль в алгоритме и является неотъемлемой частью цикла. Пока не вынес это в отдельную функцию. Еще очень смутили конструкции типа ok = ok && read/write file Но по началу я не придал им значения, пока не присмотрелся пристально, а что же там происходит, и нафига именно вот так. |
Сообщ.
#135
,
|
|
|
Цитата KILLER @ В таком случае, как обычно в таких случаях и советуется, причём далеко не только мной, советую изучить матчасть по SEH. Сейчас, увы, Wolfenstein II ждёт, но попозже я накатаю кратенюсенький ликбез. Пока и коротко – C++EH в MS-ных компилерах по WinAPI основан как раз на SEH, так что любая твоя программа с исключениями под капотом юзает SEH на полную катушку. И даже больше: SEH нередко задействуется и при return, и при continue и break, и при longjmp(), и – да ты и так догадался – при goto. Причём я сейчас не о C++. __finally говно еще то, по крайней мере в С++. Я так понимаю - это уже из области SEH исключений? Я сталкивался с этим, и очень плотно сталкивался, и матюкался и плевался. Потому что когда ты попадаешь в этот блок - фрейм стека теряется напрочь, и ты ничего не можешь сделать, вернее можешь - но это все нужно делать вручную, чтоб сохранить фрейм стека. В Си - возможно это благо и чудо, я не буду спорить, потому как в Си я с этим не работал, но там нет и классов. А я с этой херней работал именно в С++ и с классами. Правда было это довольно давненько, лет 5 назад, а то и 8. Деталей я не помню сейчас. Но! вся эта шняга типа __finally нужна для конкретных вещей. А goto - не нужен для конкретных вещей. И если вылетит Access Violation - __finally в принципе может как то помочь, а вот goto - нет. Потому что это два разных уровня взаимодействия с программой. Добавлено Цитата KILLER @ Ну вот я которую страницу и не понимаю, объчём сыръбор.Я могу тебе сказать ровно то же самое. Цитата KILLER @ Задумаюсь. Прикину стоимость редизайна, поставлю рядом величину его профита и ...тут может случиться по-разному. Скорее всего, если код написан на GWBasic в стиле соседа Пупкина, редизайн окупится, если же ты имеешь в виду код, подобный на который ты приводил ссылки, то запросто может и не окупиться.Но ты ведь задумаешься - а можно ли избавится от этого и как? Или не будешь задумываться? Если ты не будешь задумываться - значит ты стороник goto. Я не сторонник или несторонник goto, я сторонник структурных решений и несторонник неструктурных. Современные языки предлагают полный спектр для реализации структурных решений, поэтому места для goto в программах практически не остаётся. Реалии однако таковы, что структурные решения не всегда бывают оправданными своей стоимостью реализации. Но, слава богу, весьма нечасто, и это хорошо. Для неструктурных решений многие языки предлагают только goto. Иногда ещё исключения подойдут. Глупо не пользоваться нужной фичей, когда она есть, и городить вместо это структурный костыль. Это не лучше, чем пытаться заменить множественное наследование агрегацией. Цитата KILLER @ Та какая разница. По молодости я изначально не подумал, что понадобится сохранять/восстанавливать состояние? Так я и сейчас могу об этом не подумать. Заюзал бы я сейчас в подобной ситуации goto? Когда код с ним написан за пять минут, не нуждается в отладке, прост, понятен и производителен? Обязательно. Я по молодости так же не гнушался использовать макросы вместо констант, и goto, и писал еще похуже трешаки. |