ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
22 мая
1161230 Топик полностью
VladislavS. (05.01.2022 02:46, просмотров: 270) ответил evgeniy1294 на Keil использует clang, по крайней мере под ARM, в нём все фичи работать будут. Что касается IAR - за десять лет работы так и не понял, зачем он нужен. На пару процентов быстрее - это конечно здорово, но чащё всего с этим можно смирится.
Вот когда БУДЕТ поддерживать, тогда и будем обсуждать. А пока С++20 для кортексов это только GCC. IAR это не только крутой компилятор. Вроде смотришь листинги - ничего особенного, но работает код быстрее. Я думаю, он учитывает особенности исполнения кода разными ядрами (конвейеры, кэши, предвыборки и т.д.), иначе трудно объяснить почему код выполняется быстрее. GCC делает код добротный, агрессивно оптимизированный, но по какому-то клише, которое в целом чуть медленнее. На 

разницу в скорости уже можно забить, но поддержка новых стандартов С++ в GCC балансирует с качеством инструментария вокруг него и в продакшене именно последнее перевешивает. Ибо IAR это ещё документация, стабильная работа с отладчиками/программаторами, отличный отладчик в IDE и качественная генерация ассемблерных листингов. С IAR я могу вообще без железа программировать на С++, просто подсматривая в листинг, осуществляя ту самую связь между С++ и асмом о которой говорил Мастер. На GCC это бестолковый objdump, который ничего толком не дизассемблирует или отладка в железе, но железка не всегда есть под рукой. Рабочий проект начиная от схемы и кончяя реализацией всего функционала с исправлением всех обнаруженных багов лично у меня проходит быстрее именно в IAR. Он, к тому же, более лоялен к программисту - не пытается наказать тебя неуместными оптимизациями. Например, если ты в GCC по указателю на неволатильную память сделаешь несколько записей, то он оптимизирует это до последней записи. Да, формально GCC прав, но в реальной жизни лучше рабочий код, чем правота компилятора при чикании кода оптимизатором. А вот то что IAR, вопреки стандарту С++, позволяет указатели использовать в constexpr контексте для меня скорее минус. Я в последнее время практикую сборку проектов разными компиляторами с проверкой работоспособности. Таким образом вылавливаются некоторые несоответствия стандарту и вольности/закидоны конкретных компиляторов. Вот тут ещё раз и обламывает отставание в реализации новых стандартов разными компиляторами. В первую очередь хочется, чтобы изделие выполнило свою миссию по гарантированному уничтожению "партнёров", пишуших компиляторы :)

ARM Compiler V6 это вообще особенная вещь. Я его боюсь. Он реально круче меня. Делает из кода такой винегрет. У него, похоже, самые крутые оптимизации по ARM-ядрам. Но я, возможно, из-за малого опыта работы с ним, не чувствую той связи между С++ кодом и получаемым ассемблером, о которой пишет Мастер. При работе с IAR и GCC через какое-то время появляется точное представление во что скомпилируется код и в листинги смотришь уже только для проверки самого себя. А вот листинги ARM Compiler всегда сопровождаются эмоцией "ни фига себе". Для пресловутого продакшена это скорее минус. Когда получаешь хард фолт по невыровненному доступу к памяти на ядрах с его поддержкой, это заставляет сильнее прочувствовать ту самую связь между С++ и асм.


Пардон за эмоции и субъективность, но что ещё на НГ делать...