Где может потребоваться препроцессор C

| Комментариев: 3

Время от времени в интернетах возникает вопрос о том, как спрятать исходники при передаче заказчику проекта на перле. Известно, что эта задача не имеет решения.

Но при работе с внешними заказчиками может возникнуть иная задача: как не передать лишнего.

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

Другой пример — требуется предоставить демонстрационную версию программы.

Простое решение, для которого даже не потребуется установки никаких дополнительных утилит, — воспользоваться препроцессором С. Компилятор gcc не в счет: он наверняка уже установлен в системе.

package My::Module;
. . .
#ifdef DEMO_MODE
say rand(10);
#else
say $this->real_method();
#endif
. . .

Еще один пример предложенного подхода — эмуляция встроенной функции say, если потребуется развернуть приложение, в котором из возможностей версии 5.10 используется только say, на сервере со старым перлом:

#ifndef SAY
sub say {
   print @_, "\n";
}
#endif

Все, что требуется для того, чтобы на основании таких заготовок получить код для передачи, — запустить препроцессор C:

$ gcc -DDEMO_MODE -E mymodule.pm.c > mymodule.pm

Комментариев: 3

say, кстати, можно попробовать сгенерировать #define-ом.

Вообще сишный препроцессор проще вызывать с помощью cpp.

Спрятать исходники - задача возможная. Filter::Crypto или Module::Crypt.

Подпрограмму для say проще всего включать всегда - say в 5.10 включается только при гыe feature 'say' или use 5.010;

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 05.10.2009 16:19. Автор — ash.

Предыдущая запись — Доступный Perl (3)

Следующая запись — Perl-воркшоп в Казахстане

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.