_>>Ну а если говорить о крупных вещах, то я уже довольно давно не представляю себе современного кода без автоматического вывода типов BFE>А! Ну, это прямо запрещено правилами: никаких целых без указания размерности. Т.е. не int, а int32_t; не char, а uint8_t ...
И как это противоречит автоматическому выводу типов? )))
Здравствуйте, alex_public, Вы писали:
_>>>Ну а если говорить о крупных вещах, то я уже довольно давно не представляю себе современного кода без автоматического вывода типов BFE>>А! Ну, это прямо запрещено правилами: никаких целых без указания размерности. Т.е. не int, а int32_t; не char, а uint8_t ... _>И как это противоречит автоматическому выводу типов? )))
Вот так нельзя:
Здравствуйте, so5team, Вы писали:
BFE>>>>Ну раз нет динамического выделения памяти, значит нет виртуальных функций, S>>>Каким боком динамическая память к виртуальным функциям? BFE>>А зачем вам виртуальные функции если у вас есть целый объект? S>А каким боком виртуальность функций к целому или не целому объекту?
Если у вас есть указатель на базовый класс, то вызов виртуального метода оправдан.
Но откуда у вас указатель, если все объекты либо глобальные/статические, либо лежат на стеке? (разумеется рекурсивные вызовы без ограничения глубины на стеке запрещены)
S>Есть ощущение, что вам матчасть нужно сперва подучить.
Это иллюзия.
S>>>Опять же, где именно шаблоны, лямбды или structured binding с if constexpr взаимоувязаны с динамической памятью? BFE>>Вопрос не только в динамической памяти, это просто пример. Всё гораздо сложнее. S>Давайте разберемся с более простыми вещами: где именно шаблоны, лямбды или structured binding с if constexpr взаимоувязаны с динамической памятью?
Никак не увязаны.
BFE>>Например, в std::array::at(size_type n ); есть ветка бросающая исключение. Если в коде нет ошибки, то эта ветка никогда не вызовется => нет 100% покрытие кода тестами => проверка кода провалена. Я же писал: бюрократия и особые требования. S>Так у вас если нет динамической памяти и исключений не будет.
Это почему вы так думаете? Насколько я помню стандарт, память под исключения выделяется особым образом. Вроде бы implementation defined.
S>О каких-таких ветках вы говорите?
00164 const_reference
00165 at(size_type __n) const
00166 {
00167 if (__n >= _Nm)
00168 std::__throw_out_of_range(__N("array::at")); <--- об этой ветке
00169 return _M_instance[__n];
00170 }
Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, Marty, Вы писали:
M>>>>ADC/DAC/I2C/SPI/UART/CAN/TIM/DMA etc _>>>Я в курсе что такое периферия. Мне не понятен термин "работы" с ней, в контексте IDE. M>>Смотреть в отладке на регистры
_>Так регистры же все отображены в память, и соответственно банальный gdb без проблем подтягивает их значения (можно хоть в командной строке смотреть), и далее любая IDE показывает их в стандартном интерфейсе отладчика (отслеживания переменных). Что там ещё может быть нужно? )
Здравствуйте, smeeld, Вы писали:
M>>к гражданам сишечникам
M>>Оченно прошу — расскажите, где вы работаете. И нет, не то, что вы подумали — давайте обойдемся без говна с оскорблениями и пр. — я к вам резуме посылать не буду, как раз и хочу избежать этого шага — нет смысла — и вам тоже проще
S>Всё просто-не пытайтесь устроиться работать в компании, с оборотом больше $100M и собственным фондом софта размеры которого больше гигабайта исходников (суммарный размер последних релизных веток). И тогда избежите встречи с кодом, который по-Вашему, несомненно компетентному мнению эксперта, считается говнокодом. Пилите и дальше свои хеллоуворлды кучкой единомышлеников-говноэкспертов.
Код меня не пугает, меня пугает возможность наткнуться на таких коллег, как вы. А с учетом того, что и вы, и Денис шафруетесь аки штирлицы, эта вероятность остается ненулевой
Можно было бы конечно играть и дальше в игру "не бей лежачего" и указывать вам на проблемы в вашей "логике", типа блог не читаю, но цитирую оттуда по памяти. Не говоря уже про то, что от so5team нужно было еще как-то на блог одного конкретного участника из so5team выйти. Можно было бы провести вашей физиономией по фразе "А вдруг не я не имею отношения к Scrapinghub? Извинишься перед ними?" и задать вопрос о том, а за что именно мне нужно извиняться перед Scrapinghub.
Но гораздо конструктивнее просто спросить о главном: если вы весь из себя такой удавшийся, что позволяете судить всех остальных с позиции "а чего добился ты", то что вы вообще делаете на этом форуме и почему тратите время на лузера типа меня?
Или можно с другой стороны зайти: а чего добились вы?
Рискну предположить, что вы в очередной раз прикинитесь ветошью.
Здравствуйте, Nikе, Вы писали:
N>Шаблонное месиво как нужно для того, чтобы было удобно использовать. Оно, месиво, лежит в специальном месте и никому не мешает, а дальше ты уже пишешь быстро, эффективно и безопасно, а не как в С. А генерируемый код при этом такой же или более эффективный.
Я, как доктор Хаус, считаю, что все лгут (кодовые контракты в моем случае, я ж людей не лечу). Поэтому если что-то пойдет не так, то в шаблонное месиво мне заглянуть придется.
Насчет быстро и эффективно, это не простой вопрос. Чтобы вставить объект в середину вектора объектов, простым советским memmove не обойдешься, придется конструкторы дергать. В новомодном C++ для этого, наверное, уже придумали какой-то навороченный синтаксис, состоящий из необычного сочетания обычных знаков препинания , но слабо могу себе представить, чтобы простой программист в своей прикладной программе им воспользовался.
Здравствуйте, B0FEE664, Вы писали:
Pzz>>Отказ автопилота — это штатная ситуация. К аварии она приводит, если авиакомпания экономит на обучении персонала, и пилоты не имеют навыка летать "на руках".
BFE>Это ответ на вопрос? Т.е. вам всё равно, есть в автопилоте динамическая аллокация памяти или нет?
Ну в общем да, мне все равно.
Кстати, аллокация на стеке тоже динамическая, стек тоже может кончиться. В отличии от кучи, при этом можно даже исключения не получить.
Здравствуйте, B0FEE664, Вы писали:
BFE>Если у вас есть указатель на базовый класс, то вызов виртуального метода оправдан. BFE>Но откуда у вас указатель, если все объекты либо глобальные/статические, либо лежат на стеке? (разумеется рекурсивные вызовы без ограничения глубины на стеке запрещены)
Вы не можете ответить на простой вопрос. Когда сможете, тогда и можно будет продолжить разговор. Расписывать здесь пояснения элементарных вещей на три экрана у меня нет возможности.
Так что еще раз: А каким боком виртуальность функций к целому или не целому объекту?
S>>Есть ощущение, что вам матчасть нужно сперва подучить. BFE>Это иллюзия.
Вы себе сильно льстите.
S>>>>Опять же, где именно шаблоны, лямбды или structured binding с if constexpr взаимоувязаны с динамической памятью? BFE>>>Вопрос не только в динамической памяти, это просто пример. Всё гораздо сложнее. S>>Давайте разберемся с более простыми вещами: где именно шаблоны, лямбды или structured binding с if constexpr взаимоувязаны с динамической памятью? BFE>Никак не увязаны.
Вот и получается, что отсутствие динамической памяти вообще никак не превращает современный C++ в Си с классами. Поэтому у вас в исходном утверждении ошибка. Что и определяет все последующие заблуждения.
S>>Так у вас если нет динамической памяти и исключений не будет. BFE>Это почему вы так думаете? Насколько я помню стандарт, память под исключения выделяется особым образом. Вроде бы implementation defined.
Потому что в распространенных реализациях память для исключений гарантированно есть только под bad_alloc. Остальные объекты исключений размещаются в хипе. Что и делает возможным существование exception_ptr, который для исключений работает как умный указатель.
Соответственно, если у вас нет динамической аллокации, то и исключений, скорее всего, не будет.
Здравствуйте, Pzz, Вы писали:
Pzz>Кстати, аллокация на стеке тоже динамическая, стек тоже может кончиться. В отличии от кучи, при этом можно даже исключения не получить.
По правилам, рекурсивные вызовы разрешены только с подсчётом глубины вложенности и константным ограничением оной.
Здравствуйте, B0FEE664, Вы писали:
BFE>Так получается C с классами, а не C++.
Нет
CC>>Это всё решается на уровне библиотек и требований к стилистике кода. Функционал языка же остаётся.
BFE>Часть функционала оказывается неиспользуемой. Зачем, например, виртуальные функции, если нет динамически создаваемых объектов?
Например, фабрика, возвращающая указатели на статические синглтоны в зависимости
_>>Более того, я могу предположить, что не существует вообще ни одной программы, которая использовала бы вот прямо все все возможности C++. BFE>Да я не об этом. Я о том, что требования к коду написаны так, что почти ничего из С++ использовать нельзя.
Странно, а я в эмбеде использую практически всё. И даже думаю, что отказ от динамической памяти — это ошибка, и собираюсь её заюзать
Здравствуйте, B0FEE664, Вы писали:
BFE>>>У меня 46 позиция в рейтинге С/С++ на этом сайте, а вас только 191-ая. N>>Зато я С++ знаю, а ты — нет.
BFE>Я знаю С++ лучше вас.
Ну, судя по утверждениям в этой теме — это далеко не так
Здравствуйте, B0FEE664, Вы писали:
_>>Глупости какие. Я например периодически пишу код для МК и использую там на полную удобства C++17 (скоро уже на 20 буду переползать). При этом там естественно нет динамического выделения памяти в принципе.
BFE>Ну раз нет динамического выделения памяти, значит нет виртуальных функций, смарт указателей, контейнеров...
Выделенное есть.
Контейнеры и смарт указатели — да, их нет
Здравствуйте, Nikе, Вы писали:
BFE>>А зачем вам виртуальные функции если у вас есть целый объект? N>Их придумали, только чтобы тормозить выполнение в 100 раз, "Денис" не даст соврать!
Более того, я их использую именно для этого.
И да, кстати, была у нас задача — снизить скорость компиляции во много раз. Было тяжело, но мы справились
Здравствуйте, so5team, Вы писали:
S>Чем они строгие? Любой в v может записать все, что захочет.
Мы от чего защищаемся, от случайных ошибок, или от целенаправленного взлома?
От целенаправленного взлома защититься нельзя. Какой-нибудь индус поправит твои контракты, и получит премию за то, что "починил код, который не компилировался". А ты потом на выходные останешься, чинить свой старый код, который не работает с новыми контрактами, потому что не был на них рассчитан.
А, ну да, у вас в команде нет индусов. Будут, это вопрос времени.
S>Это в Pascal-е было за 30 лет до появления Go.
Ну во-первых, паскале не было. Во-вторых, все уже было в LISP, за 50 лет до появления всех прочих языков, не считая Фортрана. А в третьих, какая разница, где что и было?