войти зарегистрироваться

ПрограммированиеМетапрограммирование

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

Итак, попробую дать альтернативное определение: метапрограммирование — это парадигма построения кода информационной системы с динамическим изменением поведения или структуры в зависимости от данных, действий пользователя или взаимодействия с другими системами. Задачи метапрограммирования: повышение абстракции кода и его гибкости, повторное использование, ускорение разработки, упрощение межсистемной интеграции. На самом деле, все мы в той или иной мере используем метапрограммирование, я даже сейчас могу вспомнить, как использовал его 15 лет назад, даже не подозревая как оно называется, тогда я еще не мог провести какой-либо классификации.

Вирусы (и антивирусы)Интересная техника сокрытия кодов JS «вируса»

Сегодня скинули код, дропающий на машину штатный вирус «отправьте SMS для разблокировки». Предысторию и методику чистки изложил force

Попробовал расковырять. Взял код, отформатировал, стал дебагать… Хм, интересно… В коде идет вызов (после приведения к читабельному виду)

window['eval'](var2);

А вот в var2 — бинарные данные. Ух ты… Но ведь eval не может выполнять бинарные данные!!!

Персональные блоги firebug + eval + setTimeout = неопределённоcть в firefox 3

При включенном firebug-e если в коде после установленного setTimeout-a есть функция eval, FF начинает выполнять setTimeout не дожидаясь выполнения всего кода.

JavaScriptВызов JavaScript-функции по ее названию

Иногда в Javascript'е бывает необходимо выполнить функцию зная только ее название, и это название содержится в строке, например вот так:
<code>var funcName = 'someFunc';</code>

Перед мной стояла такая задача: в AIR-приложении нужно было выполнять функции, названия которых приходят с AJAX-ответом. Sandbox AIR'а в следствии ограничений безопасности не позволяет выполнять функции при помощи eval'а. Так что, ограничения стояли такие: не использовать функции eval() и setTimeout()/setInterval().

PHPEval или include?

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

Когда пришлось реализовывать дерево комментариев, столкнулся с необходимостью рекурсивного вызова представления (view в MVC). Так как представления у меня, да и практически везде, — это обычные файлы с кусками HTML-кода и возможностью вставки PHP, то подключаются они с помощью include. Мне стало не по себе, когда представил как этот include вызывается рекурсивно сотни раз. Первая мысль — засунуть файл представления при первом запросе в память и потом выполнять его через eval. Такой подход позволит кешировать код представлений, и даже хранить его в БД. Так как eval кушает только PHP, а представления у нас чистым PHP-кодом не являются, то обрамляем содержимое в '?>' и '<?php'.