hothing писал(а):
Самоограничения? Угу, конечно. Почему бы на ассемблер сразу не перейти: там и аскетизм, и созерцательность, и самоограничения проявят себя в полной мере.
Причём тут ассемблер?
Явная пометка требует модификации языка, что приводит к непортабельному коду.
Модификация языка требует модификации компилятора. Кто будет этот компилятор сопровождать, синхронизировать с мейнстримной версией и гарантировать что нигде ничего не сломается? Тут полтора человека такими вещами занимается.
Модификация компилятора ещё больше усложнит его понимание (тот же ББ уже на грани своей толщины, а его и так мало кто понимает).
При явной пометке оптимизируются только помеченные процедуры, когда это можно делать для любых процедур (причём необязательно только процедур-функций).
Автоматическую проверку на использование глабальных переменных все равно придётся делать, но только для того что бы дать пограмисту по рукам на ровном месте - использование глобальных переменных не влияет корректность кода. Почему бы не использовать ту же проверку, но только для автоматического отключения оптимизации?
Код который будет оптимизироваться для вычисления в компилтайме скорее всего будет умещаться в несколько строк, а пограмист и так будет понимать что глобальные переменные использовать не следует.
Из этого всего следует, что введение явной пометки для оптимизации как минимум не стоит требуемых на то усилий, если вообще имеет смысл.
hothing писал(а):
Мда. Компилятор - инструмент, а не священные тексты.
Смотри выше про про компилятор. Трогать его стоит когда в этом действительно есть необходимость и имется большие профиты при минимальной сложности реализации. А всё что можно приделать сбоку - надо приделывать сбоку. Примером такого решения является DevCPH в ББ.
hothing писал(а):
А от остальных программ?
Тут разница в том, что если мы зависнем/трапнемся на собранной программе, то будем точно знать что проблема в именно в программе и легко можем получить стектрейс и содержимое переменных.
А если тоже самое произойдёт в компилтайме? Кто виноват? Глючит компилятор или это кривая программа? Что? Ещё и отладчик встраивать
в компилятор?!
Довольно странно говорить о том что я скатываюсь до ассемблера с самоограничениями при минорной фиче, но при этом допускать трудноотлаживаемую ситуацию, которая решается ограничениями на код со стороны компилятора/оптимизатора.
Кстати, если исключть рекурсию, то ББ уже сейчас заоптимизирует такой код для рантайма, потому что он искарпки детектит leaf-процедуры (т.е. процедуры которые не вызают процедуры).
hothing писал(а):
Функция всегда должна возвращать значение, поскольку в начальных условиях оговоривалось отсутствие глобального состояния. Есть другие решения когда внутри функции нужен выбор альтернативы?
Как традиционный if коррелирует с глобальным состоянием? Щ_Щ
Ну а при отсутствии return выдвавть ошибку. Никто же не жалуется что ASSERT(FALSE) в ББ выдаёт ошибку. Я дже этим пользуюсью в ядре BMBB. Чем вычисляемые процедуры хуже?
К тому же анализ процедуры на наличие return будет ещё проще чем анализ на использование глобальных переменных и вызова импортированных процедур.