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

    В изначальном примере от Qraizer'а состояние сохранялось в файл, а при повторном запуске программы — восстанавливалось. Предлагаешь в качестве «восстановления» прокручивать циклы в холостую с самого начала, пока он не дойдёт до нужных значений счётчиков?
    Сообщение отредактировано: korvin -
      Цитата korvin @
      В изначальном примере от Qraizer'а состояние сохранялось в файл, а при повторном запуске программы — восстанавливалось. Предлагаешь в качестве «восстановления» прокручивать циклы в холостую с самого начала, пока он не дойдёт до нужных значений счётчиков?

      Состояние переменных не обязательно спасать, если они не портятся.
      Переменные-счётчики циклов (да и все остальные, какие нужно) нигде
      не портятся независимо от их расположения. Например, в стеке.
      А если они не портятся то и восстановления не требуют.
      Циклы прокручивать не нужно, поскольку вызов процедуры происходит внутри них
        Цитата ЫукпШ @
        Состояние переменных не обязательно спасать, если они не портятся.

        В смысле «не портятся»? Программа завершилась. Всё. Память перетёрлась другим процессом.

        Цитата ЫукпШ @
        Переменные-счётчики циклов (да и все остальные, какие нужно) нигде
        не портятся независимо от их расположения. Например, в стеке.

        Ещё раз: программа завершила работу. На середине цикла. Штатно. Так задумано. Нужно сохранить счётчики в файл и при следующем запуске — восстановить.
          Цитата ЫукпШ @
          А вот так нельзя было ?
          ...
          ЫукпШ, можно по-разному. Только в понятности алгоритма, скорости его кодирования, скорости исполнения и простоте отладки goto даст фору на все четыре пункта вперёд.

          Добавлено
          Поймите, любой костыль будет тратить больше ресурсов. Нарисуйте блок-схему любого алгоритма «делать что-то долго, поэтому предусмотреть возможность стать на паузу с сохранением состояния и продолжить позже» и внезапно увидите стрелку вовнутрь. Алгоритм исходно неструктурен. Любые попытки его структурировать сделают его хуже.

          Добавлено
          Цитата ЫукпШ @
          От одного специалиста мне достались для работы некие важные исходные тексты.
          Он использовал С компилятор как ассемблер и goto - его любимый оператор.
          Надо ли продолжать описание ситуации ? =:0
          Он дурак. Мало знать возможности своего инструмента, нужно их понимать. Любой аспект может быть в разных ситуациях как положительным, так и отрицательным фактором. Сам по себе goto не есть зло. Злом является его использование не к месту. Это справедливо для любого аспекта языка. Любого языка. Или ты думаешь, что классы в Плюсах только для ООП? А шаблоны только для параметризации типов? Я так думал 20 лет назад. Ещё я думал, что знаю C++. И думал я так не первый раз. И не последний, впрочем. А потом мне попалась книжка Александреску. :whistle:
          Сообщение отредактировано: Qraizer -
            Было же уже. Не помню только, в холиварах или в C/C++.
              Цитата D_KEY @
              Было же уже. Не помню только, в холиварах или в C/C++.

              Об этом и написано в первом сообщении: “Некоторое время назад эта тема затрагивалась вскользь.”

              Да, был пример от Qraizer’а
                Цитата korvin @
                Об этом и написано в первом сообщении

                Ну так тут вроде ничего нового не появилось особо.
                  Цитата D_KEY @
                  Ну так тут вроде ничего нового не появилось особо.

                  Да нет - появилось! А именно ИМХО очень правильное высказывание Qraizer'а:

                  Цитата
                  Сам по себе goto не есть зло. Злом является его использование не к месту. Это справедливо для любого аспекта языка. Любого языка.

                  Простой пример - программирование "автоматной логики". Это когда ваш алгоритм не расписывается "деревом", а расписывается "сетью". И приходится на части вычислений "впрыгивать" в какие-то ранее обозначенные конструкции. Определенные "профессионалы" сразу заявят - "говнокод - разноси по функциям". Они просто не помнят уже цену операторов помещения и извлечения из стека. Ну што сказать - поколение Пепси :( Вот тут и подойдет прекрасный оператор GOTO, который может гонять алгоритм по неизведанным путям.

                  Спешал фор Киля!

                  Я знаю твою лютую, можно сказать - бешенную ненависть к прекрасному оператору GOTO. Специально для тебя лучшие умы Сколково уже давно придумали "case-switch" подход. На языке программирования Цэ это будет примерно так:

                  ExpandedWrap disabled
                    // ...
                    int mode = init_value;
                    while(1+1) Х
                      switch (mode) {
                        case 1: (
                          // if, run, modify mode, continue/break
                        }
                        case 2: (
                          // if, run, modify mode, continue/break
                        }
                        // ...
                        case 'N': (
                          // if, run, modify mode, continue/break
                        }
                        default: break;
                      }
                    }
                    //...


                  ADD: сорян - изначально забыл все это хозяйство завернуть в бесконечный цикл! Просто забыл...

                  Хотя ... по-сути, это просто "сахаро-заменитель", замещяющий использование прекрасного императора GOTO :lol:

                  Что имеем по факту!

                  • Если действительно встала проблема "сохранения/восстановления", то совсем не забываем слово "состояния" и ... рефакторим код под "case-switсh" подход
                  • "Неделимые" вычисления - есть "ветви" swith-оператора
                  • После каждого оператора, или не после каждого, сохранять "состояние" - на совести разработчика, см.п. выше
                  • long jump 4 ever! :lol:
                    Цитата Majestio @
                    Цитата D_KEY @
                    Ну так тут вроде ничего нового не появилось особо.

                    Да нет - появилось! А именно ИМХО очень правильное высказывание Qraizer

                    Могу ошибаться, но он и в прошлый раз что-то такое говорил :)
                      Возможно. Повторение - мать учения, могу ошибаться :lol:
                        Цитата Majestio @
                        Вот тут и подойдет прекрасный оператор GOTO

                        Отвратительный оператор в 99.9999% случаев. Но иногда может и стоит его использовать. Но нужно крепко подумать. А потом еще раз.

                        Даже в этом кейсе с сохранением, как мне кажется, вполне и без него ок.
                          Цитата D_KEY @
                          Отвратительный оператор

                          Для программистов-дауншифтеров - самое то!!! :lool:
                            Цитата D_KEY @
                            Даже в этом кейсе с сохранением, как мне кажется, вполне и без него ок.
                            Конечно можно. Но вот насчёт ок... Приведу свой же структурный код ещё раз, несколько упростив детали:
                            ExpandedWrap disabled
                                int i, j, k, l;
                                int i0 = 0,
                                    j0 =i0,
                                    k0 =j0,
                                    l0 =k0;
                               
                                if (needRestore())
                                {
                                  bool ok = restoring(i0, j0, k0, l0);
                               
                                  if (ok)
                                    std::cout << "The saved state is successfully restored." << std::endl;
                                  else return std::cerr << "The saved state restoring error. State file is wrong." << std::endl,
                                              1;
                                }
                               
                                for (i=i0; i<10;)
                                {
                                  for (j=j0; j<10;)
                                  {
                                    for (k=k0; k<10;)
                                    {
                                      for (l=l0; l<10; ++l)
                                      {
                                        if (needSave())
                                        {
                                          bool ok = saving(i0, j0, k0, l0);
                               
                                          if (!ok)
                                            return std::cerr << "The state saving error." << std::endl,
                                                   1;
                                          return std::cout << "The state successfully saved." << std::endl,
                                                 2;
                                        }
                               
                                        /* ... */
                               
                                        std::cout << "i = " << i << ", j = " << j << ", k = " << k << ", l = " << l << std::endl;
                                        Sleep(1);
                                      }
                                      l0 = ++k;
                                    }
                                    l0 = k0 = ++j;
                                  }
                                  l0 = k0 = j0 = ++i;
                                }
                            Внимание — вопрос: профилировать будем или и так понятно? И ещё один: а есть гарантия его корректности? И ещё, совсем маленький: отлаживаться надо? И наконец самый последний: счас сюда зайдёт некий Пупкин, гуглящий goto, и вот каково ему будет понять этот код, если только он уже не почитал посты, которые ему объяснили, что тут вообще происходит?

                            Добавлено
                            Любой алгоритм может быть представлен в структурной форме. Это доказанная (?) теорема. Другое дело, а всегда ли надо. Я утверждаю, что нет, хотя и в крайне редких случаях.

                            Добавлено
                            P.S. Для меня лично эти вопросы тривиальны. Код с goto был проаппрувлен через три секунды после появления идеи о нём в голове. И реализован за минуту. И сразу работал, без отладки. И понятен (??) любому, кто его увидел. В сухом остатке мне как-то коллинеарно на эмоции, которые этот код у кого может вызвать. Кому не нравится если, волен писать стек лямбд, абстрактный объект, машину состояний и вообще всё что его душе угодно. Совсем уж чтоб: исключения диссонанса не вызывают? Куда уж ещё более неструктурно-то...
                            Сообщение отредактировано: Qraizer -
                              Цитата Qraizer @
                              В сухом остатке мне как-то коллинеарно на эмоции, которые этот код у кого может вызвать. Кому не нравится если, волен писать стек лямбд, абстрактный объект, машину состояний и вообще всё что его душе угодно

                              Ну будешь в одной команде с кем-то, будете холиварить. И думаю, что каждый человек, который будет видеть этот код с goto, будет задавать вопросы. Так что тут все зависит от того, с кем ты работаешь и какие правила есть в команде/организации :)
                                Цитата D_KEY @
                                Ну будешь в одной команде с кем-то, будете холиварить. И думаю, что каждый человек, который будет видеть этот код с goto, будет задавать вопросы. Так что тут все зависит от того, с кем ты работаешь и какие правила есть в команде/организации

                                Как обычно, ответ не по существу и ни о чём. Пять баллов! )
                                Сообщение отредактировано: korvin -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (12) 1 2 [3] 4 5 ...  11 12 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0426 ]   [ 14 queries used ]   [ Generated: 19.05.24, 06:07 GMT ]