| 1 2 3 4 5 6 7 8 9 10 11 12 … 20 |
| Re[15]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 19:34 |
| Здравствуйте Alexander Shargin, Вы писали: AS>Однако используется же. В основном как раз для эмуляции исключений и корректного освобождения ресурсов в глобальном масштабе. Если бы код CLI забит переходами из if-а в else.
И это не еденичные случаи, а закономерность. AS> А это не семечки, такая система (написанная хорошо) не снижает, а повышает поддерживаемость/расширяемость. Вот только ответь, что надежнее использовать обертки которые в деструкторах ресурсы освобождают. Или кородить моря goto? AS>Про Linux могу сказать, что там во многих местах goto использован для повышения эффективности. В таких критичных местах, как планировщик, не станешь заморачиваться с лишними переменными/проверками/функциями, когда можно сделать то, что нужно, напрямик и без потерь. Во блин! Эффективность на goto! Линукс это давно тормозная и разжиревшая ОС ни чем не отличающаяся от NT. А современные оптимизирующие компиляторы к котрым смело можно причислить VC (которым пользуется MS) и gcc (которым пользуются Линуксойды) оптимизируют в ноль весь оверхэд создаваемый ОО-обертками и лишние if уберают. От ваших вложеных циклов зачастую вообще кмня на камне не остается. S>>А насчет ATL — я ж говорю, там в основном либо C, либо легаси код, перенесенный из того же С, который просто обломались переписать. Либо все-таки bad habits/недоделанность. AS>Скорее не из C, а из "старого C++", который мало что умел и поддерживал. Он деструкторы поддерживал. А этого более чем достаточно для очиски ресурсов. AS>Тем не менее, и у MS есть разные ситуации. Так, в MFC goto зачастую используется для выхода из вложенных циклов, которые бегают по картам сообщений (CWnd::OnWndMsg, CWinThread::DispatchThreadMessageEx и т. д.). Вот по этму мне всегда больше нравились карты сообщений ATL. Они и более гибки и goto нам нет. |
| Re[10]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 20:11 |
| Здравствуйте DNS, Вы писали: DNS>
VD>>Да в твоем случае дейсвтительно лишние извраты. DNS>Сижу, читаю нитку... DNS>Влад, что-то вы уже перемудрили, как раз эти 2 for-а и норовят запутать читающего, т.к. DNS>не являются стандартным подходом к организации циклов. В первом отсутствует модификация, DNS>во втором инициализация.... DNS>Не думаю, что я бы воспользовался подобной идей для облегчения чтения кода. Если учесь то, что в первом случае for переносился на три строки. То этот точно читабельнее. Главное, что здесь логика структурная и ее на автомате даже анять мтожно. Ну, а для общегчения чтения кода нужно, например, вместо копирования указателей поспользоваться итераторами. Тода было бы нечто вроде: for(SomeList::Iter i(arySome); i;) { if(SomeError) { CorrectError(); i.Reset(); continue; } ... } И все, и никаких вложенных циклов. |
| Re[9]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 20:19 |
| Здравствуйте Patalog, Вы писали: P>Ну, представь себе такую ситуацию. P>Есть некий прибор, управляется ета хрень какой-нибудь двушкой в железном ящичке под голым досом. Энтих приборчиков энное количество по всему миру (например в Нижнезадрюпенской области, городе Мухосраннске). P>Maintenance с точки зрения новых красивых фенечек ненужен\невозможен по двум причинам — как ты представляешь обновление софта в этой ситуации? И, второе, железо (приборчик) рабоает на пределе, и новых фенечек из него не высосешь. Да и не нужны они, себестоимость тоже нужно учитывать. Ну, а как ошибочка в тоем замечательном монолите? А ты ркутой goto-шник на goto-зил и свалил в другую контору. Что делать тем беднягам которым приказано исправить ошибку и выложить в Inet патч? |
| Re[13]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 20:22 | ||
| Оценка: | -1 | ||
| Здравствуйте Patalog, Вы писали: P>"девушку в железном ящичке" это как "сферическая операционная система в вакууме". Я говорил именно о том, что есть случаи, каторые общим мерилом не изменишь. Те же самые умные дяденьки етот момент обычно отмечают. Иначе они не были бы умными дяденьками. Не, все проще... Бывает когда и халява проктывает. |
| Re[15]: Выйти из двух циклов сразу | |
| От: | IT админ | ||
| Дата: | 04.06.02 20:34 |
| Здравствуйте Alexander Shargin, Вы писали: AS>А пока — согласен — давай сосредоточимся на C++. Для начала обратимся к теме, которая стоит в сабже. В первом письме я подробно остановился именно на ней. Итак, каким образом поставленная задача решается на C++ лучше, чем с использованием goto? Это зависит. Я бы хотел видеть код всей процедуры, а не выжимку, которую предоставил LeonGorbachev. Здесь уже давали советы. Я, в зависимости от ситуации, воспользовался бы следующим: 1. Флаг в первом цикле 2. Проверка счётчика второго цикла на завершённость 3. return 4. inline процедура (очень специфический вариант, но возможный) Скорее всего я бы не задумываясь воспользовался первым вариантом, т.к. у меня это уже в моих личных паттернах, под коркой мозжечка :), но goto я бы использовать не стал. 2-й вариант я бы вряд ли стал использовать сейчас, хотя рашьше мог. Во-первых, нужно счётчик выносить из for, во-вторых, это затрудняет понимание программы. IT>>Ну вот опять. Плохо уже то, что он вообще эти проблемы пораждает. AS>Проблемы может порождать всё, что угодно. То же ООП — пачками. Я насмотрелся на пограммы, которые люди пишут в рамках концепции doc/view, которую предлагает MFC. Ей богу, уж лучше бы они свалили весь код в один класс. Именно поэтому в нашей профессии кадры решают почти всё. Эта глобальная проблема, которую не обойти запретами каких-то языковых средств. Просто если человек ламер, он повиснет на проекте тяжёлой гирей, а если нет — будет тянуть его вверх. И твои запреты вряд ли смогут сильно изменить ситуацию. Всё это несомненно и правильно, но goto только усугубит дело. Возможно, просто получилось так, что ты видел много хорошего, старого, добротного кода с использованием goto и много плохого, "современного" и, который долго не проживёт, так как вообще не имеет право на жизнь, с doc/view. Мне приходилось видеть первый, но с качеством второго. Люди сползали с EC-ок, с PL/1 и Фортрана и начинали писать на процедурных языках. :wow: Поверь мне, doc/view, который ты видел — это детский сад по сравнению с теми уродцами, которые выходили из под пера тех программеров. Так же по старинке они печатали свои километровые процедуры, раскладывали их на полу и бродили по ним в поисках меток, которые имеют тенденцию со временем отдаляться от мест их прямого использования. Никакие уговоры не помогали. И мой шеф, мудрый человек, принял решение предать goto анафеме, запретить под угрозой лешения премии. Подействовало. И ты знаешь что самое прикольное? Размер процедур стал уменьшаться, появились элементы декомпозиции, в распечатках необходимость отпала и всё такое. AS>>>Я и сам могу. Вопрос, будет ли твой вариант более читабельным. Думаю, что совсем не обязательно. IT>>Естественно, цепочки if'ов тоже не лучший пример читабельности, но они вполне нормально заменяют технику, показанную тобой. AS>Я скажу больше: они хуже, так как затрудняют и понимание, и расширяемость. Ты сам заметил, что метод с goto сильно напоминает эмуляцию деструкторов, которые и являются наилучшим решением данной задачи. Если в функцию добавляется ещё один ресурс, при моём подходе достаточно: AS>- добавить его в секцию переменных AS>- добавить код очистки в конец AS>- работать с ресурсом как ни в чём не бывало. AS>Логика же вложенных if-ов при таком добавлении может полностью измениться. Вот это-то как раз и плохо. Мои аргументы. — я никогда не перепутаю порядок освобождения ресурсов, если он важен, — я могу работать с ресурсами локально, в определённой точке программы и не держать их долго без надобности, особенно при наличии длинных циклов, — я могу использовать их в тех же циклах, открывая и закрывая их при каждой итерации, — я могу использовать return более гибко, в том числе и для сабжа, что в твоём случае невозможно, т.к. программа обязательно должно доползти до конца... хотя ты можешь, конечно, использовать ещё один goto ;) If nobody helps us, then we, too, will show no mercy. |
| Re[22]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 21:19 |
| Здравствуйте George_Seryakov, Вы писали: VD>>Мне до их прдах дела нет. Думаю визио продается куда лучше, что же теперь мне продукты по рейтингу продаж выбирать? GS>Да. Поглядывать. Соберут они денег на сделать следующую версию или нет. Вот Микрософь собрал денег на сделать NT, а IBM слил воду. Знаешь. В те времена MS еще не было таким страшным. GS>Продукт будет развиваться в расчете на текущих пользователей, а они — игруны, не проектировщики. Тогда буду ждать пока их Роза разовьется до такого уровня, чтобы я смог ею пользоваться. VD>>Там ного чего есть. Там например есть нечто очень похожее на дизайнер тех самые конечных автоматов (забыл как называется). GS>Диаграмма взаимодействий. Которая на самом деле SDT и диаграмма Хоара одновременно. Ну, так вот кривая она. У того маньяка со свичь-технологиями и то идейно все более продуманно. Для меня Роза — это как BPWin, рисовашка одно слово. GS>Ну. Так главное — проектировать, а генерировать можно и врукопашную. И проектировать можно врукопашную. Мне вот кодеров не хватает. GS>А вот сейчас тебе и скажут, что ты, значит, и не проектируешь. Да мне по барабану, кто что скажет. Я знаю чем я занимаюсь и знаю, что пока не видел приемлемого (для меня) продукта позволяющего ускорить процесс. |
| Re[23]: Выйти из двух циклов сразу | |
| От: | George_Seryakov | ||
| Дата: | 04.06.02 21:28 |
| Здравствуйте VladD2, Вы писали: GS>>Да. Поглядывать. Соберут они денег на сделать следующую версию или нет. Вот Микрософь собрал денег на сделать NT, а IBM слил воду. VD>Знаешь. В те времена MS еще не было таким страшным. Кул. А ворд микрософтовский под дос? VD>Но я тогда 95-ые как раз принял не из-за денег. Я, вобще-то про 3.1 говорил. VD>Они тогда действительно больше подходили к обстановке. И сделаны были лучше (хоть и архитектурно проигрывали), т.е. куча драйверов, отличная совместимость с 3.1-ми. Сделано на бабки от 3.1. И получены бабки на NT. Ну, или не бабки, а крелит доверия опльзователей, или доля рынка. VD>Ну, так вот кривая она. У того маньяка со свичь-технологиями и то идейно все более продуманно. Для меня Роза — это как BPWin, рисовашка одно слово. Именно так, рисовашка, поддерживающая целостность некоей нотации. А ты что хотел — автоматическую кодогенерацию? Это только через goto работает. GS |
| Re[24]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 21:38 |
| Здравствуйте George_Seryakov, Вы писали: GS>Кул. А ворд микрософтовский под дос? А что ворд. Для него в те годы даже Лексикон и том конкурентом был. VD>>Но я тогда 95-ые как раз принял не из-за денег. GS>Я, вобще-то про 3.1 говорил. Дык полуось все же с 95-ми боролась. 3.1 в нее встроены были. Это же их общий продукт был. GS>Сделано на бабки от 3.1. И получены бабки на NT. Ну, или не бабки, а крелит доверия опльзователей, или доля рынка. Если бы все это глюкало меньше, я бы скзал, ну и замечательно. GS>Именно так, рисовашка, поддерживающая целостность некоей нотации. А ты что хотел — автоматическую кодогенерацию? Это только через goto работает. Ну, зачем же так? Я бы хотел занчительно более простую вещь. Визуальный моделлер который выдавалбы в реальном времени котовые программы. И лучше бы вообще без программирования. |
| Re[25]: Выйти из двух циклов сразу | |
| От: | George_Seryakov | ||
| Дата: | 04.06.02 21:44 |
| Здравствуйте VladD2, Вы писали: GS>>Сделано на бабки от 3.1. И получены бабки на NT. Ну, или не бабки, а кредит доверия пользователей, или доля рынка. VD>Если бы все это глюкало меньше, я бы скзал, ну и замечательно. Пипл хавает. Нет, даже так: ПИПЛ ХАВАЕТ! Уж ты-то должен это понимать. GS>>Именно так, рисовашка, поддерживающая целостность некоей нотации. А ты что хотел — автоматическую кодогенерацию? Это только через goto работает. VD>Ну, зачем же так? VD>Я бы хотел занчительно более простую вещь. Визуальный моделлер который выдавалбы в реальном времени котовые программы. И лучше бы вообще без программирования. Тогда жди. GS |
| Re[15]: Выйти из двух циклов сразу | |
| От: | DarkGray | ||
| Дата: | 04.06.02 21:49 | ||
| Оценка: | 17 (2) | ||
| Здравствуйте Alexander Shargin, Вы писали: AS>>>Не очень понятно, к чему всё это. Можно конкретный пример? IT>>Я к тому, что даже в приведённом тобой для C случая люди пытаются боряться с goto применением всевозможных сил и средств, например, макросов примерно так: AS>Всё равно не понятно. Что с того, что кто-то так делает? Я, например, встречал такие конструкции редко. И там где встречал, матерился, так как приходилось разбираться, что стоит за этими макросами, и потом держать это в голове. IT хотел сказать, что если оформить goto как-то так:
|
| Re[26]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 21:49 |
| Здравствуйте George_Seryakov, Вы писали: GS>Пипл хавает. Нет, даже так: ПИПЛ ХАВАЕТ! Уж ты-то должен это понимать. Дык. Сами и хаваем. VD>>Я бы хотел занчительно более простую вещь. Визуальный моделлер который выдавалбы в реальном времени котовые программы. И лучше бы вообще без программирования. GS>Тогда жди. Похоже проще самому сдалть. |
| Re[16]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 21:57 |
| Здравствуйте DarkGray, Вы писали: DG>IT хотел сказать, что если оформить goto как-то так: DG>
Вот и верь потом в скзки про вердность макросов. |
| Re[27]: Выйти из двух циклов сразу | |
| От: | George_Seryakov | ||
| Дата: | 04.06.02 21:57 |
| Здравствуйте VladD2, Вы писали: VD>>>Я бы хотел занчительно более простую вещь. Визуальный моделлер который выдавалбы в реальном времени котовые программы. И лучше бы вообще без программирования. GS>>Тогда жди. VD>Похоже проще самому сдалть. Давай делать. Нотацию какую будем поддерживать? UML? Генерировать скелет или сразу весь код придется мышкой вазюкать? В принципе, есть перекос, в который можно пропихнуть лапу: привязка моделирования и кодогенерации к библиотекам кода и готовых решений. Типа — разбираем рукописное приложение на образцы, и моделируем из этих образцов. Это может дать весьма высокую готовность нагенеренного кода. Ключевым тут является модель хранения кода, моделей и их провязки. GS |
| Re[16]: Выйти из двух циклов сразу | |
| От: | DarkGray | ||
| Дата: | 04.06.02 22:04 |
| Здравствуйте DarkGray, Вы писали: AS>>>>Не очень понятно, к чему всё это. Можно конкретный пример? IT>>>Я к тому, что даже в приведённом тобой для C случая люди пытаются боряться с goto применением всевозможных сил и средств, например, макросов примерно так: AS>>Всё равно не понятно. Что с того, что кто-то так делает? Я, например, встречал такие конструкции редко. И там где встречал, матерился, так как приходилось разбираться, что стоит за этими макросами, и потом держать это в голове. DG>IT хотел сказать, что если оформить goto как-то так: Еще менее напряжный код, как для пищущего программиста, так и для читающего (но зато более напряжный на оптимизатор):
|
| Re[28]: Выйти из двух циклов сразу | |
| От: | VladD2 rsdn | ||
| Дата: | 04.06.02 22:05 |
| Здравствуйте George_Seryakov, Вы писали: GS>Давай делать. Нотацию какую будем поддерживать? UML? Генерировать скелет или сразу весь код придется мышкой вазюкать? GS>В принципе, есть перекос, в который можно пропихнуть лапу: привязка моделирования и кодогенерации к библиотекам кода и готовых решений. Типа — разбираем рукописное приложение на образцы, и моделируем из этих образцов. Это может дать весьма высокую готовность нагенеренного кода. Ключевым тут является модель хранения кода, моделей и их провязки. Мне не нравится сама концепция генерации кода. Я себе это вижу так: 1. Есть некая прикладная область. Не узкая, не широкая, а в самый раз. 2. Есть некая компонентная модель. Расширяемая теми самыми технологиями где ручками нужно кодить. 3. Есть некий конструктор-моделлер, который позволяет описывать проблемы этой предметной области в виде диаграмм структур данных. 4. Есть встроенные средства позволяющие создавать GUI для этих моделей (опять же без программирования). 5. Есть возможность подключать модули (компоненты) написанные на обычных языках.. |
| Re[29]: Выйти из двух циклов сразу | |
| От: | George_Seryakov | ||
| Дата: | 04.06.02 22:16 |
| Здравствуйте VladD2, Вы писали: VD>1. Есть некая прикладная область. Не узкая, не широкая, а в самый раз. VD>2. Есть некая компонентная модель. Расширяемая теми самыми технологиями где ручками нужно кодить. VD>3. Есть некий конструктор-моделлер, который позволяет описывать проблемы этой предметной области в виде диаграмм структур данных. VD>4. Есть встроенные средства позволяющие создавать GUI для этих моделей (опять же без программирования). VD>5. Есть возможность подключать модули (компоненты) написанные на обычных языках.. Автоматизация программирования для предметной области. Мне такое не интересно. Хотя коммерчески может быть весьма успешным: САПР Бухгалтерия! САПР Отчеты по бухгалтерии! САПР Отчеты в налоговую! САПР Левая бухгалтерия! САПР Кадры! САПР Крупный банк! САПР Мелкий банк! и т.д. и т.п., и за все бабки. И куда только вся эта тьма наглюканых бухгалтерий потом деваться будет? GS |
| Re[3]: Выйти из двух циклов сразу | |
| От: | m.a.g. | ||
| Дата: | 04.06.02 23:40 |
| Здравствуйте Patalog, Вы писали: P>Никак не могу понять почему народ так боится goto? Для этого есть какие-то причины помимо эстетических? Ежели есть просветите плиз. А то я иногда пользуюсь, особенно в подобных случаях, и мне кажется это более красиво, чем с переменной... Кстати, даже добавление break (не говоря уж о goto) к структурному программированию портит всю теоретическую картину — рушится весь конструктивизм и многие теоремы существования. Кстати, многие неудобные места в современных языках программирования — это просто следствия из неправильного теоретического проектирования языка. P>ЗЫж Не флейма окаянного ради, может я и правда чего не знаю/понимаю? Для детального анализа нужна мат. логика и обобщенная теория моделей вкупе с теорией категорий. ... Born to run UNIX ... |
| Re[8]: Выйти из двух циклов сразу | |
| От: | m.a.g. | ||
| Дата: | 04.06.02 23:44 |
| Здравствуйте VladD2, Вы писали: VD>Повторюь еще раз. goto не структурированный оператор. И его ипользование вност хаотичность в код. Про схемы Янова слышал? Посмотри — потом будешь говорить насчет неструктурированности. Все зависит от контекста. VD>У нас в конторе написано ~ 300 000 рабочего кода (не считая кода к статьям) на C++ и goto не разу не применялся. Один программист как то раз начал отстаивать точку зрения "что в его случае лучше применить goto" и рьяно так... но когда мы переписали его код, он и сам согласился, что так элегантнее, понятее и безопаснее. Единственное условие применения структурных конструкций — "правило отсутствия неожиданностей". Если применение goto удовлетворяет этому принципу — оно и элегантно, и понятно, и безопасно. ... Born to run UNIX ... |
| Re[16]: Выйти из двух циклов сразу | |
| От: | Patalog | ||
| Дата: | 05.06.02 03:44 |
| Здравствуйте IT, Вы писали: Пардон, вмешаюсь... IT>Мои аргументы. IT>- я никогда не перепутаю порядок освобождения ресурсов, если он важен, IT>- я могу работать с ресурсами локально, в определённой точке программы и не держать их долго без надобности, особенно при наличии длинных циклов, IT>- я могу использовать их в тех же циклах, открывая и закрывая их при каждой итерации, IT>- я могу использовать return более гибко, в том числе и для сабжа, что в твоём случае невозможно, т.к. программа обязательно должно доползти до конца... хотя ты можешь, конечно, использовать ещё один goto Странные у тебя аргументы. То ты говоришь о некоем абстрактном горе-программисте, которому ни в коем случае нельзя давать в руки страшное оружие goto. И тут же приводишь в пример себя любимого, дескать "я никогда не перепутаю порядок освобождения ресурсов, если он важен" и далее по тексту. А что мешает этому абстрактному программисту перепутаь? И еще, касательно 3-го пункта "аргументов": А ежели этот самый ресурс, который ты будешь открывать и закрывать в каждой итерации сильно долго открывается\закрывается? Почетный кавалер ордена Совка. |
| Re[6]: Выйти из двух циклов сразу | |
| От: | Patalog | ||
| Дата: | 05.06.02 03:49 |
| Здравствуйте flyker, Вы писали: [skip] F>
F>Я бы так написал, а как другие пишут мне глубоко по барабану, лишь бы не мне читать и править. F>Но в данном конкретном случае оба варианта имеют право на жизнь. F>Хотя если бы не комментарий в ключевой строке, дольше бы понимал суть. Похоже суть ты так и не понял. Ежели было все так просто, ни о каком goto в данном случае речи бы не было. А комментарий в ключевой строке гласит "Юзер попытался исправить ошибку, надо проверить заново". Дальше продолжать? Почетный кавалер ордена Совка. |
| 1 2 3 4 5 6 7 8 9 10 11 12 … 20 |