Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.131.110.169] |
|
Страницы: (12) « Первая ... 2 3 [4] 5 6 ... 11 12 все ( Перейти к последнему сообщению ) |
Сообщ.
#46
,
|
|
|
По-моему очень хороший и конкретный ответ на конкретную реплику про отношение к мнению других. Наплевать на мнение других людей ты можешь тогда, когда один работаешь. А так с goto у тебя точно будут приключения в команде. Если тебе это подходит, то ок Ну или может быть команда скажет, что ок (я бы, наверное, заапрувил PR с таким использованием goto, хотя тоже зависит от), значит тоже все в порядке. Но я думаю, что код будет вызывать споры на ревью, а потом еще вопросы у каждого нового человека, который будет этот код смотреть. |
Сообщ.
#47
,
|
|
|
Цитата D_KEY @ К слову сказать. В каждой кампании есть определённые стандарты. На то, на сё. Не секрет. У нас они тоже есть. Я всегда (!) джунам говорю так: «Стандарты нужны, т.к. без них будет анархия. В анархии разбираться всегда сложно и дорого. Вы пришли, вам теперь курить, что понасоздано до вас вашими коллегами. После вас кто-то придёт и будет курить созданное вами. Анархия — зло. Так что будьте добры соблюдать стандарты. Чего бы там ни было. Это самое простое, что можно сделать, чтобы легко и быстро влиться в процесс и начинать приносить кампании пользу. Но. Любая крайность тоже зло. Жить строго по уставу нельзя. Любой закон имеет сферу применимости. Даже УК ограничен, к военным, например, он имеет опосредованное отношение. Я не хочу, чтобы вы знали стандарты назубок, я хочу, чтобы вы понимали, почему они такие. Когда я спрошу, откуда взялся вот этот вот конкретный пункт и почему он сформулирован не как-нибудь иначе, и вы сможете внятно ответить, вы мидлы. А если в вашей деятельности встретится ситуация, когда следование букве стандарта вредит его духу, то вы не должны бояться нарушить первое ради сохранения второго. Да, вам будут задавать вопросы типа "почему так", "с чего это ты вдруг решил..." и даже "не ахренел ли ты". Если вы готовы и на них отвечать, значит вы сеньоры. Но до тех пор, пока вы не сеньоры и даже не мидлы, стандарты ваше всё.»/ И думаю, что каждый человек, который будет видеть этот код с goto, будет задавать вопросы |
Сообщ.
#48
,
|
|
|
Вот что нашел=)
Цитата D_KEY @ У них разные initValue По поводу оптимизации - надо мерить. Добавлено Пока получается что-то вроде того: int i = 0, j = 0, k = 0; if (restore(&i, &j, &k)) goto resume; for(i = 0; i < 10; ++i) { for (j = i; j < 10; ++j) { for(k = j; k < 10; ++k) { resume: // ... } } } vs int i = 0, j = 0, k = 0; restore(&i, &j, &k); for(; i < 10; ++i, j = i, k = j) { for (; j < 10; ++j, k = j) { for(; k < 10; ++k) { // ... } } } vs int init_i = 0, init_j = 0, init_k = 0; bool is_init = restore(&init_i, &init_j, &init_k); for(int i = is_init ? init_i : 0; i < 10; ++i) { for (int j = is_init ? init_j : i; j < 10; ++j) { for(int k = is_init ? init_k : j; k < 10; ++k) { // ... } } } Мне кажется, что вариант с goto понятнее... Хотя второй тоже неплох, на мой взгляд. goto vs break & continue (сообщение #3594314) Там в окрестностях тоже интересно почитать |
Сообщ.
#49
,
|
|
|
Цитата Majestio @ Спешал фор Киля! Я знаю твою лютую, можно сказать - бешенную ненависть к прекрасному оператору GOTO. Специально для тебя лучшие умы Сколково уже давно придумали "case-switch" подход. На языке программирования Цэ это будет примерно так: Я goto юзал только в образовательных целях, case-switch - юзал может быть пару раз, и то скорее всего мне было лень думать, либо там был несущественный участок кода, где он как то вписывался. switch-case - по факту не несет какого то негативного оттенка, не имею против него ничего. Но - лично мне не нравится он из за того что очень сильно захламляет код - по сути метод/функция - содержащая switch - превращается в одну большую портянку. И чем больше case в switch - тем длинее портянка, ну и плюс ко всему - он очень сильно ограничен в своих возможностях, прям сильно, если бы не было таких ограничений(он требует константых выражений, в отличии от if например), то возможно бы я чаще его применял. По этому по возможности стараюсь избегать его, не то что он плохой, а просто потому что у меня к нему предвзятое отношение, неудобно потом мотать его, ну и у него очень ограниченный спектр применений. Ну а по теме, я пока остаюсь при своем мнении. Ни одного аргумента оправданного применения goto пока не привели. Все примеры синтетические, высосаные из пальца, типа: Попробуй без goto запрыгнуть в 10-вложенный цикл for, а че не можешь? Ну все, значит goto рулит. Лично мое мнение - если так стоит вопрос, значит у тебя уже проблемы, и ты пытаешься их костылями исправить. |
Сообщ.
#50
,
|
|
|
Цитата Majestio @ Какие варианты, кроме как использовать метки и оператор goto, могут быть для решения данного вопроса? С ходу вижу 2 решения: 1) засунуть всю эту процедуру в отдельный поток и дальше синхронизироваться сообщениями. 2) сделать инициализацию параметров. таким образом, на каждой итерации нужный идекс будет увеличиваться, а при старте функции все индексы тут восстановлены из массива. |
Сообщ.
#51
,
|
|
|
Ну што, пришло время предложить челендж!
Конечно все эти много-вложенные циклы - баловство. В реальности же чаще бывает гораздо проще. Но бывает и ппц. Это касается алгоритмов, где количество обрабатываемых параметров 100500, да и если они еще отчасти взаимозависимы. Нижеприведенный пример конечно чистая синтетика, и очень упрощенная. Но, уверяю, и не такое бывает в сложных системах. Подобный фарш я программил лет 15 назад. Проект назывался "Робот обновлений Консультант Плюс". Невыносимое количество условий и параметров для их выполнения. Поехали Вот блок-схема алгоритма работы (восстановление работы, сиречь, "впрыгивание" в точки сохранения - на блок-схеме нет): Условия Условия челенджа Прошу - не спойлерить! Написали программу, присоединили шифрованным архивом, архивы паролями вскроем через недельку, как все заинтересованные отпишутся. Желательно писать программу так, чтобы можно было бы ее прогнать в онлайн-компиляторе. Вводные данные Процесс-1 Безусловный инкремент нулевой ячейки массива. Процесс-2 Ячейку1 увеличивает на содержимое Ячейки3 + 1 Процесс-3 Если сумма Ячейки0 и Ячейки1 НЕ делиться нацело на три, то Ячейку2 увеличиваем на 7 Процесс-4 Если сумма Ячейки0 и Ячейки2 деленная по модулю 5 не равна 4 - увеличиваем Ячейку3 на еденицу Проверка-1 Возвращает true, если сумма всех ячеек кратна 2, иначе false Проверка-2 Возвращает true, если сумма всех ячеек деленная по модулю 7 больше нуля, иначе false Проверка-3 Возвращает true, если числа всех ячеек четные, иначе false Проверка-4 Возвращает true, если сумма всех ячеек больше 24, иначе false "Эталонные вычисления" Step: 0 Proc: 1 0 0 0 0 Step: 1 Proc: 3 1 0 0 0 Step: 2 Proc: 1 1 0 7 0 Step: 3 Proc: 3 2 0 7 0 Step: 4 Proc: 2 2 0 14 0 Step: 5 Proc: 3 2 1 14 0 Step: 6 Proc: 1 2 1 14 0 Step: 7 Proc: 4 3 1 14 0 Step: 8 Proc: 2 3 1 14 1 Step: 9 Proc: 4 3 3 14 1 Step: 10 Proc: 2 3 3 14 2 Step: 11 Proc: 3 3 6 14 2 Step: 12 Proc: 1 3 6 14 2 Step: 13 Proc: 4 4 6 14 2 Step: 14 Proc: 5 4 6 14 3 ---------------------------------------------------------------- Step: 9 Proc: 4 3 3 14 1 Step: 10 Proc: 2 3 3 14 2 Step: 11 Proc: 3 3 6 14 2 Step: 12 Proc: 1 3 6 14 2 Step: 13 Proc: 4 4 6 14 2 Step: 14 Proc: 5 4 6 14 3 ---------------------------------------------------------------- Смотрим. На нулевом шаге имеем в ячейках нули и начали обрабатывать Процессом-1. На первом шаге, после Процесса-1, видим, что нулевая ячейка инкрементировалась. А обрабатывает этот шаг Процесс-3 На втором шаге после Процесса-3, видим, что вторая ячейка получила значение 7. А обрабатывает этот шаг Процесс-1 .. ну и так далее, до разделительной линии На последнем шаге-14 (всего 15 шагов) ячейки получили значения 4,6,14, 3 - ну а Proc-5 - это просто "окончательный выход из обработки" Вторая часть того же алгоритма. Но заход в него будет не со значений Процесс-1, ячейки (0,0,0,0), а с якобы "сохраненного" состояния - Процесс-4, ячейки (3,3,14,1) Видим часть "довычислений", видим результаты идентичные. Я и номер шага сохранял, но это лишнее. Свою программу на С++ прикрепляю запароленным архивом. Вэлком - покажите себя на деле! Ценим компактность и понятность кода, естественно идентичность тестовых расчетов. Прикреплённый файлmajestio_algo.cpp.7z (794 байт, скачиваний: 36) |
Сообщ.
#52
,
|
|
|
Сообщ.
#53
,
|
|
|
Majestio, для решения подобных задач существует стандартный метод. И его все хорошо знают. Не удивлюсь, если бо́льшая часть решений будет основана на нём. Другое дело, что для синтетики с простыми Процессами она очень накладна.
|
Сообщ.
#54
,
|
|
|
Цитата korvin @ Скажи, а ты специально так всё расположил, чтобы сделать лапшу из стрелок? Не специально, честно. Кстати, а ты в чем рисовал? Добавлено Цитата Qraizer @ Majestio, для решения подобных задач существует стандартный метод. И его все хорошо знают. Не удивлюсь, если бо́льшая часть решений будет основана на нём. Другое дело, что для синтетики с простыми Процессами она очень накладна. Ну пусть будем думать, что процессов не 4, а 50. Ну так, на перспективу |
Сообщ.
#55
,
|
|
|
Цитата Majestio @ Кстати, а ты в чем рисовал? OmniGraffle |
Сообщ.
#56
,
|
|
|
Цитата korvin @ OmniGraffle Ниче так получилось, и шрифты красивые. А я в какой-то онлайн-хрени нарисовал по-быстрому. |
Сообщ.
#57
,
|
|
|
Цитата Majestio @ шрифты красивые Шрифты Iosevka — качай да пользуйся. |
Сообщ.
#58
,
|
|
|
Цитата Majestio @ Та без разницы. Накладные тоже возрастут пропорционально. Ну пусть будем думать, что процессов не 4, а 50. Ну так, на перспективу |
Сообщ.
#59
,
|
|
|
Совершенно непонятно, как должны работать «точки останова» и как симулировать останов в программе.
Прикреплённый файлmajestio_state_machine.ml.zip (1,24 Кбайт, скачиваний: 43) |
Сообщ.
#60
,
|
|
|
Цитата korvin @ Совершенно непонятно, как должны работать «точки останова» и как симулировать останов в программе. Ну в реальности можно все это выносить в отдельный поток, а на точках останова чекать атомарную переменную на предмет необходимости останова и сброса состояния на диск. Как самый элементарный вариант. Цитата korvin @ Iosevka Благодарю! Нашел, скачал, щя смогу тоже наводить красоту Вот еще похожий ничегошный так - Pragmata. Добавлено Цитата Qraizer @ Та без разницы. Накладные тоже возрастут пропорционально. Ну ок. Будет оказия - прими участие вот тут |