Интересует язык, который тривиально транслируется в ассемблер. По сути если я пишу на ассемблере, то многие паттерны повторяются чисто механически. Можно макросов под них понаписать, но язык это всё же лучше макросов. Но при этом он должен совершенно очевидным образом преобразовываться в ассемблер, в нём должен быть прямой доступ ко всем регистрам, в любой момент должна быть возможность использовать ассемблер напрямую. Но в то же время он должен быть настолько высокоуровневым, насколько это теоретически возможно для языка такого уровня. К примеру объявить переменную определённого типа, которая будет в стеке и к которой будут применяться правильные JMP-команды и арифметика (signed/unsigned).
Я точно не уверен, но вроде бы на заре времён язык C был чем-то подобным. Но речь о современности. В частности интересует конкретно архитектура ARM Cortex M0.
Что хотелось бы видеть по пунктам:
-
Объявления функций с переменными. Автоматические прологи и эпилоги.
-
Типизация переменных (signed/unsigned), понятный синтаксис для сравнений, структурированный код (if/while/…) вместо JMP.
-
Вызов других функций по стандартным конвенциям.
-
Статический анализ там, где это возможно.
-
Никаких оптимизаций, все конструкции должны генерировать абсолютно предсказуемый и очевидный код.