предлагаю начать вам писать в ваших скриптах механизм tainting-а, т.к. в парсере он работает всегда. :)
Misha v.3 13.07.2006 11:30
а если серьезно, то: одинаковую функциональность написать во первых сложно, а во вторных далеко не всегда нужно.
возьмем тот-же tainting - он не нужен пока мы не работаем с данными введенными посетителями. но этот механизм в парсере работает всегда. да, он требует для своей работы рессурсы (время + память), но он не позволяет кодеру "забыть" проескейпить строку пришедшую от посетителя, которую он добавляет в sql запрос, и внедрить таким образом в систему подобную дырку.
можно сказать что большинство функций в парсере более высокоуровневые. они делают больше, защищая кодера, и за этого мы "платим" временем выполнения/памятью.
как уже тут неоднократно упоминалось: нам особо не интересны подобные сравнения, т.к. я думаю по скорости выполнения кода парсер проиграет практически всегда. для нас больше важна скорость разработки (под скоростью разработки я не беру скачивание и установку чего-то говорого а потом... апдейтами для устранения дыр).
тупейшая парсерная конструкция: $form:name может быть вот так просто подставлена в sql запрос, в имя сохраняемого файла, в тело страницы и... если посетитель захочет нам напакостить у него ничего не получится, т.к. в sql запросе кавычки проэксейпятся (причем для разных sql серверов по разному), в имени файла запрещенные символы заменятся и у него не получится передать '../../.....', а переданное '<h1>' не поломает шрифт на всей странице. в случае php вам придется писать/вызывать разные функции в каждом случае, и самое главное вам нужно об этом будет _знать_и_не_забыть_, что для новичков далеко не просто.
ладно, хватит с tainting-ом, можно и до sql запросов дойти: для работы с разными sql серверами в парсер надо написать один код.
например парсерный код выводящий в виде таблички первые 10 строк из произвольной sql таблицы. все будет продолжать работать если мы вдруг решим поработать с другим sql сервером (говорю не о специфике sql серверов, а о парсерном интерфейсе работы со скриптами). вам придется переписать ваш код (+ запрос, т.к. LIMIT у ORACLE 8 например нет в синтаксисе).
так что обсуждающийся цикл, на который вы сослались для нас не является аргументом :)
P.S. конечно есть задачи, для которых скорость _очень_ важна, и тут в случае с парсером нам приходится довольно туго, хотя кеширование результатов во многих случаях нас спасает.