Малопонятный и плохо сопровождаемомый код это если банально делать то что можно автоматизировать вручную. Это одна крайность. А вторая крайность - это пример какого-то дженерик языка когда компилятор должен анализировать кучу условий и делать сложный траверс по графу пытаясь понять намерения программиста чтобы провести какие-то эффективные оптимизации. А может есть что-то посередине? Может можно организовать намного более тесное общение с компилятором с помощью конструкций/синтаксиса/грамматики языка которая будет специально заточена под дальнейшие оптимизации? Чтобы не компилятор анализировал и угадывал намерения а программист явно их выражал в коде и при этом не сильно ухудшить читаемость и поддерживаемость
> А может есть что-то посередине? Может можно организовать намного более тесное общение с компилятором с помощью конструкций/синтаксиса/грамматики языка которая будет специально заточена под дальнейшие оптимизации? Чтобы не компилятор анализировал и угадывал намерения а программист явно их выражал в коде и при этом не сильно ухудшить читаемость и поддерживаемость
Есть, только Вам не понравится. В разной степени описанию соответствуют Rust и ATS. Как ни удивительно, у обоих очень не простые компиляторы.
Фундаментальная проблема в том, что для оптимизаций нужна одна семантическая информация, а людям интересна совсем другая. Немного surprising middle ground находится в области чистых функций, контроля эффектов и линейных типов — потому что они облегчают рассуждения и людям, и компиляторам — но Вам всё равно не понравится.