[room] новички

Денис Смирнов =?iso-8859-1?q?mithraen_=CE=C1_altlinux=2Eru?=
Ср Окт 25 20:57:36 MSD 2006


On Wed, Oct 25, 2006 at 08:07:44PM +0500, Aleksey Korotkov wrote:

>> Кажется мы спорили о том что руками написаный код не будет сильно
>> лучшеавтогенерируемого? :) 
AK> Так точно. Ты утверждаешь, что да, я -- что нет (единственно, слово
AK> "сильно" ощущается всеми сугубо субъективно, потому я бы его опустил).

Твое утверждение имеет одно отличие от моего -- оно не основано на
сравнении. Спорить о вкусе устриц с теми кто их ел штука бессмысленная.

Вот у меня сейчас валяется маленький самописный проектик. Там сейчас кода
на PHP 3.5k строк. Плюс 2k строк кода темплейтов, которые обычно
встраиваются PHP-никами в код, а с учетом того что мои темплейты это
аналог perl-HTML-Template, можно считать что в виду PHP-кода это было бы
уже 3-4k строк.

Так вот, я вижу как использование трюков с автогенерированием кода
позволяют мне в этом коде не теряться. Потому что если даже на C такой
объем кода это пустяк, то на PHP это очень тяжело.

Ещё интереснее то, что это позволяет мне обходиться практически без
комментариев -- код прозрачнее становится.

>> Ты сам прекрасно доказал почему
AK> Да вроде нет, не доказывал :)

;)

>> -- все
>> равно толькополный псих будет писать идеально чистый код на языках,
>> предназначеных недля enterprise quality а для "побыстрячку налабать
>> на коленке". 
AK> Хм. Вот знаешь [просто констатация имеющего место быть] по крайней мере
AK> стараюсь не делать "побыстрячку" и "на коленке". И даже не знаю, плохо
AK> это или хорошо, но вот так вот есть.  

Простой вопрос -- как ты проверяешь входные данные? На какие именно
условия ты их проверяешь? Я вот последнее время стараюсь даже регекспами
обрабатывать все входящие данные. Плюс констрейнты на диапазоны. Для
_всех_ данных. Так вот даже просто вызывать уже готовые функции проверки
констрейнтов устал. Неудобно.

>> Поэтому сгенерированый код вряд ли будет уступать коду
>> той же сложности,написаному человеком, если речь о PHP. А вот чиже
>> может быть.
AK> Чище? Вот это самый твой уязвимый постулат. Разве что сравнивать с
AK> кодом, написанных олухом. Тогда всё возможно. Но имеют ли смысл такие
AK> сравнения?

Ещё раз объясняю. Когда человек пользуется метапрограммированием, он не
смотрит глазами генерат. Его компьютер исполняет. Для него есть:
 - генератор;
 - данные для генератора;

Это и есть код. Который оказывается сильно лучше чем если бы он написал
руками то, что будет написано генератором.

>> В точку. Хотя назвать это корректным HTML нельзя, да и не все что
>> выводитPHP это HTML, у меня он иногда и JavaScript выводит.
AK> Можно и наоборот :)

:)

>> Фактически я признал что на языке без жестко сформулированых
>> требований кcode quality понятие чистого кода отсутствует, остаются
>> тольконеформальные правила. По этим неформальным правилам, например
>> при приеме на работу PHP'шника ябуду читать его код и спрашивать по
>> каждой строчке какие у него былиоснования написать именно так, а не
>> одному из десяти других вариантов. Один ответ в стиле "потому что так
>> тоже можно" будет означать что разговорможно заканчивать. 
AK> Я по другому скажу -- если ты утверждаешь, что так-то так-то писать
AK> нельзя/не стоит -- обосновывай или твои критицизмы идут лесом. Вот в
AK> последнем случае тут, действительно, разговор можно будет заканчивать.
AK> Только не в том смысле, который ты имел в виду :)

Я уже сказал -- если выбирается вариант хоть на один байт длиннее -- это
требует обоснования. Ответ в качестве обоснования "потому что так тоже
можно" за обоснования не катит.

>> Сходу я
>> сейчас могу придумать только одну причину применять в этойконструкции
>> print -- если автор и вся команда перловики. И им простонепривычно
>> использоваь разный оператор для одной и той же команы. Сампосле PHP
>> начинал в перловке писать echo вместо print. В целом же<?print
>> "Hello, World!"?> По сравнению с просто:Hellow, World! Это называется
>> грязный код.
AK> Опять таки всё наизнанку. Ты не то придумываешь. Это _тебе_ надо
AK> обосновать, что _надо_ писать echo, а не print. Пока обоснования я не
AK> увидел. И вот пока ты не привёл такие обоснования (веские и
AK> разумные :)), всё это -- вкусовщина и субъективщина ;)

Не. Все просто. echo "общепринятый" вариант и на целый 1 байт короче.
Поэтому обосновывать выбор не надо. А вот если используется другой вариант
-- надо. Как и то что вообще использовался оператор вывода, где можно было
вообще не использовать никаких операторов.

>> Мой -- может и даст. Я уже говорил что я редкостный ламер.
>> Написать можно. Можно и яндекс целиком на ассемблере написать.
>> Дажеработать быстрее будет. Но трудоемкость этого процесса будет на
>> порядкибольше. Вы попробуйте для проекта уровня phpbb какого хотя бы
>> просто реализоватьполную проверку всех аргументов, а также правильный
>> квотинг при обращениик SQL. То бишь то, что срезает большинство
>> уязвимостей. Причем попробуйтеэто сделать так, чтобы вы могли
>> _доказать_ что покрыли тестами всюсистему. И сразу станет все
>> понятно :)
AK> Ну я могу и вернуть этот аргумент. Предлагаю доказать, что это сделает
AK> метаигрушка :)

Все очень просто. Если код большой, но написаный "метаигрушкой", то
достаточно предъявить простой алгоритм того модуля который генерит код
проверки аргументов, и его входные данные. Объем кода для проверки в твоем
случае будет больше как минимум на порядок для сложного проекта.

>> Так то ассемблеры на стероидах. Они не хуже, они в этой области
>> попростунезаменимы. 
AK> В каком смысле не хуже? В том, что нет других инструментов? И что
AK> значит незаменимы? То, что нельзя придумать (теоретически, по крайней
AK> мере) ничего более подходящего под те же задачи?

Всегда можно придумать что-то лучше. Но -- не придумали лучше по
совокупности характеристик. Потому незаменимы, что заменить нечем. Было бы
-- заменили бы.

-- 
С уважением, Денис

http://freesource.info
----------------------------------------------------------------------------
WOW!
Ядра посыпались :-)
		-- aen in devel@



Подробная информация о списке рассылки smoke-room