Я рассматриваю вопрос переноса языка (доморощенного DSL) с C на C ++.
Более 15 лет я не занимался «нативным» программированием, поэтому хочу проверить свои предположения.
Правильно ли я полагаю, что переход на новейшую версию C ++ (17) позволит нативному компилятору использовать гораздо более широкий диапазон «современных» инструкций процессора Intel / AMD, что приведет к более эффективному исполняемому файлу (помимо многопоточности / памяти) -модель C ++, которая уже сама по себе кажется достаточной причиной для перехода на C ++)?
Иными словами, разве большая часть «более свежих» инструкций ЦП никогда не генерировалась компилятором C, просто потому, что в нем слишком мало информации о намерениях программиста из-за более простого синтаксиса C? Я знаю, что могу получить доступ ко всем инструкциям процессора с помощью ассемблера, но это именно то, что я не хочу делать. В идеале, я бы хотел, чтобы сгенерированный код был как можно более независимым от платформы.
Все ваши предположения о связи между языком программирования и «современными инструкциями ЦП» неверны.
Давайте рассмотрим коллекцию компиляторов GNU.
Выбор языка здесь не имеет большого значения, так как все пользовательские интерфейсы в конечном итоге генерируют одну и ту же промежуточную форму, называемую GIMPLE. Оптимизирующие проходы затем работают над этим.
Диапазон команд CPU, которые могут быть выданы, контролируется -mtune
вариант. Для x86 GCC способен выдавать современные инструкции AVX 512 при оптимизации какого-то очень наглядного C-кода. Автоматическая петля векторизации — мощная вещь. Попробуйте это: реализовать memcpy
и посмотрите на сгенерированную сборку.
Мой совет: генерируйте чистый, неумный C-код и повышайте уровень оптимизации. Точно так же, как если бы вы писали код вручную.
Вы можете также рассмотреть возможность реализации вашего языка непосредственно в качестве внешнего интерфейса для GCC или LLVM, без перехода на C или C ++. LLVM был разработан для этой цели, чтобы упростить внедрение новых языков и при этом использовать преимущества современных подходов к оптимизации.
Других решений пока нет …