-
- А что все так синтаксис С++ ругают? Там всего несколько вещей надо
знать: VladislavS.(1490 знак., 15.01.2022 12:23 - 15:24)
- Люди даже блудливый С-шный typedef, запомнить в котором порядок следования определения и определяемого я так и не смог, заменили на ясный и понятный using. Добавив ему ещё возможностей по пути, но то такое. - VladislavS.(15.01.2022 12:59)
- Вы не пробовали преподавать? Серьезно, у Вас, похоже, талант! - Evgeny_CD(15.01.2022 12:59)
- Не. Ну разве что на пенсии :) - VladislavS.(15.01.2022 13:00)
- А как далеко до нее? - Evgeny_CD(15.01.2022 13:55)
- В свете современных тенденций по увеличению пенсионного возраста,
скорее всего, величина стремящаяся в бесконечность. Далеко. - VladislavS.(15.01.2022 14:00)
- Плюсонуть хочется - Make_Pic(3 знак., 16.01.2022 14:42)
- В свете современных тенденций по увеличению пенсионного возраста,
скорее всего, величина стремящаяся в бесконечность. Далеко. - VladislavS.(15.01.2022 14:00)
- А как далеко до нее? - Evgeny_CD(15.01.2022 13:55)
- Не. Ну разве что на пенсии :) - VladislavS.(15.01.2022 13:00)
- И тем не менее. Cкpипaч(215 знак., 15.01.2022 12:44, ссылка)
- *У опытных программистов там еще type_cast намешано и квалификаторов. Смотрите, в C есть static, inline, const, volatile, extern. Что нам С++ добавляет? auto да constexpr (и его продолжение consteval и constinit). Из-за двух новых квалификаторов пропало понимание? VladislavS.(125 знак., 15.01.2022 13:26)
- Ну вложенный и что? Что поменяется если шаблон шаблона будет? Как
был тип в <> , а данные в () так и остались. Все те же
языковые конструкции, которые можно применять просто, а можно
сложно. VladislavS.(513 знак., 15.01.2022 12:51)
- В общем случае внутри <> написать можно очень много
всякого (и числа, и типы, и вложенную хрень), что желание убить
аффтара появляется. А ещё давайте вспомним всякие постфиксные
хвосты (в смысле в конце объявления) noexcept (с выражениями),
const. Ну, и в 20 стандарте using - это потенциальный блок ошибок,
как и auto. Это в 1000 раз хуже перегруженных функций/операторов и
полиморфизма в худшем применении. Любая опечатка или
невнимательность приведёт к семантическим Costic(652 знак., 15.01.2022 16:48)
- С дуру и хрен сломать можно :) А теперь опускаемся на землю и
смотрим на чём можно написать прошивку для микрокрнтроллера. ASM vs
C vs C++. Да так чтобы быстро написать и быстро работала. Вот то-то
же. - VladislavS.(15.01.2022 17:00)
- Так-то много на чем можно. Только если это будет что-то не из списка ASM, C, C++ и совета спросить не у кого будет и потом на другие МК наработки не перенести - аналогичной среды разработки может и не быть. - AlexG(15.01.2022 17:16)
- Джаваскрипт %) - Cкpипaч(15.01.2022 17:03)
- Всё верно, ничего кроме смехуёчков и не остаётся. - VladislavS.(15.01.2022 17:11)
- Ничего смешного не вижу. Определяющим является не язык, а наличие SDK, RAD и средств отладки. - Cкpипaч(15.01.2022 17:14)
- Всё верно, ничего кроме смехуёчков и не остаётся. - VladislavS.(15.01.2022 17:11)
- С дуру и хрен сломать можно :) А теперь опускаемся на землю и
смотрим на чём можно написать прошивку для микрокрнтроллера. ASM vs
C vs C++. Да так чтобы быстро написать и быстро работала. Вот то-то
же. - VladislavS.(15.01.2022 17:00)
- Ничего. Brainfuck - тоже язык. Его тоже можно понять (хоть и
трудно) - Cкpипaч(15.01.2022 13:03)
- Если он позволяет сделать что-то уникальное, чего не могут другие языки, то пусть будет. - VladislavS.(15.01.2022 13:13)
- В общем случае внутри <> написать можно очень много
всякого (и числа, и типы, и вложенную хрень), что желание убить
аффтара появляется. А ещё давайте вспомним всякие постфиксные
хвосты (в смысле в конце объявления) noexcept (с выражениями),
const. Ну, и в 20 стандарте using - это потенциальный блок ошибок,
как и auto. Это в 1000 раз хуже перегруженных функций/операторов и
полиморфизма в худшем применении. Любая опечатка или
невнимательность приведёт к семантическим Costic(652 знак., 15.01.2022 16:48)
- Там есть хороший функционал по инициализации полей структур и
битовых полей. Для МК проектов это полезно. - Costic(13.01.2022 12:08)
- Как раз хорошая статья на хабре про это, удобная штука. Но
сколько-же писанины для этого надо. Andreas(1 знак., 13.01.2022 13:21, ссылка)
- Вы должны понимать, что в статье вам показали около 20% кода. Там TypeList прячется в библиотеке. А его метод сортировки это суровый МЕТОД. - VladislavS.(13.01.2022 15:02)
- Спасибо! Шикарно - Evgeny_CD(13.01.2022 13:53)
- И все это только потому, что автор не знает как положить данные в
нужную область памяти. - AlexG(15.01.2022 05:58)
- Ну вы же опять ничего не поняли! Автор как раз знает как это
расположить в памяти, но сделал так, что этим будет занимается
компилятор. Он лишь в удобном для себя порядке определит сущности,
а компилятор их отсортирует, построит дерево, разместит во флэшь. - VladislavS.(15.01.2022 09:16)
- Сам он написал "Также к своему стыду признаюсь, что так и не понял,
можно ли статический массив разместить во Flash, а доступ к нему
получать в runtime?" AlexG(7 знак., 15.01.2022 12:08, ссылка)
- Ну ничего, с опытом придёт. - VladislavS.(15.01.2022 12:09)
- о const перед массивом статью на Хабр написать сложнее - AlexG(15.01.2022 12:15)
- Ну ничего, с опытом придёт. - VladislavS.(15.01.2022 12:09)
- возникает вопрос, а сколько там этих сущностей? если всего
десяток-другой - то смысл городить такой страшный код? а если их
тыща - они что, будут все в коде прописаны? ну, чтобы их компилятор
мог отсортировать. - Mahagam(15.01.2022 11:44)
- Да даже если меньше десятка, программист просто описывает сущности,
а компилятор делает с ними то что надо. Любая ручная работа это и
дополнительное время, и источник ошибок. А действия могут быть как
просто муторные, так и вычислительно сложные. Компилятор не устаёт
и не ошибается. - VladislavS.(15.01.2022 12:12)
- Никто не заставляет втаскивать исходные данные внутрь кода. Это
могут быть отдельные файлы (сюрприз, даже на однокристалках),
сформированные самописной приблудой, выявляющей (еще один сюрприз!)
ошибки в этих данных. - Cкpипaч(15.01.2022 15:34)
- Вы всё с ног на голову поставили. Не заставляют втаскивать внутрь,
зато заставляют вытаскивать наружу. Не могут быть отдельные файлы,
а должны быть отдельные файлы. Приблуду надо написать, сделать
чтобы она везде работала и таскать с кодом, иначе не взлетит. А
компилятор С++, в отличии от приблуды, работает везде. Ошибки в
данных проверяются и там, и там. Получается, законченный код,
который нужно просто скомпилировать, против какого-то конструктора,
который ещё надо VladislavS.(371 знак., 15.01.2022 15:59)
- Отвечать буду не на все пункты. Cкpипaч(1070 знак., 15.01.2022 16:13)
- 1) весь зоопарк того что вы перечислили можно выкинуть и не иметь
геморроя по его развёртыванию и поддержанию. Просто скомпилируйте
программу и она будет работать. VladislavS.(230 знак., 15.01.2022 16:19)
- 1) За поддержание "этого зоопарка" в работе нам платят больше трети
нашего годового бюджета 2) А какая разница? Можем намертво, можем
нет - совсем другие критерии влияют на наш выбор. Cкpипaч(110 знак., 15.01.2022 16:30)
- Я бы даже обобщил, не вижу смысла воообще плодить инструменты. - VladislavS.(15.01.2022 16:31)
- SQL-базу тоже макросами на этапе компиляции С++ инитить? Вы
экстримист :) - Cкpипaч(15.01.2022 16:36)
- Вы подменяете понятия. Данные это данные, программа это программа.
Делайте поправку на то, что я пишу об эмбедде. Схема устройства в
процессе работы поменяться не может. Это и будет одна инстанциация
шаблона. В другом устройстве она будет другая. - VladislavS.(15.01.2022 16:54)
- Согласен, SQL пока в эмбедде редкость. А направленные графы - отнюдь. - Cкpипaч(15.01.2022 16:57)
ТелевидениеПлюсы. Будут одни сплошные плюсы. SciFi(1 знак., 15.01.2022 16:40, картинка)
- Вы подменяете понятия. Данные это данные, программа это программа.
Делайте поправку на то, что я пишу об эмбедде. Схема устройства в
процессе работы поменяться не может. Это и будет одна инстанциация
шаблона. В другом устройстве она будет другая. - VladislavS.(15.01.2022 16:54)
- SQL-базу тоже макросами на этапе компиляции С++ инитить? Вы
экстримист :) - Cкpипaч(15.01.2022 16:36)
- Я бы даже обобщил, не вижу смысла воообще плодить инструменты. - VladislavS.(15.01.2022 16:31)
- 1) За поддержание "этого зоопарка" в работе нам платят больше трети
нашего годового бюджета 2) А какая разница? Можем намертво, можем
нет - совсем другие критерии влияют на наш выбор. Cкpипaч(110 знак., 15.01.2022 16:30)
- 1) весь зоопарк того что вы перечислили можно выкинуть и не иметь
геморроя по его развёртыванию и поддержанию. Просто скомпилируйте
программу и она будет работать. VladislavS.(230 знак., 15.01.2022 16:19)
- Отвечать буду не на все пункты. Cкpипaч(1070 знак., 15.01.2022 16:13)
- Вы всё с ног на голову поставили. Не заставляют втаскивать внутрь,
зато заставляют вытаскивать наружу. Не могут быть отдельные файлы,
а должны быть отдельные файлы. Приблуду надо написать, сделать
чтобы она везде работала и таскать с кодом, иначе не взлетит. А
компилятор С++, в отличии от приблуды, работает везде. Ошибки в
данных проверяются и там, и там. Получается, законченный код,
который нужно просто скомпилировать, против какого-то конструктора,
который ещё надо VladislavS.(371 знак., 15.01.2022 15:59)
- расписать все те шаблоны и классы - ручная работа и дополнительное
время. замечу - оплачиваемое. и источник ошибок. - Mahagam(15.01.2022 13:31)
- Да не демонизируйте вы шаблоны и тем белее классы. Написание класса
это даже проще, чем структуру тайпдефнуть - class MyClass { public:
}; Да по сути класс и структура это одно и то же. Шаблон появляется
не с бухты барахты, а когда понимаешь зачем он нужен. А если
понимаешь что он должен делать, то и написать его раз плюнуть. О
какой дополнительрой трате времени идёт речь вообще непонятно. Да в
любом случае, время на написание сложного библиотечного класса
потом с лихвой VladislavS.(29 знак., 15.01.2022 13:55)
- Оппонирую. Цитата: "время на написание сложного библиотечного
класса потом с лихвой отбивается в других проектах". Cкpипaч(297 знак., 15.01.2022 15:32)
- Не знаю, что у вас там постоянно отнимает время. По такой логике
библиотеки вообще не писать что-ли? У меня библиотеки всегда только
сокращают время. - VladislavS.(15.01.2022 16:10)
- Это потому что вы не сопровождаете системы.
Выстрелил и забыл. Любые крайности вредны. - Cкpипaч(15.01.2022 16:14)- На чём основано данное утверждение? Не помню, чтобы я вам показывал
свои разработки? - VladislavS.(15.01.2022 16:22)
- Вы упорно не говорите слово "сопровождение ПО". Только "написание".
Из этого вывод что сопровождение out of your scope of interest. Cкpипaч(60 знак., 15.01.2022 16:28)
- Я эмбеддер. Мне не надо обновлять ПО каждую неделю. Более того, заказчику вообще не понравится идея платить пожизненный гонорар за железку, которую он купил. А если она ещё и поставлена на вооружение, то там вообще табу. Я не слежу за судьбой всего разработанного мной железа, но держу всё в архиве и в любой момент могу найти и пересобрать любую прошивку. Хотя, при современной скорости смены элементной базы необходимость в этом чере 5-7 лет отпадает. - VladislavS.(15.01.2022 16:46)
- Вы упорно не говорите слово "сопровождение ПО". Только "написание".
Из этого вывод что сопровождение out of your scope of interest. Cкpипaч(60 знак., 15.01.2022 16:28)
- На чём основано данное утверждение? Не помню, чтобы я вам показывал
свои разработки? - VladislavS.(15.01.2022 16:22)
- Это потому что вы не сопровождаете системы.
- Не знаю, что у вас там постоянно отнимает время. По такой логике
библиотеки вообще не писать что-ли? У меня библиотеки всегда только
сокращают время. - VladislavS.(15.01.2022 16:10)
- Оппонирую. Цитата: "время на написание сложного библиотечного
класса потом с лихвой отбивается в других проектах". Cкpипaч(297 знак., 15.01.2022 15:32)
- Да не демонизируйте вы шаблоны и тем белее классы. Написание класса
это даже проще, чем структуру тайпдефнуть - class MyClass { public:
}; Да по сути класс и структура это одно и то же. Шаблон появляется
не с бухты барахты, а когда понимаешь зачем он нужен. А если
понимаешь что он должен делать, то и написать его раз плюнуть. О
какой дополнительрой трате времени идёт речь вообще непонятно. Да в
любом случае, время на написание сложного библиотечного класса
потом с лихвой VladislavS.(29 знак., 15.01.2022 13:55)
- Никто не заставляет втаскивать исходные данные внутрь кода. Это
могут быть отдельные файлы (сюрприз, даже на однокристалках),
сформированные самописной приблудой, выявляющей (еще один сюрприз!)
ошибки в этих данных. - Cкpипaч(15.01.2022 15:34)
- Да даже если меньше десятка, программист просто описывает сущности,
а компилятор делает с ними то что надо. Любая ручная работа это и
дополнительное время, и источник ошибок. А действия могут быть как
просто муторные, так и вычислительно сложные. Компилятор не устаёт
и не ошибается. - VladislavS.(15.01.2022 12:12)
- Сам он написал "Также к своему стыду признаюсь, что так и не понял,
можно ли статический массив разместить во Flash, а доступ к нему
получать в runtime?" AlexG(7 знак., 15.01.2022 12:08, ссылка)
- Ну вы же опять ничего не поняли! Автор как раз знает как это
расположить в памяти, но сделал так, что этим будет занимается
компилятор. Он лишь в удобном для себя порядке определит сущности,
а компилятор их отсортирует, построит дерево, разместит во флэшь. - VladislavS.(15.01.2022 09:16)
- Глянул его TypeList. Слабовато. Уже не Loki, но ещё не С++17. VladislavS.(367 знак., 13.01.2022 15:54)
- там пока один комментарий с хорошим вопросом. можете ответить? - Mahagam(13.01.2022 13:57)
- Я - не могу. Я туп в C++ - Evgeny_CD(13.01.2022 18:16)
- И все это только потому, что автор не знает как положить данные в
нужную область памяти. - AlexG(15.01.2022 05:58)
- Как раз хорошая статья на хабре про это, удобная штука. Но
сколько-же писанины для этого надо. Andreas(1 знак., 13.01.2022 13:21, ссылка)
- Кто первый начал? Классный наброс! - VladislavS.(12.01.2022 13:23)
- Это всё
придумал Черчилль в 18-м годуСтрауструп! Ату его! - SciFi(12.01.2022 13:28) - Google, подсунувший мне стартовую ссылку - Evgeny_CD(12.01.2022 13:27)
- Это всё
- Применяете? Я потихоньку начал VladislavS.(478 знак., 12.01.2022 07:32)
- brainfuck? - BlackPrapor(12.01.2022 09:14)
- Ещё пару лет назад делал все тоже самое + писал парсер на питоне для xml из cubeMX, чтобы автоматом генерить портянки со списком портов и gpio на них. Потом пришлось забить на это из-за дефицита - семейств контроллеров стало слишком много, под всё библиотек не напишешь. Сейчас дроблю программу на bsp и логику, библиотеки беру от вендора. Кривые, да, ну и хрен с ним. - evgeniy1294(12.01.2022 09:07)
- Вот смотрю я на это и возник такой вопрос - мне одному синтаксис
современного C++ кажется малопонятным и трудночитаемым? Кто
использует его альтернативы (Rust, Zig, D и т.п.) - их исходники
читать проще или это проблема всех современных языков из-за их
большого количества поддерживаемых фич? - arhiv6(12.01.2022 08:02)
- Синтаксис раста ещё более всрат. Остальное - что-то совсем маргинальное. - evgeniy1294(12.01.2022 09:08)
- Наоборот, современный cpp позволяет сильно проще писать и
соответственно читать сложные программы. Во времена Александреску
код, делающий меньшее, вообще нечитаем был. А непонимание вызвано
всего лишь незнанием языка. Это только кажется, что зная С можно
С++ понимать. Это другой язык, его надо изучить, чтобы понимать
написанное. - VladislavS.(12.01.2022 08:17)
- Знать надо C++ или его стандартную библиотеку? Или Вы не делаете
различий между ними? VVB(529 знак., 12.01.2022 08:46 - 12:11)
- В основном сам язык. Стандартную библиотеку тоже, желательно. Вот в
данном примере применено два шаблона из std. На них построена
работа функции. Но вся синтаксическая сложность как раз не в них. А
в вариативном шаблоне и вариатвной шаблонной лямбде, а это
синтаксис языка, а не стандартной библиотеки. Давайте я поясню что
там написано, а вы скажете насколько просто это на С будет
написать. VladislavS.(2277 знак., 12.01.2022 09:23 - 09:29)
- Спасибо.
Я в ужасе.Ждем появления отладчиков, позволяющих выполнять компиляцию в пошаговом режиме. Cкpипaч(447 знак., 14.01.2022 11:35 - 11:47)- С++ позволяет больше информации об объекте использовать на этапе
компиляции. Он позволяет, но не обязывает писать программы для
компилятора. Хочу показать простой пример, который можно запросто
реализовать на препроцессоре. VladislavS.(810 знак., 14.01.2022 22:27, ссылка)
- Ну и ржака-то в том, что шаблонное метапрограммирование C++ это как раз, не "знание об объекте в одном месте", а порой разбросано по файлу и даже ряду файлов. - RxTx(15.01.2022 00:38)
- Касаемо последней фразы - можно поспопорить. Напоминаю собравшимся
что термин "метапрограммирование" можно понимать как препроцессирование программ. Или что то же самое, программной манипуляцией фрагментами других
программ. (Если этим способен заниматься сам язык над собой же, то
это называется рефлексией). Представим, что препроцессированием,
оно же метапрограммированием занимается какой-то специально
созданный язык и соответственно, существует отдельная программа, RxTx(743 знак., 15.01.2022 00:22)
- Чтобы какая-то внешняя программа могла обработать код, тот в свою очередь должен быть соответствующим образом оформлен. Получается, что вы пишете код по правилам той самой внешней программы. Сейчас такая программа одна - компилятор С++ и правила для всех едины. Если таких программ и соответственно правил будет много, то о понимании написанного можно забыть. Сейчас, программа на С++ читается однозначно, именно так как написана. Крайние случаи, когда операторы VladislavS.(281 знак., 15.01.2022 09:01)
- Слово "инкаплулировано" означает "спрятано"? :) - Cкpипaч(14.01.2022 22:45)
- Да. Это первый из трёх принципов ООП. Инкапсуляция - добро,
наследование - так сяк, полиморфизм - зло. - VladislavS.(14.01.2022 22:54)
- То что вы утверждаете выше называется "principle of locality" в инженерии вообще, к ООП инкапсуляции это не имеет отношения. - RxTx(15.01.2022 00:40)
- Современное программирование - паттерны. Cкpипaч(130 знак., 14.01.2022 23:00)
- Одно из значений слова pattern - шаблон :)))) - VladislavS.(14.01.2022 23:08)
- ...и среди них нет слова "метафора". Английский язык он такой :) - Cкpипaч(14.01.2022 23:27)
- Одно из значений слова pattern - шаблон :)))) - VladislavS.(14.01.2022 23:08)
- Да. Это первый из трёх принципов ООП. Инкапсуляция - добро,
наследование - так сяк, полиморфизм - зло. - VladislavS.(14.01.2022 22:54)
- На меня давит опыт разработки на Модула-2. Без метапрограммирования. Cкpипaч(237 знак., 14.01.2022 22:42)
- Не подсказывайте им ответы. Так они и make тоже запихнут внутрь
плюсов. Это чорная дыра, которая может только разрастаться и
поглощать всё вокруг себя. - SciFi(14.01.2022 11:37)
- Повторюсь о фейковом(?) интервью
СтолманаСтраструпа. Все было уже давно сказано, не услышавшие тогда, не услышат и сейчас :) - Cкpипaч(14.01.2022 11:41 - 11:59)- Мы все поняли, кого именно вы имели в виду. Но вообще да, этот перформанс затянулся :-) - SciFi(14.01.2022 11:44)
- Повторюсь о фейковом(?) интервью
- С++ позволяет больше информации об объекте использовать на этапе
компиляции. Он позволяет, но не обязывает писать программы для
компилятора. Хочу показать простой пример, который можно запросто
реализовать на препроцессоре. VladislavS.(810 знак., 14.01.2022 22:27, ссылка)
- Спасибо за терпение к столь разношерстному сообществу, как наше. Почерпнул много нового из Ваших ответов! - VVB(14.01.2022 11:13)
- Сторонний человек может подумать о шизофрении. Извините. Как минимум оверинжиниринг. Если я правильно понял задачу, то для её решения напрашивается std::map. А на С можно сделать всё, как и на асме, это чисто в теории. А на практике - через массив пинов. - Costic(12.01.2022 11:43)
- У меня напрашивается только один комментарий-вопль: "ДЕРЖИТЕ
НАРКОМАНА!" symbions(304 знак., 12.01.2022 10:48)
- Как уже сказали, размер шаблона никак не связан с размером
результирующего кода. Он может вычисляться в несколько констант и
наоборот сокращать выхлоп. Это будет работать даже на тиньке. - VladislavS.(12.01.2022 10:58)
- Это я понял, но у меня программа как ваши 2 шаблона - зачем мне
писать шаблон + его применение + остальную программу, если я могу
сразу написать как надо? Соотношение писанины как минимум 3 к 2 - symbions(12.01.2022 13:54)
- Один NOP проще без шаблонов написать, а десяток проще уже с
шаблоном. - VladislavS.(12.01.2022 14:16)
- Вот так VladislavS.(130 знак., 12.01.2022 14:49)
- А мне этот код понравился... До того момента, как я подумал
вставить задержку для мигания светодиодом, например,
Nops<1000000>(); это ж у меня прошивка сразу +1МБ. :-) - Costic(13.01.2022 11:58)
- 1 Мб это вы ещё легко отделались, NOP то он и больше 1 байта бывает. С дуру то и хрен сломать можно. - VladislavS.(13.01.2022 12:35)
- интересный случай... развернуть рекурсию в "длинну". др. словами если не ведаешь как реализована та или иная "вещь в библиотеке" можно попасть на такую хрень... Ну это "допустимо" на винче в 20ТБ и озу в 1 ТБ и 53 ядерном проце. - Zoro(13.01.2022 12:20)
- а так читабельнее: Mahagam(157 знак., 12.01.2022 23:46)
- Куда я попал.... :( Сами посмотрите как этот макрос будет работать
в таком месте? VladislavS.(1340 знак., 13.01.2022 00:07)
- Давайте посмотрим на это с другой стороны. Например, исходное
состояние, вы пишете какую-то программу и вам там понадобилось
поставить 100 ноп-ов. Ни каких макросов или шаблонов у вас еще нет.
Какие варианты? AlexBi(1582 знак., 13.01.2022 09:11)
- Специализацию для NonsensePost<"шаблон", "AlexBi">() вы только что сделали. Но ведь можно легко подставить туда же "макрос", "функция" и т.д. VladislavS.(65 знак., 13.01.2022 09:30)
- в 99% случаев все подобные примеры - выдуманы. на практике вместо
написания шаблона я в удобном текстовом редакторе вызов функции раз
10 размножу. ибо мне этот шаблон хрен где в другом месте
пригодится. - Mahagam(13.01.2022 00:23)
- А что такое? Не выходит
каменный цветокмакрос? А как люто плюсовал то. - VladislavS.(13.01.2022 00:32)- суть не в том, что на макросах сложно сделать 73 повторения, или
повторять любую функцию с любыми параметрами. а в том, что для
множества частных случаев простые макросы Си - вполне себе простое
и удобное решение. неуниверсальное, да. местами приводящее к
ошибкам. но чаще всего - рабочее. оно выглядит читабельнее чем
плюсы. почему-то - Mahagam(13.01.2022 01:34)
- Неуневирсально, не раборает, зато понятно почему. Зашибись! А что
лично вы сделали чтобы понимать написанное на С++? Может книжку
какую прочитали? - VladislavS.(13.01.2022 07:29)
- а с чего понимабельность плюсов падает с каждым стандартом? - Mahagam(13.01.2022 12:35)
- На самом деле с точностью до наоборот. В современных стандартах код пишется проще и более читаем. VladislavS.(631 знак., 13.01.2022 13:02)
- Как я всё больше убеждаюсь - универсальность зло. - symbions(13.01.2022 08:46)
- а с чего понимабельность плюсов падает с каждым стандартом? - Mahagam(13.01.2022 12:35)
- Неуневирсально, не раборает, зато понятно почему. Зашибись! А что
лично вы сделали чтобы понимать написанное на С++? Может книжку
какую прочитали? - VladislavS.(13.01.2022 07:29)
- Подмена цели detected. - Cкpипaч(13.01.2022 00:41)
- суть не в том, что на макросах сложно сделать 73 повторения, или
повторять любую функцию с любыми параметрами. а в том, что для
множества частных случаев простые макросы Си - вполне себе простое
и удобное решение. неуниверсальное, да. местами приводящее к
ошибкам. но чаще всего - рабочее. оно выглядит читабельнее чем
плюсы. почему-то - Mahagam(13.01.2022 01:34)
- А что такое? Не выходит
- Давайте посмотрим на это с другой стороны. Например, исходное
состояние, вы пишете какую-то программу и вам там понадобилось
поставить 100 ноп-ов. Ни каких макросов или шаблонов у вас еще нет.
Какие варианты? AlexBi(1582 знак., 13.01.2022 09:11)
- ; самым правым символом в ряду а не хватает - Evgeny_CD(12.01.2022 23:56)
- о. уже скомпилировал ) - Mahagam(13.01.2022 00:05)
- Куда я попал.... :( Сами посмотрите как этот макрос будет работать
в таком месте? VladislavS.(1340 знак., 13.01.2022 00:07)
- Такое да, понятно зачем symbions(135 знак., 12.01.2022 16:15)
- А мне этот код понравился... До того момента, как я подумал
вставить задержку для мигания светодиодом, например,
Nops<1000000>(); это ж у меня прошивка сразу +1МБ. :-) - Costic(13.01.2022 11:58)
- Вот так VladislavS.(130 знак., 12.01.2022 14:49)
- Один NOP проще без шаблонов написать, а десяток проще уже с
шаблоном. - VladislavS.(12.01.2022 14:16)
- Это я понял, но у меня программа как ваши 2 шаблона - зачем мне
писать шаблон + его применение + остальную программу, если я могу
сразу написать как надо? Соотношение писанины как минимум 3 к 2 - symbions(12.01.2022 13:54)
- аттини надо программить в хексе, как полагается настоящим мущщинам! - SciFi(12.01.2022 10:52)
- Размер шаблона никак не связан с размером кода. Шаблоны мощная
штука, понять их сильно не просто. Я вот не шибко силен в
понимании. - Evgeny_CD(12.01.2022 10:51)
- Я объясню. RxTx(4409 знак., 14.01.2022 22:16 - 22:45)
- Верно лишь отчасти. Когда земля была ещё чуть тёплой, программисты
заметили, что автоматическим выведением типов с помощью шаблонов
можно управлять. Так же, можно управлять ходом компиляции с помощью
технологии SFINAE. Вместе они (template + SFINAE) начали порождать
монстров типа Loki. Но сапиенс на то и хомо, что решил с этим
бороться. В языке появились средства вычислений на этапе компиляции
без шаблонов. Заодно они фактически заменили препроцессор на более
качественном VladislavS.(813 знак., 14.01.2022 22:57, ссылка, ссылка)
- Все что было написано выше - совершенно намеренный опуск/упрощение
деталей. Не стоит заниматься уточнением того что изначально должно
быть простым. © "Если учёный не может объяснить восьмилетнему
мальчику чем он занимается - он шарлатан" (Колыбель для кошки). - RxTx(14.01.2022 23:10)
- Почитают они это наши мальчики, подумают "всё это только чтобы
#ifdef не писать?" и пойдут питон осваивать. - VladislavS.(14.01.2022 23:22)
- Разумеется, кое-что нужно добавить, но уже потом. После того как
возникнет отчётливое представление что это такое в точности. Основной задачей было передать — "C++ templates" есть метод препроцессирования программы, очень развитый препроцессор. Добавить потом можно многое,
например что при разворачивании кода есть (косвенные) способы
инспектировать подставляемые типы на предмет наличия свойств, а это
ни что иное как вид рефлексии, т.е. само-исследования RxTx(116 знак., 14.01.2022 23:53)
- Да легко! Что вы все на шаблонах зациклены? Это лишь один из инструментов. Плюсы начинаются с классов. И у меня шокирующая новость для С-программистов. Они всё это время используют в коде классы! В С++ class и struct это по сути одно и то же, за исключением мелкого нюанса. Добавляете в struct-уру функции и можете смело называть их методами, а себя кулхацкерами :) - VladislavS.(15.01.2022 09:10)
- Разумеется, кое-что нужно добавить, но уже потом. После того как
возникнет отчётливое представление что это такое в точности. Основной задачей было передать — "C++ templates" есть метод препроцессирования программы, очень развитый препроцессор. Добавить потом можно многое,
например что при разворачивании кода есть (косвенные) способы
инспектировать подставляемые типы на предмет наличия свойств, а это
ни что иное как вид рефлексии, т.е. само-исследования RxTx(116 знак., 14.01.2022 23:53)
- "Не сыпь мне соль на рану" Я три дня убил на функцию описание
которой занимало пол страницы печатного текста! Когда разобрался
сформулировал в одно предложение "Отсчет долен стартовать только
при положении селектора АКПП в паркинге и не нажатой педали
тормоза" Убил бы песателей !!! - Aleksey_75(14.01.2022 23:18)
- Знакомо :) - RxTx(14.01.2022 23:22)
- Почитают они это наши мальчики, подумают "всё это только чтобы
#ifdef не писать?" и пойдут питон осваивать. - VladislavS.(14.01.2022 23:22)
- Все что было написано выше - совершенно намеренный опуск/упрощение
деталей. Не стоит заниматься уточнением того что изначально должно
быть простым. © "Если учёный не может объяснить восьмилетнему
мальчику чем он занимается - он шарлатан" (Колыбель для кошки). - RxTx(14.01.2022 23:10)
- Страуструп Дизайн и Эволюция C++.djvu Довольно малоизвестная книга, проливающая свет на происходяшее. RxTx(1 знак., 14.01.2022 22:21, ссылка)
- Верно лишь отчасти. Когда земля была ещё чуть тёплой, программисты
заметили, что автоматическим выведением типов с помощью шаблонов
можно управлять. Так же, можно управлять ходом компиляции с помощью
технологии SFINAE. Вместе они (template + SFINAE) начали порождать
монстров типа Loki. Но сапиенс на то и хомо, что решил с этим
бороться. В языке появились средства вычислений на этапе компиляции
без шаблонов. Заодно они фактически заменили препроцессор на более
качественном VladislavS.(813 знак., 14.01.2022 22:57, ссылка, ссылка)
- Я объясню. RxTx(4409 знак., 14.01.2022 22:16 - 22:45)
- Как уже сказали, размер шаблона никак не связан с размером
результирующего кода. Он может вычисляться в несколько констант и
наоборот сокращать выхлоп. Это будет работать даже на тиньке. - VladislavS.(12.01.2022 10:58)
- Вопрос, который уменя в голове не укладывается - как подобное
тестировать? - Evgeny_CD(12.01.2022 10:08)
- Во-первых, static_assert. VladislavS.(456 знак., 12.01.2022 10:21)
- Какие инструменты модульного тестирования (на ПК) можно
использовать для вариативного шаблона, вариативной шаблонной лямбде
и прочих прелестей С++20? VVB(98 знак., 14.01.2022 11:27)
- Любую систему тестирования. Разницы никакой, поскольку тестируется
конечный выполняемый бинарный код полученный из шаблона. Сами по
себе шаблоны смысла тестировать нет. RxTx(443 знак., 15.01.2022 00:54)
- Э не... В шаблоне могут быть алгоритмы работы с типами, влияющими на результат инстанцирования. Эти алгоритмы тоже надо как-то проверять. Сейчас это делается руками. Проверка инстанцированного кода это уже прикладная задача. Но ведь библиотечный код, состоящий из шаблонных классов, тоже надо проверять. VladislavS.(492 знак., 15.01.2022 08:26)
- Попробую показать как можно тестировать работу метапрограмм. VladislavS.(2421 знак., 14.01.2022 20:29)
- Я для ПК почти не пишу, так что и без шаблонных лямбд затрудняюсь ответить на этот вопрос. Из общих соображений. Любая программа в конце концов принимает на вход реальные данные и на выходе что-то производит. Вот и нужно найти такое сечение где ещё/уже нет шаблонов. В эмбедде я пользуюсь выводом отладочной информации, осциллографом и логическим анализатором, заглядываю отладчиком в регистры. Просто листинги смотрю. Это всё не зависит от того есть там лямбды или нет. - VladislavS.(14.01.2022 18:33)
- Любую систему тестирования. Разницы никакой, поскольку тестируется
конечный выполняемый бинарный код полученный из шаблона. Сами по
себе шаблоны смысла тестировать нет. RxTx(443 знак., 15.01.2022 00:54)
- Тестировать глазками асмовый код - это спираль развития зашла на новый виток. Так было где-то на заре развития компиляторов. - Evgeny_CD(12.01.2022 10:49)
- Это уже было. "Оно скомпилировалось? Да, босс. Оно запустилось? Да, босс. Оно показало заставку? Да, босс! Так почему мы еще не продаем его?!" Из анекдотов про Билла нашего Гейтса. - Evgeny_CD(12.01.2022 10:46)
- 1) Смысл тестирования в том, чтобы загнать на вход всё возможные
значения и во всех случаях получить корректный результат.
Тестирование должно быть автоматизированным, тест пишется один раз.
В случае шаблонного кода это сложно или невозможно реализовать. evgeniy1294(334 знак., 12.01.2022 10:31)
- Код сам себя постоянно тестирует. Сейчас в ход концепты пошли. Вы
параметры шаблонов так можете обложить, что ни одна муха не
проскочит. Отсутствие повторений при каждой компиляции проверяется
автоматом. VladislavS.(682 знак., 12.01.2022 10:51)
- Всё это в своё время я уже делал. Допустить ошибку в какой-нибудь
проверочной лямбде довольно легко, так что код безопасней не
становится. Вы можете сказать, что ошибки будут выловлены,
когда-нибудь, но производитель уже сделал это за вас. evgeniy1294(1 знак., 12.01.2022 11:03, ссылка)
- В таком виде это не сильно отличается от того что можно сделать
макросами в С. Ну, разве что, более строгая проверка типов.
Например, метод Toggle. VladislavS.(1508 знак., 12.01.2022 11:35)
- * В таком виде это не сильно отличается от того что можно сделать
макросами в С. evgeniy1294(783 знак., 12.01.2022 12:19)
- Зачем вы делаете выводы о моём коде по паре функций из библиотеки? То что пишется эвридэй сильно проще. :) VladislavS.(1057 знак., 12.01.2022 13:15)
- У вас глагол is отсутствует в static_assert. This gpio IS not... А
по коду ппц неаккуратно с указателями. И constexpr любимый вами
загромождает код. Думаю, и без этого компилятор умеет
оптимизировать. 0xFFFF надо заменить на какой-нибудь const или
#define (шучу). - Costic(12.01.2022 11:59)
- IS отсутствует в моём коде. Ну да и хрен с ним, я эту либину забросил. - evgeniy1294(12.01.2022 12:22)
- * В таком виде это не сильно отличается от того что можно сделать
макросами в С. evgeniy1294(783 знак., 12.01.2022 12:19)
- В таком виде это не сильно отличается от того что можно сделать
макросами в С. Ну, разве что, более строгая проверка типов.
Например, метод Toggle. VladislavS.(1508 знак., 12.01.2022 11:35)
- Всё это в своё время я уже делал. Допустить ошибку в какой-нибудь
проверочной лямбде довольно легко, так что код безопасней не
становится. Вы можете сказать, что ошибки будут выловлены,
когда-нибудь, но производитель уже сделал это за вас. evgeniy1294(1 знак., 12.01.2022 11:03, ссылка)
- Код сам себя постоянно тестирует. Сейчас в ход концепты пошли. Вы
параметры шаблонов так можете обложить, что ни одна муха не
проскочит. Отсутствие повторений при каждой компиляции проверяется
автоматом. VladislavS.(682 знак., 12.01.2022 10:51)
- Какие инструменты модульного тестирования (на ПК) можно
использовать для вариативного шаблона, вариативной шаблонной лямбде
и прочих прелестей С++20? VVB(98 знак., 14.01.2022 11:27)
- Никак. Дополнительно возникает проблема с множественной
вложенностью шаблонов и наследовании типов - мне удалось получить
невалидную прошивку несмотря на отсутствие ошибок и предупреждений
от компилятора (gcc). Проблема была именно по вложенности шаблонов,
так как меняя её я получал разный результат. - evgeniy1294(12.01.2022 10:15)
- Сейчас всё больше и больше можно делать просто в constexpr
контексте. Конечно, вообще без шаблонов никуда. Но если вспомнить
Loki, где вложенность шаблонов и рекурсивность были беспредельны,
то сейчас это просто вариадики и constexpr, а вложенность шаблонов
невысока. - VladislavS.(12.01.2022 10:29)
- Однако Loki в итоге забросили. Каменты там интересные. Evgeny_CD(1 знак., 12.01.2022 12:56, ссылка)
- Loki забросили, так как с приходом новых стандартов она стала неактуальна. Сейчас это пишется сильно проще и с большим функционалом. - VladislavS.(12.01.2022 13:21)
- Получал невалидное поведение при вложенности 5-7, чего легко достичь при наличии сложных статических проверок и наследовании шаблонных параметров. - evgeniy1294(12.01.2022 10:36)
- Однако Loki в итоге забросили. Каменты там интересные. Evgeny_CD(1 знак., 12.01.2022 12:56, ссылка)
- Сейчас всё больше и больше можно делать просто в constexpr
контексте. Конечно, вообще без шаблонов никуда. Но если вспомнить
Loki, где вложенность шаблонов и рекурсивность были беспредельны,
то сейчас это просто вариадики и constexpr, а вложенность шаблонов
невысока. - VladislavS.(12.01.2022 10:29)
- Во-первых, static_assert. VladislavS.(456 знак., 12.01.2022 10:21)
- В embedded у меня с метапрограммированием не сложилось. VVB(663 знак., 12.01.2022 09:36)
- Сложные вещи пишутся один раз и прячутся в библиотеки. Интерфейс у
них простой, использовать который даже проще, чем на обычном С
писать. - VladislavS.(12.01.2022 09:42)
- Если окажется что и используются они один раз, то возникает вопрос:
почему бы не написать сразу то, во что разворачивается этот шаблон,
вместо написания шаблона? AlexBi(124 знак., 12.01.2022 11:39)
- Во-первых, вы убиваете основное предназначение шаблона - писать код
один раз для разных типов. VladislavS.(374 знак., 12.01.2022 13:00)
- Серьёзно хочу спросить - для каких "разных типов" у вас код с
пинами написан? У евгения1294 и @ламерка тоже шаблоны для пинов
используются. Ну, не могу я осознать шаблон для пинов. Контейнеры -
это понятно, max/min, но пины?... Обычно они в SDK на чип
прописаны. Проверку пинов через assert делают, причём в том же SDK. - Costic(12.01.2022 14:49)
- У меня написаны классы для GPIO-портов старых STM32 типа F1, новых
STM32, Миландра MDR1986, Cамописного порта для Microblaze,
Dummy-порта (виртуального). VladislavS.(3532 знак., 12.01.2022 16:04)
- Извините, но ответ меня не удовлетворяет. Я интересовался про
"разные типы". Имелись ввиду типы данных, а вы мне про разные
контроллеры. Т.е. у вас шаблон имеет единственное применение - к
Пину. Опровергните? Costic(276 знак., 12.01.2022 16:25)
- Я не понимаю вопрос. Класс принимает на вход GPIO-порты разных
типов (разных контроллеров, реальные, виртуальные). Почему он
должен принимать что-то другое? Он для этого предназначен. Сам же
он агрегируя другие порты ведёт себя как порт. Его можно передавать
в другие классы дальше точно так же как порты и пины. VladislavS.(111 знак., 12.01.2022 17:05)
- Например, шаблоны min и max принимают любые объекты, для которых определён оператор сравнения. Любые, а не
только int, uint16_t. У вас только 1 (единственный) тип - порт/пин. - Costic(13.01.2022 12:04)
- Вы глубоко заблуждаетесь. Каждый пин это ДРУГОЙ ТИП, каждый порт
это ДРУГОЙ ТИП, каждый список пинов это ДРУГОЙ тип. Даже один и тот
же пин с разным режимом работы это ДРУГОЙ ТИП, не говоря уже об их
комбинациях. VladislavS.(319 знак., 13.01.2022 13:26 - 15:26, картинка)
- А нужно это, что-бы не хранить в полях служебную информацию -
адрес, номер бита и пр., а извлекать всё непосредственно из типа, я
правильно понимаю? - =AlexD=(13.01.2022 14:07)
- Совершенно верно. Все свойства объекта (порт, пин, режим)
"хранятся" в его типе. Сам объект не будет занимать память, даже
если я создам его. И он умеет выполнять действия, присущие этому
типу (или объекту). VladislavS.(464 знак., 13.01.2022 15:19)
- Т.е. вы используете шаблоны как (супер-)препроцессор, для генерации
и проверки кода статического во время компиляции. Тут кто-то свой
пример кольцевого буфера на препроцессоре с "##"-директивами кидал.
Суть, примерно та же, но за много лет такая генерация кода не очень
распространена. Впрочем, я благодарен вам за ответы и дискуссию. - Costic(13.01.2022 16:53)
- Я бы не называл это генерацией кода. Это скорее сочетание двух вещей: VladislavS.(1564 знак., 14.01.2022 08:16)
- Не, создание объекта по любому резервирует минимум 1 байт памяти,
потому что у объекта должен быть уникальный адрес. - =AlexD=(13.01.2022 16:46)
- Объект пустой, адрес его я не использую. Оптимизатор его чики-чики. VladislavS.(235 знак., 13.01.2022 17:07)
- если я правильно понял: экземпляр объекта "размазывается по
исполняемому коду" столько раз сколько упоминается (типо inline). В
обычных Си экземпляр объекта занимает память "один раз", а его
функции вызываются столько раз сколько надо. - Zoro(13.01.2022 17:17)
- У этих объектов нечем занимать память, переменных членов класса в них нет. Статические методы вырождаются в обычные функции, которые обладают свойством хорошо инлайниться, так как определены в описании класса. Точно так же как и в С они могут быть один один раз в коде и вызываться из разных мест. Это уже на усмотрение оптимизатора. На самом деле, нет никакой необходимости вообще создавать эти объекты. Это я пример просто для понимания сути происходящего привёл. Намного VladislavS.(288 знак., 13.01.2022 17:57)
- если я правильно понял: экземпляр объекта "размазывается по
исполняемому коду" столько раз сколько упоминается (типо inline). В
обычных Си экземпляр объекта занимает память "один раз", а его
функции вызываются столько раз сколько надо. - Zoro(13.01.2022 17:17)
- Объект пустой, адрес его я не использую. Оптимизатор его чики-чики. VladislavS.(235 знак., 13.01.2022 17:07)
- Вот это я понимаю, вот с этого и надо было начинать агитировать :) symbions(83 знак., 13.01.2022 15:38)
- С литературой сложно. Применительно к эмбедду вообще всё по нулям.
Я начинал с Г.Шилдта, но он уж очень устарел. Если только совсем
никаких знаний по С++ нет, то можно по нему основы изучить. Но
потом С++17 и С++20 придётся самостоятельно подтягивать. Сейчас
много докладов с разных тематических конференций на тытрубе
выкладывают, особенно после выхода новых стандартов. Попадаются
очень интересные. Но это надо увлекаться этим, иначе тяжело. - VladislavS.(13.01.2022 16:14)
- Вот Евгений список выложил symbions(35 знак., 13.01.2022 20:16, ссылка)
- Нет литературы - тогда не взлетит - 3m(13.01.2022 16:53)
- С литературой сложно. Применительно к эмбедду вообще всё по нулям.
Я начинал с Г.Шилдта, но он уж очень устарел. Если только совсем
никаких знаний по С++ нет, то можно по нему основы изучить. Но
потом С++17 и С++20 придётся самостоятельно подтягивать. Сейчас
много докладов с разных тематических конференций на тытрубе
выкладывают, особенно после выхода новых стандартов. Попадаются
очень интересные. Но это надо увлекаться этим, иначе тяжело. - VladislavS.(13.01.2022 16:14)
- Т.е. вы используете шаблоны как (супер-)препроцессор, для генерации
и проверки кода статического во время компиляции. Тут кто-то свой
пример кольцевого буфера на препроцессоре с "##"-директивами кидал.
Суть, примерно та же, но за много лет такая генерация кода не очень
распространена. Впрочем, я благодарен вам за ответы и дискуссию. - Costic(13.01.2022 16:53)
- Совершенно верно. Все свойства объекта (порт, пин, режим)
"хранятся" в его типе. Сам объект не будет занимать память, даже
если я создам его. И он умеет выполнять действия, присущие этому
типу (или объекту). VladislavS.(464 знак., 13.01.2022 15:19)
- А нужно это, что-бы не хранить в полях служебную информацию -
адрес, номер бита и пр., а извлекать всё непосредственно из типа, я
правильно понимаю? - =AlexD=(13.01.2022 14:07)
- Вы глубоко заблуждаетесь. Каждый пин это ДРУГОЙ ТИП, каждый порт
это ДРУГОЙ ТИП, каждый список пинов это ДРУГОЙ тип. Даже один и тот
же пин с разным режимом работы это ДРУГОЙ ТИП, не говоря уже об их
комбинациях. VladislavS.(319 знак., 13.01.2022 13:26 - 15:26, картинка)
- Например, шаблоны min и max принимают любые объекты, для которых определён оператор сравнения. Любые, а не
только int, uint16_t. У вас только 1 (единственный) тип - порт/пин. - Costic(13.01.2022 12:04)
- Я не понимаю вопрос. Класс принимает на вход GPIO-порты разных
типов (разных контроллеров, реальные, виртуальные). Почему он
должен принимать что-то другое? Он для этого предназначен. Сам же
он агрегируя другие порты ведёт себя как порт. Его можно передавать
в другие классы дальше точно так же как порты и пины. VladislavS.(111 знак., 12.01.2022 17:05)
- Извините, но ответ меня не удовлетворяет. Я интересовался про
"разные типы". Имелись ввиду типы данных, а вы мне про разные
контроллеры. Т.е. у вас шаблон имеет единственное применение - к
Пину. Опровергните? Costic(276 знак., 12.01.2022 16:25)
- У меня написаны классы для GPIO-портов старых STM32 типа F1, новых
STM32, Миландра MDR1986, Cамописного порта для Microblaze,
Dummy-порта (виртуального). VladislavS.(3532 знак., 12.01.2022 16:04)
- Серьёзно хочу спросить - для каких "разных типов" у вас код с
пинами написан? У евгения1294 и @ламерка тоже шаблоны для пинов
используются. Ну, не могу я осознать шаблон для пинов. Контейнеры -
это понятно, max/min, но пины?... Обычно они в SDK на чип
прописаны. Проверку пинов через assert делают, причём в том же SDK. - Costic(12.01.2022 14:49)
- Иначе все забудут благородное искусство фехтования! :-) SciFi(1 знак., 12.01.2022 11:42, картинка)
- Во-первых, вы убиваете основное предназначение шаблона - писать код
один раз для разных типов. VladislavS.(374 знак., 12.01.2022 13:00)
- Может и один раз, но для каждого IP-ядра. - evgeniy1294(12.01.2022 10:02)
- Если окажется что и используются они один раз, то возникает вопрос:
почему бы не написать сразу то, во что разворачивается этот шаблон,
вместо написания шаблона? AlexBi(124 знак., 12.01.2022 11:39)
- Сложные вещи пишутся один раз и прячутся в библиотеки. Интерфейс у
них простой, использовать который даже проще, чем на обычном С
писать. - VladislavS.(12.01.2022 09:42)
- Это всё замечательно, но я так и не понял, как и для чего этот
шаблон использовать. - =AlexD=(12.01.2022 09:29)
- А я и не объяснял для чего его использовать. :) Это часть большого
класса. Показал чтобы те кто в теме увидели С++20 фишки в действии.
Считайте это набросом на вентилятор :) - VladislavS.(12.01.2022 09:35)
- В общем всё как обычно сводится к получению некоего синтаксического
сахара используя мета возможности самого языка, что приводит к
нечитаемым монструозным либам, которые всего лишь убирают немножко
рутины из кода, на порядки увеличивая время компиляции. =AlexD=(172 знак., 12.01.2022 09:46)
- Кстати, про рутину. Кто-нибудь предлагал внедрить в язык Си
интерпретатор того же Си на этапе компиляции? Чтобы уйти от
зубодробительных макросов и использовать вычисленные значения в
качестве констант и т.д.? - SciFi(12.01.2022 10:22)
- ну типа constexpr С++ для что-то типа того, можно поэкспериментировать, всяко лучше шаблонной магии - =AlexD=(12.01.2022 10:40)
- Вот это одна из причин, почему поглядываю, как Zig развивается. Там есть выполнение кода во время компиляции. Не думаю, что в Си такое когда-нибудь появится. - arhiv6(12.01.2022 10:36)
- Он изобрёл С++ :))) VladislavS.(2184 знак., 12.01.2022 10:35)
- Вот, как раз зрите в корень. Убирание рутины из кода сильно
сокращает время работы программиста, но увеличивает время полной
компиляции для embedded с 10 до 30 секунд. Что дороже? И часто ли
вы полную пересборку делаете? VladislavS.(91 знак., 12.01.2022 10:10)
- Ну не знаю, сокращает ли. =AlexD=(459 знак., 12.01.2022 10:36)
- Не надо читать нечитаемую либу. Читайте её открытый интерфейс, он
обычно простой, иначе не стоит даже затеваться. - VladislavS.(12.01.2022 10:54)
- Смотреть нужно. Кто-то кроме вас должен понимать код библиотеки, потому как вы можете в любой момент поменять место работы. - evgeniy1294(12.01.2022 11:15)
- Читать приходится начинать, когда компилятор показывает ошибку
кудато унутрь. Врятли ты сможешь предсказать все методы
использования либы. А использовать тривиально - чем это лучше Си
макроса? - =AlexD=(12.01.2022 11:05)
- Тем что С-макрос работает с текстом, а шаблон с типами. - evgeniy1294(12.01.2022 11:16)
- Если шаблон используется тривиально (примерно как вызов функции), то это не существенное отличие. - =AlexD=(12.01.2022 11:29)
- Тем что С-макрос работает с текстом, а шаблон с типами. - evgeniy1294(12.01.2022 11:16)
- Не надо читать нечитаемую либу. Читайте её открытый интерфейс, он
обычно простой, иначе не стоит даже затеваться. - VladislavS.(12.01.2022 10:54)
- Ну не знаю, сокращает ли. =AlexD=(459 знак., 12.01.2022 10:36)
- Кстати, про рутину. Кто-нибудь предлагал внедрить в язык Си
интерпретатор того же Си на этапе компиляции? Чтобы уйти от
зубодробительных макросов и использовать вычисленные значения в
качестве констант и т.д.? - SciFi(12.01.2022 10:22)
- Есть подозрение, что это кусок шаблона для настройки порта. - evgeniy1294(12.01.2022 09:42)
- В общем всё как обычно сводится к получению некоего синтаксического
сахара используя мета возможности самого языка, что приводит к
нечитаемым монструозным либам, которые всего лишь убирают немножко
рутины из кода, на порядки увеличивая время компиляции. =AlexD=(172 знак., 12.01.2022 09:46)
- А я и не объяснял для чего его использовать. :) Это часть большого
класса. Показал чтобы те кто в теме увидели С++20 фишки в действии.
Считайте это набросом на вентилятор :) - VladislavS.(12.01.2022 09:35)
- Спасибо.
- В основном сам язык. Стандартную библиотеку тоже, желательно. Вот в
данном примере применено два шаблона из std. На них построена
работа функции. Но вся синтаксическая сложность как раз не в них. А
в вариативном шаблоне и вариатвной шаблонной лямбде, а это
синтаксис языка, а не стандартной библиотеки. Давайте я поясню что
там написано, а вы скажете насколько просто это на С будет
написать. VladislavS.(2277 знак., 12.01.2022 09:23 - 09:29)
- Знать надо C++ или его стандартную библиотеку? Или Вы не делаете
различий между ними? VVB(529 знак., 12.01.2022 08:46 - 12:11)
- Я смотрю на это и понимаю, что Цэ — идеальный ЯП для МК. Возражения
не принимаются, есличо. - SciFi(12.01.2022 08:10)
- ЯП - я плакал? - Kpoк(12.01.2022 08:58)
- Это только в контексте "ЯП С++". - SciFi(12.01.2022 09:02)
- ЯП - я плакал? - Kpoк(12.01.2022 08:58)
- А что все так синтаксис С++ ругают? Там всего несколько вещей надо
знать: VladislavS.(1490 знак., 15.01.2022 12:23 - 15:24)