Это моё личное предвзятое мнение. Любое совпадение с реальностью является случайным и непреднамеренным.
-
- Неспортивно - IBAH(20.02.2023 17:57)
- Вероятно это можно обернуть в макросы и сделать вид что всё по
правилам, но зачем? - =AlexD=(20.02.2023 18:02)
- Си очень прост и максимально приближен к нативным языкам
(ассемблерам). Я ни разу не встречал какой-нибудь процессор,
который бы не имел команды "JMP" (Goto). Потому не вижу смысла
брезговать использованием Goto ради следования каким-то
предрассудкам (типа "ухудшения читабельности программы", "не
получения удовольствия от созерцания кода", и прочим проявлениям
человеческой ограниченности и беспомощности :)). - vpv.vpv(21.02.2023 08:40)
- Мы можем как угодно относиться к Goto но он всем погромистским
сообществом назначен Вселенским Злом и предан Анафеме. То что
инструментом нужно пользоваться с умом никого не колышет. - 3m(22.02.2023 12:59)
- Д. Кнут с этим вашим сообществом не согласен. ЫЫyкпy(72 знак., 22.02.2023 18:29)
- А это всё от того, что многоуважаемому маэстро Кнуту никогда не
приходилось ковыряться в индусском коде, в котором свитч на 6 тысяч
строк и в этом свитче повсюду goto из середины одного кейса в
середину второго. Назад-вперёд-во-все-стороны. Он бы, может и
подумал ещё разок. - xarcas(28.02.2023 08:38)
- Дык это решается не запретом goto, а наличием надсмотрщика с
тяжёлой палкой :-) - SciFi(28.02.2023 08:43)
- В политкорректном обществе это принято называть "код-ревью". А
вообще, как это раньше в автобусах писали "совесть пассажира -
лучший контролёр" - xarcas(28.02.2023 21:07)
- в другой последовательности. - Kpoк(01.03.2023 08:57)
- Да лана. xarcas(1 знак., 01.03.2023 09:50, картинка)
- ага. значит, другой город. - Kpoк(01.03.2023 09:57)
- В наше время верить нельзя никому. Может, это агенты госдепа дезинформацию нарисовали? - SciFi(01.03.2023 10:02)
- ага. значит, другой город. - Kpoк(01.03.2023 09:57)
- Да лана. xarcas(1 знак., 01.03.2023 09:50, картинка)
- в другой последовательности. - Kpoк(01.03.2023 08:57)
- В политкорректном обществе это принято называть "код-ревью". А
вообще, как это раньше в автобусах писали "совесть пассажира -
лучший контролёр" - xarcas(28.02.2023 21:07)
- Дык это решается не запретом goto, а наличием надсмотрщика с
тяжёлой палкой :-) - SciFi(28.02.2023 08:43)
- Сразу вспомнилось: "Запомните, что я вам скажу: один стакан Tyмблep(1059 знак., 22.02.2023 23:58)
- Изобретатели Си были, в первую очередь, практиками. И язык они
создавали для решения вполне определённых задач - написания
операционной системы и другого подобного низкоуровневого кода. И
потому стремились реализовывать конструкции, понятным образом
отображающиеся на возможности железа того времени. Отсюда и куча
всяких странностей, типа *i++ (прямая калька с автоинкрементной
адресации в PDP) и переменные класса register и отсутствие в языке
операторов ввода-вывода. Но когда LightElf(364 знак., 09.03.2023 00:33)
- таки ведь именно для PDP они и писали новый язык. учиттываая именно
PDP'шные особенности архитектуры. - Alex68(09.03.2023 23:12)
- Ну не только PDP, иначе бы в языке не было UB по знаковому переполнению, например. Оно ведь откуда? Оно от того, что в те далёкие времена существовали компутеры, использовавшие для отрицательных чисел не дополнительный, а обратный код. А ещё, вроде, были архитектуры с насыщением. Соответственно получалось, что если к 32767 прибавить 1, то на одних компах получится -32768, на других -0, а на третьих 32767. И без проверки в рантайме отловить такое никак, а втыкать в ядре ОС LightElf(297 знак., 14.03.2023 02:03)
- таки ведь именно для PDP они и писали новый язык. учиттываая именно
PDP'шные особенности архитектуры. - Alex68(09.03.2023 23:12)
- goto это результат слабых возможностей break а также отсутствие в языке механизмов выхода сразу из множественных вложений. А оно иногда очень нужно. - 3m(28.02.2023 12:40)
- Изобретатели Си были, в первую очередь, практиками. И язык они
создавали для решения вполне определённых задач - написания
операционной системы и другого подобного низкоуровневого кода. И
потому стремились реализовывать конструкции, понятным образом
отображающиеся на возможности железа того времени. Отсюда и куча
всяких странностей, типа *i++ (прямая калька с автоинкрементной
адресации в PDP) и переменные класса register и отсутствие в языке
операторов ввода-вывода. Но когда LightElf(364 знак., 09.03.2023 00:33)
- Всего "ума" с goto - ходить вперед и не заходить внутрь блока. И только-то. - POV(22.02.2023 18:34)
- А это всё от того, что многоуважаемому маэстро Кнуту никогда не
приходилось ковыряться в индусском коде, в котором свитч на 6 тысяч
строк и в этом свитче повсюду goto из середины одного кейса в
середину второго. Назад-вперёд-во-все-стороны. Он бы, может и
подумал ещё разок. - xarcas(28.02.2023 08:38)
- Если в суждениях встречается слова "всё", "все", "никто", "всегда",
"никогда", значит это суждение неправильное. лoгикaнayкa(1 знак., 22.02.2023 13:03, ссылка)
- Это основное правило гуманитария. Программирование - "это другое". - Tyмблep(23.02.2023 00:04)
- Д. Кнут с этим вашим сообществом не согласен. ЫЫyкпy(72 знак., 22.02.2023 18:29)
- А я ни разу не встречал алгоритма, требующего гоуты. - VladislavS.(22.02.2023 07:25)
- Напишите какой-нибудь бутлоадер (bootloader), и вам гоуто 0 не
избежать. :)) (Про ((void(*)(void)) 0)(); я в курсе, это то же
самое) - vpv.vpv(28.02.2023 06:54)
- но есть нюанс. В Вашем варианте будет call вместо jmp и в случае
бутлодера еще до перехода на надо бы поправить указатель стека(это
на сях не сделать) а то стартап код живущий на 0 может быть написан
в расчете на хардресет где указатель стека аппаратно
инициализируется. - Nikolay801_(28.02.2023 10:18)
- Разумеется, стартап-код пишется и компилируется для адреса 0, и
первое, что этот код делает - настраивает (заново!) стек и пр. Так
что состояние стека "в предыдущей жизни", в секции бутлоадера, уже
не играет никакой роли. А вот периферия - тут другое дело. Поэтому
в бутлоадерах перед переходом в аппликейшЫн, я использую аппаратный
вачдог ресет, чтобы проц полностью весь обнулился. - vpv.vpv(01.03.2023 07:47)
- стартап код из stdlib stm32 который почти ни кто не трогает. Nikolay801_(95 знак., 02.03.2023 10:23)
- Элементарно, Ватсон. Стек трогает таблица векторов прерываний, и
это тоже часть стартапа. - SciFi(02.03.2023 10:25)
- при хард ресете трогает, при жамп/колл на 0 таблица невозмутимо
лежит в сторонке. - Nikolay801_(02.03.2023 10:55)
- Виноват, влез, не глянув на контекст. Так-то да, обычно настраивают стек и прыгают. Причём я не устаю рекламировать свой способ прыжка (см. ниже). Но и без настройки стека можно. Просто убедиться, что стартап его настроит, и тогда нет проблем. Но такой вариант реже встречается, КМК. SciFi(201 знак., 02.03.2023 11:16)
- при хард ресете трогает, при жамп/колл на 0 таблица невозмутимо
лежит в сторонке. - Nikolay801_(02.03.2023 10:55)
- Элементарно, Ватсон. Стек трогает таблица векторов прерываний, и
это тоже часть стартапа. - SciFi(02.03.2023 10:25)
- стартап код из stdlib stm32 который почти ни кто не трогает. Nikolay801_(95 знак., 02.03.2023 10:23)
- Разумеется, стартап-код пишется и компилируется для адреса 0, и
первое, что этот код делает - настраивает (заново!) стек и пр. Так
что состояние стека "в предыдущей жизни", в секции бутлоадера, уже
не играет никакой роли. А вот периферия - тут другое дело. Поэтому
в бутлоадерах перед переходом в аппликейшЫн, я использую аппаратный
вачдог ресет, чтобы проц полностью весь обнулился. - vpv.vpv(01.03.2023 07:47)
- ресетнуть вотчдогом - Oman(28.02.2023 07:07)
- у кортексов, которые нынче везде, есть SYSRESETREQ Nikolay801_(1 знак., 28.02.2023 10:22, картинка)
- У AVR есть регистр MCUSR, в котором флажки указывают на то, как
закончилась предыдущая жизнь. Можно сделать выводы. :)) - vpv.vpv(01.03.2023 07:56)
- В msp430g пользую сброс при исполнении инструкции по запрещенному адресу. - Гyдвин(01.03.2023 08:04)
- ага, сам через него делаю, просто забыл) - Oman(28.02.2023 10:36)
- У AVR есть регистр MCUSR, в котором флажки указывают на то, как
закончилась предыдущая жизнь. Можно сделать выводы. :)) - vpv.vpv(01.03.2023 07:56)
- у кортексов, которые нынче везде, есть SYSRESETREQ Nikolay801_(1 знак., 28.02.2023 10:22, картинка)
- но есть нюанс. В Вашем варианте будет call вместо jmp и в случае
бутлодера еще до перехода на надо бы поправить указатель стека(это
на сях не сделать) а то стартап код живущий на 0 может быть написан
в расчете на хардресет где указатель стека аппаратно
инициализируется. - Nikolay801_(28.02.2023 10:18)
- выскочить из двух и более циклов - IBAH(22.02.2023 12:58)
- А можно припер алгоритма, где нужно экстренно десантироваться из
вложенных циклов? - VladislavS.(23.02.2023 07:53)
- Фатальная ошибка датчика или исполнительного устройства после которой продолжение работы вложенных циклов не просто невозможна но и вредна. - 3m(28.02.2023 12:42)
- Управление приточно-вытяжной вентсистемой, без рекуператора -
пойдет? %) - Cкpипaч(23.02.2023 09:49)
- Идеальный претендент на шаблонный класс "приточно-вытяжная система"
с параметром "наличие рекуператора". Без всякой гоуты. - VladislavS.(23.02.2023 11:28)
- Угу. Только алгоритм управления - упрощенный. Cкpипaч(433 знак., 23.02.2023 11:53)
- Так вся прелесть объекта, что в месте вызова его интерфейса пофиг
упрощённый он или нет. Надо включить - дёрнули метод On(), надо
считать телеметрию ReadTM(). Всё через интерфейс. А реализацию
делайте хоть упрощённую сферическую в вакууме. - VladislavS.(23.02.2023 12:05)
- "Телеметрию" и абстрактный-"On" мне не надо. Я через базу делаю.
Шаблон - "класс-бог". - Cкpипaч(23.02.2023 14:11)
- Прямо в базу без интерфейса? Ну, тут мои полномочия уже всё. Гоутухайтес, если нравится. - VladislavS.(23.02.2023 14:14)
- Дерните пожалуйста vlv1.preheat_in_necessary_or_standart_regulation_if_not_or_ended(), реализованное как указатель на виртуальный метод. - Cкpипaч(23.02.2023 14:09)
- ...до тех пор, пока он целостная сущность. Как только он просто
попытка нелокального перехода - очередной "спагетти-код". - Cкpипaч(23.02.2023 14:00)
- Если это ваш код, то и винить в написании г@кода надо себя, если
чужой, то соболезную. - VladislavS.(23.02.2023 14:11)
- Слив защитан. - Cкpипaч(23.02.2023 14:13)
- Вообще, это не я жалуюсь как трудно вам там программируется. :))) - VladislavS.(23.02.2023 14:17)
- Слив защитан. - Cкpипaч(23.02.2023 14:13)
- Если это ваш код, то и винить в написании г@кода надо себя, если
чужой, то соболезную. - VladislavS.(23.02.2023 14:11)
- "Телеметрию" и абстрактный-"On" мне не надо. Я через базу делаю.
Шаблон - "класс-бог". - Cкpипaч(23.02.2023 14:11)
- Так вся прелесть объекта, что в месте вызова его интерфейса пофиг
упрощённый он или нет. Надо включить - дёрнули метод On(), надо
считать телеметрию ReadTM(). Всё через интерфейс. А реализацию
делайте хоть упрощённую сферическую в вакууме. - VladislavS.(23.02.2023 12:05)
- Угу. Только алгоритм управления - упрощенный. Cкpипaч(433 знак., 23.02.2023 11:53)
- Идеальный претендент на шаблонный класс "приточно-вытяжная система"
с параметром "наличие рекуператора". Без всякой гоуты. - VladislavS.(23.02.2023 11:28)
- Обход 2+ мерных массивов с целью поиска элемента. - AlexBi(23.02.2023 08:06)
- А можно припер алгоритма, где нужно экстренно десантироваться из
вложенных циклов? - VladislavS.(23.02.2023 07:53)
- Почему именно "алгоритма"?... POV(282 знак., 22.02.2023 12:48, картинка, картинка)
- 1. Макросы - зло! 2. Код сильно читабельней так if(!i2cSoft_WaitAck()) { i2cSoft_Stop(); return ERROR; } 3.Вопросы оптимизации оставьте компилятору, он это сделает лучше. - VladislavS.(22.02.2023 17:52)
- я бы переименовал EXEC в CHECK или подобное. - лoгикaнayкa(22.02.2023 13:06)
- Ну типа как "запуск" того что передается в параметр макроса. У меня
это в десятке проектов, поздно менять привычки )) - POV(22.02.2023 13:10)
- Я бы не рискнул из контекста (из фигурных скобок, пусть из switch)
выходить через goto. Вы LTO пробовали включать при компиляции?
Обычно, такое сразу вылезает боком, если оптимизировать
по-максимуму. - Nikolay_Po(22.02.2023 14:14)
- Выход не проблема, проблемой может быть гото внутрь скобок. Однако switch-case с этим (входом внутрь скобок) как-то разбирается. - AlexBi(22.02.2023 15:36)
- С чего бы оно вылезало боком? Это ж не фантазия прогера, это
штатная задача компилятора. У меня были случаи, что не собиралось
если не там объявлены переменные. Но и только-то. - POV(22.02.2023 14:18)
- Пока останусть при своём. Скобки для компилятора могут означать, в
том числе, сохранение регистров при входе и восстановление при
выходе, если внутри делается что-то большое и сложное, на что не
хватает свободных регистров процессора. Уследит ли за этим
компилятор в случае goto? По идее, должнен. Но лучше перебдеть, чем
недобдеть. - Nikolay_Po(22.02.2023 14:25)
- Следить за областью видимости - основная задача компилятора, тут не нужно предположений, это базовый функционал. - =AlexD=(22.02.2023 14:42)
- Пока останусть при своём. Скобки для компилятора могут означать, в
том числе, сохранение регистров при входе и восстановление при
выходе, если внутри делается что-то большое и сложное, на что не
хватает свободных регистров процессора. Уследит ли за этим
компилятор в случае goto? По идее, должнен. Но лучше перебдеть, чем
недобдеть. - Nikolay_Po(22.02.2023 14:25)
- Я бы не рискнул из контекста (из фигурных скобок, пусть из switch)
выходить через goto. Вы LTO пробовали включать при компиляции?
Обычно, такое сразу вылезает боком, если оптимизировать
по-максимуму. - Nikolay_Po(22.02.2023 14:14)
- Ну типа как "запуск" того что передается в параметр макроса. У меня
это в десятке проектов, поздно менять привычки )) - POV(22.02.2023 13:10)
- А мог встретить? Хотя бы теоретически. - mr-x(22.02.2023 10:46)
- У вас для этого ексцепшин, ясен пень, и вы им пользуетесь очень
активно, я бы даже сказал чрезмерно активно. =AlexD=(376 знак., 22.02.2023 08:52)
- Конструкторы ещё ошибку возвращать не могут (а эксепшены кидать - легко) - а это куда важней операторов и всяко чаще бывает нужно. Ну и на множестве платформ эксепшны тупо запрещено юзать - даже сейчас. Раньше еще и компиляторы (или рантайм) их тупо не поддерживали кое-где. То есть было даже собрать бинарь невозможно. - xarcas(28.02.2023 08:35)
- гоута требуется не для простейших алгоритмов, а больше для
читабельности кода, поройся grep в ядре линуха. - гoyтaкoдep(22.02.2023 07:29,
)
- Напишите какой-нибудь бутлоадер (bootloader), и вам гоуто 0 не
избежать. :)) (Про ((void(*)(void)) 0)(); я в курсе, это то же
самое) - vpv.vpv(28.02.2023 06:54)
- Мы можем как угодно относиться к Goto но он всем погромистским
сообществом назначен Вселенским Злом и предан Анафеме. То что
инструментом нужно пользоваться с умом никого не колышет. - 3m(22.02.2023 12:59)
- Си очень прост и максимально приближен к нативным языкам
(ассемблерам). Я ни разу не встречал какой-нибудь процессор,
который бы не имел команды "JMP" (Goto). Потому не вижу смысла
брезговать использованием Goto ради следования каким-то
предрассудкам (типа "ухудшения читабельности программы", "не
получения удовольствия от созерцания кода", и прочим проявлениям
человеческой ограниченности и беспомощности :)). - vpv.vpv(21.02.2023 08:40)
- Вероятно это можно обернуть в макросы и сделать вид что всё по
правилам, но зачем? - =AlexD=(20.02.2023 18:02)
- Неспортивно - IBAH(20.02.2023 17:57)