Автор оригинала: JVN
Просто в свое время в руки попались требования по безопасности для Web-программитов, написанные очень грамотными в этой области людьми.
Так вот там _это_ дело стояло чуть ли не первым пунктом - НИЗЯ.
Причем имена этих людей засекречены. Равно как и причины, которыми они это обосновывали. Я полагаю, эти ГРАМОТНЫЕ в этой области люди получили эти сакральные знания непосредственно от Мирового Разума.
Мне только одно непонятно: лично тебе было совершенно неинтересно узнать, почему же они так считают? Ах да, я же обещал ничего не спрашивать...
Не то чтобы они боялись ошибок программистов - программисты там были грамотные.
Не... Я уже просто мечтаю узнать, о каких людях идет речь...
Боялись того, что уж очень геморрно потом убедиться что их там действительно нет.
Этот тезис делает наших грамотных специалистов еще более сказочными. Объясню почему:
1. Метапрограммирование применяется прежде всего там, когда код размера N может породить код размера M, причем M много больше, чем N.
2. Вероятность внесения бага практически пропорцианальна размеру кода. Следовательно, вероятность внесения бага в варианте с метапрограммированием меньше в M/N раз.
2. Стоимость проверки корректности кода практически пропорциональна размеру этого кода. Следовательно, грамотное применение метапрограммирования снижает расходы на контроль корректности еще в M/N раз.
Это не теория. Это практические данные.
PHP:
$script = 'что-то1'.'unlink($file)'.'что-то2';
fwrite($handle, $script);
В "что-то1" делаем ошибку и переменная $file у нас зависит от запроса к сгенерированному скрипту...
А теперь делает то же самое без всякого метапрограммирования:
PHP:
что-то1
unlink($file)
что-то2'
... и вследствии той же ошибки получаем стирание того же файла. Да, второй код проверить проще, чем первый -- при коэффициенте размножения, равным 1. Но так применяют метапрограммирование... мнэ... весьма слабые программисты.
В реальности у тебя будет 50 блоков кода второго типа, причем при ручном написании ЛЮБОЙ из них может содержать эту ошибку. И проверить нужно каждый.
Я всего лишь говорю о том, что трудоемкость диагностики ошибок возрастет во много раз.
Прости, но ты именно "всего лишь говоришь".
В свое время пришлось работать с людьми из ФАПСИ - там надрессировали конкретно. Вот у кого действительно фобия...
Из практики:
- Пункт 13.8 не соответствует ГОСТ Foobar.
- Обана. Покажите, в каком месте!
- Не покажем. Это секретный ГОСТ.
Занавес.