Рантайм рефлексия не способна *сгенерировать* код, да ещё разный в зависимости от входных данных. Тупой сишный макрос -- способен. Он, по недавним сведениям, вообще (почти) тьюринг-полный. Почему нужны хидеры, в основном для самого программиста. Если ему нужна краткая справка, что в функцию передавать, из чего состоит класс, и т.п., то он берёт и смотрит в хидер. В любом, самом тупейшем и простейшем редакторе. А как без хидеров? Нужен специальный редактор, который специально предназначен для C#. И как правило как редактор это полное дермище, это комбайн для обучения бабуинов.
Под средствами метапрограммирования в C и C++ я подразумеваю C-препроцессор и C++-шаблоны. Другого там нет. В языках подвышенного уровня, Tcl, Perl, Python, есть всегда функция eval(), поэтому скрипт может запросто сгенерировать другой тип. А в C# ничего нет получается. Язык специально упрощён, чтоб сложные концепции не сломали мозг бабуина.
Monodevelop? Небось такой же комбайн в котором нужно работать с "проектом", а не редактировать один файлик. А мне хотелось лишь по одной кнопочке уметь подглядеть хидер (в split screen, как vim умеет), а по другой подсмотреть ман на функцию. Больше ничего не нужно, достаточно тупого грепа и ctags для проектов любой возможной сложности (где любая IDE 10 раз сдохнет). Но у микрософта нет ни хидеров (а чего ж она по Shift-F11, вроде, показывает в vs-code, их самых! я понимаю, что через ildasm вроде как самому так нагенерить можно). И нет ман страниц. Низкое качество документации? Вот пример:
https://docs.micro …ryadd?view=netcore-2.1 -- это ПОЛНОЕ ГОВНИЩЕ. Явно нагенерено чем-то наподобии doxygen. И это ТИПОВАЯ ФУНКЦИЯ ТИПОВОГО, НАИБОЛЕЕ ВОСТРЕБОВАННОГО КОНТЕЙНЕРА. Это всё, это пиздец, осталось только выкрасить и выбросить. В юникс-ман страницах (которые сильно далеки от идеала, поэтому часто хочется подглядеть в single unix specification) такого нет и никогда не было. Стандартные библиотеки C и C++ по сравнению с этим документированы идеально.
Что толку от такой безопасности? Это как борьба с goto, или с динамической памятью (в MISRA). Создание видимости, buzzword. По факту от указателей при разработке ПО никуда не деться. Ну будет индекс в массиве вместо указателя. Что это, запретит ошибки что ли? Как бы новых не добавило.
Куда бы не двигался C++, всегда есть база в виде C++11, которой хватит как бы не до конца жизни. А C# через 5 лет может постигнуть судьба VB. Кто за него заплатит зарплату?
PHP видел первый и последний раз чуть ли не в 2001 году, когда он только появился. Посмотрел на этот "перл недоделанный", поплевался и больше не смотрел. Я думаю там не хуже, или не лучше, чем в perl. Но в последнем "хаков" от микрософта на уровне синтаксиса или грамматики нет, там в общем всё понятно и логично, если разобраться.