-
- Где там что про асм? Ключи компилятору, какие возможности
использовать. Вроде всё на этом. - Dingo(06.12.2021 14:31)
- "но нужно стремится к состоянию души когда между asm/c++ стирается граница." - Evgeny_CD(06.12.2021 14:51)
- Ерунду пишите, Евгений. Или я вас неправильно понимаю. Вся прелесть
в том, что современный компилятор, с отлаженной оптимизацией LTO,
стирает грань между программированием на ассемблере и
программированием на С++. Надписанный на C++ код, оптимизируется
компилятором на уровне инструкций контроллера, считай, в
ассемблере. Делая использование ассемблера разработчиком
бессмысленным. Nikolay_Po(647 знак., 06.12.2021 13:54)
- я удивлен и сильно обрадован.... оказываеццо есть все таки надежда
и свет в нашем стаде эмбеддед програмеров! Вы почти точно выразили
ситуацию и мысли которыми руководствоваться комитет по стандарту.
единственное уточнение - современный С++ позволяет программисту
указать компилятору. как бы помогать ему генерить этот самый
правильный и эффективный асм код, ты как бы пишешь на асме но
категориями высокоуровнего С++. Фокус в том что при этом не
теряется независимость от klen(803 знак., 06.12.2021 14:50 - 14:55)
- Можно подробнее, где в низкоуровневой части С++ улучшения по
сравнению с С, которые позволяют программисту помогать компилеру
лучше генерить код? - Evgeny_CD(06.12.2021 14:54)
- самое поверхностное и понятное, шаблоны, ссылки, constexpr consteval, constinit, lamda, примеры где проглядывается связь именно с таргетом и его
инструкциями и регистрами я приведу пожже и мы это разберем. это
чуть посложнее. Все дело в том что С++ вниз умеет протолкнуть
больше информации об организации данных и их связях. - klen(06.12.2021 15:02)
- Странно, что сейчас виртуальные функции и перегрузку операторов не ценят. По-моему, они - самое лучшее в С++. - Costic(06.12.2021 21:29)
- Шаблоны, ссылки, лямбды - мне кажется это не про оптимизацию, а про
упрощение кодирования. А все сорта const... это исключительно от
разделения компиляции и линковнки. Если предположить, что
разделения нет, то компилятор сам может догадаться, где нужно
вызвать функцию sin(x) , а где заменить на константу sin(1) - AlexBi(06.12.2021 15:43)
- это то да, но опять же не относится к обсуждаемой теме - это
одинаково работает и для С и для С++. разницв будет когда в Вы в
месте вызова как аргумент вставите лямду с этим сраным синусом (0)
= 0. С++ вообще обрежет и верхнюю функцию, в С это может не
сработать потому как он обязан вызвать функцию с аргументом. - klen(06.12.2021 15:47)
- Т.е. в С++ неявно встроен интерпретатор С++? Иначе как компилер
вычислит значение сложной функции? - Evgeny_CD(06.12.2021 15:55)
- Никаких интерпретаторов не встроено. Существует оптимизация библиотечных stdlib встроенных функций. sin() относится к ним. Стоит только указать в параметрах -fno-builtin как радостный пример выше не сработает. - RxTx(07.12.2021 13:48)
- конечно! правда с С он тоже всктроен и тот же самый почти но С++
больше инфы может спустить в подвал. как эксперимент - напишите
функцию и скомпилите С и С++ компилятором gcc и потом посмотрите
objdump различия в заголовках объектников - их много, там хранися
много информации, она пихается далее линкеру и плагинам
оптимизации. - klen(06.12.2021 16:54)
- Потому что С++ монструозен. Без тонкой оптимизации ему ваще кирдык. - Evgeny_CD(06.12.2021 18:07)
- C++ является надмножеством C, а C является подмножеством C++. Делаем выводы. - RxTx(07.12.2021 13:49)
- Потому что С++ монструозен. Без тонкой оптимизации ему ваще кирдык. - Evgeny_CD(06.12.2021 18:07)
- Т.е. в С++ неявно встроен интерпретатор С++? Иначе как компилер
вычислит значение сложной функции? - Evgeny_CD(06.12.2021 15:55)
- это то да, но опять же не относится к обсуждаемой теме - это
одинаково работает и для С и для С++. разницв будет когда в Вы в
месте вызова как аргумент вставите лямду с этим сраным синусом (0)
= 0. С++ вообще обрежет и верхнюю функцию, в С это может не
сработать потому как он обязан вызвать функцию с аргументом. - klen(06.12.2021 15:47)
- Жалкое подобие левой руки, эти ваши шаблоны с константными
выражениями! То ли дело на макросах препроцессора навернуть! - LightElf(06.12.2021 15:26)
- фууууууууууууууу........ как Вы могли так низко пасть...... еще не
поздно раскаяться ;) кстати циркулируют предложения наконец то
макросы в будущих стандартах сжечь на костре как мракобесие - klen(06.12.2021 15:30)
- Тогда это будет просто другой стандарт другого языка. - Evgeny_CD(06.12.2021 15:40)
- Препроцессор - практически Тьюринг-полный, а вот как с этим у
шаблонов и константных выражений? Хотя конечно замена CPP на
какой-нить AWK напрашивается с давних времен. - LightElf(06.12.2021 15:33)
- Лучше Perl встроить, чтобы в ходе сборки проекта была возможность
запускать стандартизованные скрипты. Чтобы при компилироапнии файла
у меня зарустился скрипт, что-то там динамически внутри файла
изменил, и потом это сожрал компилер... - Evgeny_CD(06.12.2021 15:37)
- AWK кошернее и аутентичнее - Керниган голова!. Давным-давно, в
сорцах OpenGL от SGI, куева туча похожих, но чуть-чуть различных,
сишных функций генерировалась в процессе сборки AWK-скриптом. - LightElf(06.12.2021 18:19)
- MQX RTCS SNMP Agent, генерится сишник из MIB при помощи скриптов
AWK. - SciFi(06.12.2021 18:20)
- Я же говорю Perl! Он, в целом, наследник AWK, полноценный язык
программирования, в отличие от него. - Evgeny_CD(06.12.2021 18:31 - 18:35)
- теоретег детектед :-) - SciFi(06.12.2021 18:34)
- Ты против Perl? - Evgeny_CD(06.12.2021 18:36)
- Я сначала подумал, что про Perl - это прикол или троллинг. Perl
сложно читать и понимать. Python нынче в моде - проще и понятнее. - Costic(06.12.2021 21:27)
- Raku (Perl 6 в девичестве) совершенен. Я, конечно же, его имел в виду. Богомерзкий пытон - это неправильно для С мышления. Педивикия вполне точна. Evgeny_CD(1 знак., 06.12.2021 21:50, ссылка)
- Я за AWK! - SciFi(06.12.2021 18:41)
- Я сначала подумал, что про Perl - это прикол или троллинг. Perl
сложно читать и понимать. Python нынче в моде - проще и понятнее. - Costic(06.12.2021 21:27)
- Ты против Perl? - Evgeny_CD(06.12.2021 18:36)
- теоретег детектед :-) - SciFi(06.12.2021 18:34)
- Я же говорю Perl! Он, в целом, наследник AWK, полноценный язык
программирования, в отличие от него. - Evgeny_CD(06.12.2021 18:31 - 18:35)
- MQX RTCS SNMP Agent, генерится сишник из MIB при помощи скриптов
AWK. - SciFi(06.12.2021 18:20)
- это мне напоминает экстремиское движение - "а давайте мы из gnu
make сделаем CMAKE..... нее лучше SCons.... не лучше XXX " - klen(06.12.2021 15:50)
- Нет, не make! Прямо посреди С кода строка на Perl... - Evgeny_CD(06.12.2021 15:53)
- Есть подобное для вставки Python посреди C/C++ кода, Cog
называется. AlexG(17 знак., 06.12.2021 16:40)
- Сводный топик Evgeny_CD(1 знак., 06.12.2021 17:31, ссылка)
- Тов. bialix в апреле 2006года познакомил нас с этим полезным утилем :) Хочется больше, и по стандарту. Evgeny_CD(1 знак., 06.12.2021 17:21, ссылка)
- если дойдет до такого, то только не Java, я такого позора не вынесу
физически - klen(06.12.2021 15:58)
- Разве я жабу поминал всуе? - Evgeny_CD(06.12.2021 16:00)
- у меня это больное место - сколько боевых товарищей потерял... ушли
в блуд и не вернулись - klen(06.12.2021 16:57)
- Темная сторона силы привлекательна! - Evgeny_CD(06.12.2021 17:25)
- у меня это больное место - сколько боевых товарищей потерял... ушли
в блуд и не вернулись - klen(06.12.2021 16:57)
- Разве я жабу поминал всуе? - Evgeny_CD(06.12.2021 16:00)
- Есть подобное для вставки Python посреди C/C++ кода, Cog
называется. AlexG(17 знак., 06.12.2021 16:40)
- Нет, не make! Прямо посреди С кода строка на Perl... - Evgeny_CD(06.12.2021 15:53)
- AWK кошернее и аутентичнее - Керниган голова!. Давным-давно, в
сорцах OpenGL от SGI, куева туча похожих, но чуть-чуть различных,
сишных функций генерировалась в процессе сборки AWK-скриптом. - LightElf(06.12.2021 18:19)
- Лучше Perl встроить, чтобы в ходе сборки проекта была возможность
запускать стандартизованные скрипты. Чтобы при компилироапнии файла
у меня зарустился скрипт, что-то там динамически внутри файла
изменил, и потом это сожрал компилер... - Evgeny_CD(06.12.2021 15:37)
- фууууууууууууууу........ как Вы могли так низко пасть...... еще не
поздно раскаяться ;) кстати циркулируют предложения наконец то
макросы в будущих стандартах сжечь на костре как мракобесие - klen(06.12.2021 15:30)
- Почитал, например, про consteval, не увидел какого-то особого,
высшего смысла. Evgeny_CD(1 знак., 06.12.2021 15:20, ссылка)
- Для практического применения всей этой красоты нужен хороший опенсорцный транспилер из "нового Цэ" в K&R. Патамучта под некоторые все еще актуальные архитектуры эти ваши GCC и LLVM не натянуть. - LightElf(07.12.2021 12:36)
- +1, const он и в Африке... всего лишь замена (дополнение)
препроцессору. - Costic(06.12.2021 21:31)
- А вот и нет, оно разное. Потому как может использоваться в метапрограммировании с зависимостью результата от типов(!) входящих данных, помогать оптимизировать код в зависимости от результата, а также гарантировать выполнение в compile-time. Препроцессор гораздо слабее. - evgeniy1294(06.12.2021 21:36)
- consteval нужен, потому что, в отличие от constexpr, может быть выполнен только в compile-time. Это позволяет писать до предела оптимизированный код, я приводил пример своей работы в плане работы с периферией МК - вот там он всплывает во весь рост. - evgeniy1294(06.12.2021 20:46)
- тут нужны примеры с выходным асмом. мне нужно подготовится чтобы
показать суть. тема то на книгу и учебный курс тянет: "Эффективное
использование С/С++ при программировании встраиваемых систем:
возможности крайних стандартов" - klen(06.12.2021 15:27)
- Причем эта книга помощнее Х&Х будет. - Evgeny_CD(06.12.2021 15:33)
- К моменту выхода книги стандарт аккурат в очередной раз и
поменяется :))) - Chum_A(07.12.2021 08:51)
- Хорошо, если один раз :) - Evgeny_CD(07.12.2021 12:59)
- это точно, мысль не про то как код писать, а как его
"проектировать" используя возможности инструмента и конкретного
процессора. - klen(06.12.2021 15:43)
- Повторюсь - проектирование это всегда на языке целевой задачи. Язык
процессора - это потом.
А лучше - никогда.Cкpипaч(85 знак., 06.12.2021 21:38) - UML уже обещал нам революцию в проектировании кода, но нынче про
него даже не вспоминают. - Evgeny_CD(06.12.2021 18:33)
- Неудачи UML (и т.п.), ИМХО в том, что не многие конторы могут позволить себе (или просто не могут) написать банальное ТЗ на встроенное ПО. Т.е. ТЗ это такое звено, которое можно и прокинуть, а исполнителю объяснить на пальцах, салфетке и т.п. А лучше, если он сам себе всё объяснит. В свою очередь и исполнители увидев эту UML-хрень шарахаются как черт от ладана. - Chum_A(07.12.2021 09:00)
- Повторюсь - проектирование это всегда на языке целевой задачи. Язык
процессора - это потом.
- К моменту выхода книги стандарт аккурат в очередной раз и
поменяется :))) - Chum_A(07.12.2021 08:51)
- Причем эта книга помощнее Х&Х будет. - Evgeny_CD(06.12.2021 15:33)
- Зайдем с другой стороны. Хороших книг по C++ с прицелом на ebedded катастрофически мало. Тайное знание никак не удается распространить. - Evgeny_CD(06.12.2021 15:04)
- Я лох в С++, но мне понимается обратное. Скорее С можно натьюнить
так, особенно, если специфическими GCC расширениями и прагмами
пользоваться, чтобы код стал более эффективным. - Evgeny_CD(06.12.2021 15:01)
- дык это не считается! потому как все что Вы перечислили
(расширения, прагмы, опции компиляции, аттрибуты данных и функций)
- одинаково работает и для С идля С++, то есть про то как из молока
сделать сыр или масло, а мы про то какое молоко будет от коровы а
ковкое от козы,. срач именно про то что различно ;) речь именно про
языки - каков промежуточный RTL код. - klen(06.12.2021 15:07)
- ? register-transfer level (RTL) - это одна из стадий проектирования
железа в HDL Evgeny_CD(1 знак., 06.12.2021 15:12, ссылка)
- Я чувствую всеобщий предновогодний прилив сил после тяжелого года,
Евгений! Вы сегодня жжете! :) как вам такое Register Transfer
Language (RTL) klen(1 знак., 06.12.2021 15:21, ссылка)
- Так, блин, как получить доступ к RTL в процессе написания проекта? Как делать вставки на RTL? - Evgeny_CD(06.12.2021 15:38)
- Выпал в осадок. Похоже, это то, что я совсем недавно "изобрел".
Прикидывал способы оптимизации написания асм кода, и придумал такой
"архитектурно-малозависимый асм"... - Evgeny_CD(06.12.2021 15:31)
- для справки - изобретатели велосипеда LLVM это все те же лица что и
GCC :) - klen(06.12.2021 15:39)
- IR довольно непрост для ручного написания. - Evgeny_CD(06.12.2021 15:43)
- примерно туда же: klen(1 знак., 06.12.2021 15:55, ссылка)
- Спасибо! - Evgeny_CD(06.12.2021 15:59)
- примерно туда же: klen(1 знак., 06.12.2021 15:55, ссылка)
- IR довольно непрост для ручного написания. - Evgeny_CD(06.12.2021 15:43)
- для справки - изобретатели велосипеда LLVM это все те же лица что и
GCC :) - klen(06.12.2021 15:39)
- Я чувствую всеобщий предновогодний прилив сил после тяжелого года,
Евгений! Вы сегодня жжете! :) как вам такое Register Transfer
Language (RTL) klen(1 знак., 06.12.2021 15:21, ссылка)
- ? register-transfer level (RTL) - это одна из стадий проектирования
железа в HDL Evgeny_CD(1 знак., 06.12.2021 15:12, ссылка)
- дык это не считается! потому как все что Вы перечислили
(расширения, прагмы, опции компиляции, аттрибуты данных и функций)
- одинаково работает и для С идля С++, то есть про то как из молока
сделать сыр или масло, а мы про то какое молоко будет от коровы а
ковкое от козы,. срач именно про то что различно ;) речь именно про
языки - каков промежуточный RTL код. - klen(06.12.2021 15:07)
- самое поверхностное и понятное, шаблоны, ссылки, constexpr consteval, constinit, lamda, примеры где проглядывается связь именно с таргетом и его
инструкциями и регистрами я приведу пожже и мы это разберем. это
чуть посложнее. Все дело в том что С++ вниз умеет протолкнуть
больше информации об организации данных и их связях. - klen(06.12.2021 15:02)
- Можно подробнее, где в низкоуровневой части С++ улучшения по
сравнению с С, которые позволяют программисту помогать компилеру
лучше генерить код? - Evgeny_CD(06.12.2021 14:54)
- Я понял Klen так, что он предлагает широко использовать asm вставки
в накуренном C++ коде - Evgeny_CD(06.12.2021 14:05)
- та нии шо Вы такое гооворите! асм вставки и в С можно всnавлять -
тут как раз паритет :) - klen(06.12.2021 15:12)
- А в чем фишка? Разве С++ позволяет шаблонизировать асм вставку? - Evgeny_CD(06.12.2021 15:17)
- та нии шо Вы такое гооворите! асм вставки и в С можно всnавлять -
тут как раз паритет :) - klen(06.12.2021 15:12)
- я удивлен и сильно обрадован.... оказываеццо есть все таки надежда
и свет в нашем стаде эмбеддед програмеров! Вы почти точно выразили
ситуацию и мысли которыми руководствоваться комитет по стандарту.
единственное уточнение - современный С++ позволяет программисту
указать компилятору. как бы помогать ему генерить этот самый
правильный и эффективный асм код, ты как бы пишешь на асме но
категориями высокоуровнего С++. Фокус в том что при этом не
теряется независимость от klen(803 знак., 06.12.2021 14:50 - 14:55)
- Где там что про асм? Ключи компилятору, какие возможности
использовать. Вроде всё на этом. - Dingo(06.12.2021 14:31)