[Moscow.pm] get own source code

PEF Secure pef-secure на yandex.ru
Пн Мар 30 17:31:17 PDT 2015


On Monday, March 30, 2015 21:01:36 Maxim Vuets wrote:

> Как по мне это плохая идея. А аргументация слабая и поверхностная.

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

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

Я мог бы обсудить что-то, поддающееся обсуждению. C-like макросы понятно будут 
выглядеть ужасно, поэтому используется Filter::Simple. 

Ладно, попробую, если не получится, свернусь. Существуют шаблонные куски кода, 
они небольшие, выполняют какие то проверки и должны заполнить значения каких-
то переменных, которые используются в дальнейшем в основном алгоритме. Такие 
куски кода, я считаю, удобно написать один раз, не в виде функций, поскольку 
этим функциям придётся передавать множество аргументов, а их возвращаемые 
значения копировать туда-сюда или хешем -- это всё засоряет текст, замыливает 
глаз и мешает читать основной код. В итоге у меня получается система макросов, 
которые скрывают это всё, остаётся только смысл выполняемого действия.

Например, как может выглядеть обработчик, отвечающий на запрос получения 
информации о текущем клиенте, чтобы знать кому веб-сайт должен сказать 
"привет":

handler get user info : prolog(get_user) {
	return {
		name         => $user->name,
		email         => $user->email,
		last_login    => $user->last_login,
		result        => "OK",
	};
	end_handler;
}

В данном случае, handler создаёт обработчик "состояния" сессии в POE, псевдо 
атрибут prolog вызывает генерацию части get_user, которая создаёт объект $user 
из переданного ключа веб-сессии и добавляет информацию о пользователе в 
текущий контекст, чтобы можно было его добавить в лог, end_handler завершает 
формирование функции, создавая обработчик результата. Если развернуть эти 
несколько строк в получаемый результат, то там будет строчек на 20 больше. 
Писать подобные обработчики, на мой взгляд, быстрее и проще, чем на "настоящем 
перле". Читать и проверять код тоже. Ещё плюс в том, что это ничего не стоит с 
точки зрения производительности, код генерируется один раз на этапе 
компиляции. Конкретно в данном случае, удобно видеть какие запросы требуют 
авторизованного пользователя. 

Побочный эффект такого "псевдо-языка" ещё в том, что когда я решил менять POE 
на EV+pre-fork, в коде проектов не придётся ничего менять, всё полностью 
совместимо. 
-- 
PEF Developer


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