Надеюсь, тут сидят не одни школьники, а есть и люди, которые наверняка помнят, как было весело во времена DOS и реального режима, когда возможно было писать на ассемблере самомодифицирующийся код. Это давало просто бесконечную гибкость.
С выходом на сцену так называемых языков высокого уровня стало немодным привязываться к платформе (хотя 99% crapware так и не осилили перенести с wintel32 даже на wintel64) или модифицировать двоичный код во время исполнения. От последнего даже появились защиты.
С потерей гибкости, связанной с возможностью модификации кода во время исполнения, разработчики стали искать другие источники гибкости, с переменным успехом пытаясь получить её в ООП, ФП, АОП и т.д. Но было очевидно, что всё это не то.
Все изменилось с появлением JVM: появилась единая платформа с безопасным доступом к «машинному» коду. Кто не слышал о реализации корутин для Java модификацией байт-кода?
JVM была недостаточно хороша, поэтому знамя подхватил .NET. Хотите, например, AOP со связыванием/отвязыванием концептов во время исполнения без модификации исходников? Есть и такое. Хотите генерировать код в рантайме? Запросто. JIT оптимизирует до маш. кода, производительность не пострадает.
.NET принёс нам бесконечную гибкость плюс типобезопасность. Наверное поэтому его так любит Луговский, за простоту компиляции DSL-ей.