На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (12) « Первая ... 6 7 [8] 9 10 ... Последняя » все  ( Перейти к последнему сообщению )  
> Сохранение и восстановление состояния обработки
    Цитата korvin @
    Судя по этой диаграмме все ProcessN обрывают выполнение программы.

    Вообще это показаны вызовы. Что откуда вызывается. У тебя на блок схеме(и в условии задачи так же) - решения(DecisionN) - в зависимости от результата(true/false), который сделал процесс, определяют какой процесс будет вызван следующим. Но сам процесс - никак не участвует в передаче управления кому либо, он лишь выполняет некие операции. Вот и получается что на схеме показаны вызовы от решений(Decision), а стрелки от процессов, всегда направлены на соответствующее процессу решение. Процес1 всегда ссылается на решени1, Процесс2 на решение2, процес3 на решение3 и т.д. Поэтому странно считать что ProcessN - что то там обрывает. Он не обрывает выполнение программы, он просто ничего не вызывает, и ни накого не ссылается, просто выполняет определенную операцию и все.

    Добавлено
    Цитата korvin @
    А зачем мне «восстанавливать схему», если оно отображена в коде как есть?

    Во первых в твоем этом коде уже можно запутаться, ты помнишь свой аргумент про то, сколько человек может вещей в уме держать одновременно? У тебя тут как минимум 4 метки и 4 процесса, перемешанные в условиях, что уже ломает общую картину, а ведь это только 4 процесса! Если их тут будет даже не 50, а еще столько уже - это уже будет нечитаемое говно, даже с учетом твоего форматирования.
    Потом, то что ты метку, вызов функции, потом условный оператор вместе с телом зарядил в одну строчку - это вообще отдельный лол. Потом эту шнягу такой сохраняешь, а какая нибудь падла типа IDE, или еще какой нибудь штуки, неверно раздуплилась с табами в перемешку с пробелами, и получилась каша, снова форматируй. :D
    Потом ты взял эталонный спагети код, отформатировал его - чтоб визуально не наблюдать этот звиздец, и выдаешь это за ахеренное архитектурное решение. Но в нем даже при 4-рех процессах, уже глаза разбегаются!
    Сообщение отредактировано: Wound -
      Majestio, кажись, я слегка погорячился, прованговав всем известный паттерн.
      Цитата Wound @
      Суровая реальность когда система постоянно расширяется, и дополняется. Выдвигают новые условия, новые фичи и т.д.
      Сосбсна, в этих случаях goto как раз и выручает. Я понимаю, что это не вполне интуитивно, но в исходном коде goto появился ровно по причине внезапно изменившегося ТЗ. Majestio вас некисло так потроллил, сформулировав ТЗ так, что у вас все вводные сразу на руках. Уверяю, в рамках его условия, если я и выложу код, хотя боюсь, к тому времени конкурс уже будет закрыт, там goro не будет.
        Цитата korvin @
        Странный ты, наплодил себе классов, теперь без сгенерированной диаграммы не можешь разобраться в коде )

        Нет, это ты странный. Я прекрасно в своем коде разбираюсь, это же ты зачем то захотел из кода получить диаграмму. Так я тебе ее сделал, даже не смотря в код. Хотя там по коду и так все ясно без всяких диаграм.
        Теперь когда я тебя попросил построить диаграмму, ты пишешь что тут и так все ясно. Но тут ничего не ясно, тут ты из лапши попытался сделать что то более менее читаемое, но все эти метки в перемешку с процессами и if'ами - лишь ломают общую картину.

        Добавлено
        Цитата Qraizer @
        Сосбсна, в этих случаях goto как раз и выручает. Я понимаю, что это не вполне интуитивно, но в исходном коде goto появился ровно по причине внезапно изменившегося ТЗ. Majestio вас некисло так потроллил, сформулировав ТЗ так, что у вас все вводные сразу на руках. Уверяю, в рамках его условия, если я и выложу код, хотя боюсь, к тому времени конкурс уже будет закрыт, там goro не будет.

        Меня goto ниразу не выручал, потому что я им не пользуюсь, и даже там где возможно его можно было впендюлить - как правило всегда находятся более приемлемые решения. А вот когда на него натыкаешься - жгучую боль пониже спины он не редко вызывает, это да.
          Цитата Qraizer @
          всем известный паттерн.

          Что за паттерн-то?
            Цитата Qraizer @
            к тому времени конкурс уже будет закрыт, там goro не будет.

            korvin и Wound по красоте зарубились! :lool:

            Очень хочу дождаться участия ЫукпШ, OpenGL (но у него проблемсы), D_KEY, они ведь тут подбрасывали в начале идеи. Ну и вскроем пароли 8-)
              Цитата korvin @
              если оно отображена в коде как есть?

              Вот так оно будет к слову выглядеть, если переписать по нормальному, а не бабочек рисовать кодом, которые потом еще попробуй пойди отладь:
              ExpandedWrap disabled
                int main()
                {
                PROC_1 :
                    process_1() ;
                    if (decision_1())
                        goto PROC_4 ;
                    else
                        goto PROC_3 ;
                    
                PROC_2 :
                    process_2() ;
                    if (decision_2())
                        goto PROC_3 ;
                    else
                        goto PROC_4 ;
                        
                PROC_3 :
                    process_3() ;
                    if (decision_3())
                        goto PROC_2 ;
                    else
                        goto PROC_1 ;
                        
                PROC_4 :
                    process_4() ;
                    if (decision_4())
                        goto EXIT;
                    else
                        goto PROC_2 ;
                        
                EXIT:
                    return 0;
                }

              Очень все ясно и понятно, решение просто космос. :ph34r:

              Добавлено
              Я тут даже чутка отформатировал отступы для меток, чтоб оно хоть как то полегче понималось. И это самый простейший случай!
              Сообщение отредактировано: Wound -
                Спасибо korvin и Wonder за обсуждение - вы меня вдохновили на новую версию!

                Wonder, отдельный респект - он мне в личку раскрыл свои исходники. И я подсмотрел у него некоторые профессиональные решения - но пришлось использовать оператор goto :lol:
                Прилагаю вторую версию, добавил изящества 80 лвл.

                Прикреплённый файлПрикреплённый файлmajestio_goto.cpp.7z (1002 байт, скачиваний: 33)
                  Цитата Wound @
                  которые потом еще попробуй пойди отладь

                  Юнит-тесты? Не, не слышал.

                  Цитата Wound @
                  Вот так оно будет к слову выглядеть, если переписать по нормальному

                  Ты ничего не понял и всё испортил.
                    Цитата korvin @
                    Юнит-тесты? Не, не слышал.

                    Во первых причем тут юнитесты? У тебя будет чуть сложнее условие, ты в if'возьмешь провтыкаешь и вместо какого нибудь == напишешь присваивание(в плюсах как нехер делать), и потом сиди отлаживай своими юниттестами свою портянку, они тебя в этом случае не спасут.
                    Ты там недавно мне втирал про стектрейсы с DI, откуда ты их мог видеть, если у тебя контраргумент против отладки - Юнит-Тесты? :lol: Я ж так понимаю ты никогда не отлаживался, все юнит-тестами :rolleyes:

                    Цитата korvin @
                    Ты ничего не понял и всё испортил.

                    Нет, я прекрасно все понял. Ты взял эталонный спагетти-код, и просто захерачил 3 конструкции в одну строчку однотипно, чтоб этот трешак - более менее можно было понять. Даже у условных любителей goto, которые не брезгуют его применять, есть правила. И одно из них - прыгать можно на метку вперед, назад - это уже из серии говнокода, даже среди поклонников goto. А у тебя как раз тот случай, когда в зависимости от условия мы будем прыгать непойми куда, либо вперед, либо назад, за что собственно и критикуют goto, и предсказать выполнение программы, без ее отладки - зачастую затруднительно. Это даже затруднительно сделать глядя на твой код. Т.к. тут 4 метки, 4 условия(if/else), 8 прыжков, и код не тривиальный, т.к. ты несколько конструкций включая if/else в одну строку свернул(такое в основном студенты любят делать), что снижает читабельность и понимание кода.

                    Так что кончай прикрывать этот спагетти-код, каким то сомнительными аргументами.

                    Добавлено
                    Все эти goto вполне себе могут быть оправданы в низкоуровневых яп , типа асма, да хоть те же си, где банально нет интструментов и смысла городить всякую архитектуру в стиле ООП или еще каком.
                    Сообщение отредактировано: Wound -
                      Цитата Wound @
                      ты в if'возьмешь провтыкаешь и вместо какого нибудь == напишешь присваивание(в плюсах как нехер делать)

                      Это не только статические анализаторы, это уже компиляторы давно отлавливают.

                      Добавлено
                      Цитата Majestio @
                      Очень хочу дождаться участия ... D_KEY, они ведь тут подбрасывали в начале идеи

                      Ну поговорку про разговоры и мешки ты знаешь :D
                      У меня сейчас полный завал дел и на работе и вообще в жизни, так что не смогу.
                        Цитата D_KEY @
                        Это не только статические анализаторы, это уже компиляторы давно отлавливают

                        Компилятор выдаёт варнинг, а не ошибку, т. к. это вполне себе законная конструкция. Поэтому не совсем понимаю к чему это? Мы общаемся про сферических коней в вакууме, и как по мне, форматирование кода, в стиле 5 конструкций в одну строчку, здорово усложняют не только отладку, но и чтение кода.
                          Ещё одна, альтернативная, версия на Ocaml:
                          Прикреплённый файлПрикреплённый файлmajestio_machine_alt.ml.zip (1006 байт, скачиваний: 33)

                          И чисто функциональная версия на Haskell:
                          Прикреплённый файлПрикреплённый файлMajestio.hs.zip (895 байт, скачиваний: 33)

                          Добавлено
                          Цитата Wound @
                          Компилятор выдаёт варнинг, а не ошибку, т. к. это вполне себе законная конструкция.

                          C/C++-проблемы. Заметь, ни один мой вариант не использует эти языки.
                          Сообщение отредактировано: korvin -
                            Цитата korvin @
                            C/C++-проблемы. Заметь, ни один мой вариант, не использует эти языки.

                            Да, в плюсах это наследие от Си. В тех же шарпах это не законная конструкция и будет ошибка компиляции
                              Цитата Wound @
                              Компилятор выдаёт варнинг, а не ошибку

                              Я без -Werror уже несколько лет не работаю. Впрочем, еще и статические анализаторы подключаю.
                                Цитата D_KEY @
                                Я без -Werror уже несколько лет не работаю. Впрочем, еще и статические анализаторы подключаю.

                                А те варнинги от которых в принципе избавится не возможно, ты давишь директивами #pragma :lol:
                                Аргументы поперли просто жесть. Да какая разница с чем ты там работаешь или нет? Мы обсуждаем твою личность тут или чего? Я goto в принципе не использую, и никогда в жизни у меня даже не возникало ни желания, ни мысли его использовать на работе(разве что только в исследовательских целях, дома когда изучал ЯП). Значит все в мире должны перестать его тоже использовать? Я верно понял твою логику?

                                Добавлено
                                И вообще goto рудимент и пережиток прошлого. В тех языках например, где нет конструкции break в циклах for - его еще можно оправдать, а именно там он как бы и уместен, чтоб выпрыгивать досрочно из цикла, и то в тех же языках - его можно заменить while'ом, и никаких goto не нужно. А в высокоуровневых языках, я даже не могу представить где бы он мог бы понадобиться.

                                Добавлено
                                Разве что писать спагетти-код, и доказывать окружающим, что теперь я в этом вижу какую то блоксхему...
                                Сообщение отредактировано: Wound -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0523 ]   [ 19 queries used ]   [ Generated: 9.05.24, 06:10 GMT ]