Он "Ada-inspired", то есть вдохновлённый Адой, но со своим велосипедным синтаксисом.
Integer делали 16-битным для удобства вычислений. Делать размером в байт просто неудобно. А 2 байта - это хороший баланс между удобством и производительностью. Да, сложение/вычитание транслируется в 2 команды, но пересылка и загрузка транслируется в операцию с регистровой парой. Вот Модула или Оберон имеют очень компактный синтаксис, следовательно компилятор тоже вписывается в ограниченные ресурсы 8-битной машины. Я считаю, что это лучший выбор для языка высокого уровня. И методы оптимизации сводятся к оптимизации по количеству инструкций и пересылок с памятью. У нас нет ни выравнивания в памяти, ни кеша, ни конвейера, ни предсказаний переходов.
C то есть везде, его не обсуждаю, не пинал только ленивый. На BDS C и Си-80 делал самодельный интерпретатор G-Code и управление ЧПУ (давным-давно спасли из металлолома ЧПУ, но станция управления была уничтожена золотоискателями). И проблем с быстродействием не было вообще.
LLVM большой и жирный. Это разве что для кросс-компиляции пригодно. А цель, как я понимаю, разработка и компилирование на нативной платформе? Или нет?
- - - Добавлено - - -
Не сказал бы, что уровень падает. Просто требования предъявляются другие. Например, при реализации чего-либо из вычислительной математики мне сейчас важнее не минимальное количество операций, а чтобы было как можно меньше промахов кеша и адаптация алгоритма к SIMD инструкциям. А ассемблер использовать нет смысла.
Да и в других случаях. Раньше, при реализации DALI, использовали бы ассемблер, а сейчас - минимум кода и вся работа на плечах встроенной периферии - PRS, DMA, ACMP, SPI и аппаратный таймер. Естественно, что бороться за оптимизацию оставшегося кода на Си, который настраивает эту периферию - нет смысла. Этот код по времени выполняется менее 1% от всего цикла "фрейм команды-фрейм ответа".





Ответить с цитированием