Оптимизация байт-кода в PHP

Vladimir
Опубликовано в: C/C++, PHP

Я давно задавался вопросом, насколько «умным» является интерпретатор PHP в том, что касается оптимизации. В частности, меня всегда интересовала поддержка исключения неиспользуемого кода (известная как dead code elimination) и распространение константных значений (constant propagation). И теперь, когда я вплотную занялся изучением внутренностей Zend Engine, у меня такая возможность появилась. Далее

15
Сен
2009

Задача отсюда. Самый простой способ решения:

[-]
View Code Bash
convert image.gif \
    -coalesce \
    -gravity south \
    -draw 'image over 0,0 0,0 "watermark.png"' \
    result.gif"
  • image.gif — исходный рисунок;
  • watermark.png — водяные знаки;
  • result.gif — результат

Параметр gravity задаёт местоположение водяных знаков. Далее

14
Сен
2009

Оборзели

Vladimir
Опубликовано в: Фриланс

Демперы? Да, это плохо. Но хуже, когда заказчики вдохновляются их примером и жутко борзеют. Далее

9
Сен
2009

Расширения PHP и Doxygen

Vladimir
Опубликовано в: C/C++, PHP

Любимые разработчиками PHP макросы и их уровень вложенности зачастую оказываются плохо совместимыми с системой документирования исходных текстов Doxygen.

В зависимости от настроек препроцессора Doxygen (в частности, директивы SKIP_FUNCTION_MACROS) отдельные блоки кода могут быть вообще пропущены; например, в коде:

[-]
View Code C
PHP_INI_BEGIN()
    STD_PHP_INI_BOOLEAN("chuid.disable_posix_setuid_family", "1",     PHP_INI_SYSTEM, OnUpdateBool,   disable_setuid, zend_chuid_globals, chuid_globals)
    STD_PHP_INI_BOOLEAN("chuid.never_root",                  "1",     PHP_INI_SYSTEM, OnUpdateBool,   never_root,     zend_chuid_globals, chuid_globals)
    STD_PHP_INI_BOOLEAN("chuid.cli_disable",                 "1",     PHP_INI_SYSTEM, OnUpdateBool,   cli_disable,    zend_chuid_globals, chuid_globals)
    STD_PHP_INI_BOOLEAN("chuid.be_secure",                   "1",     PHP_INI_SYSTEM, OnUpdateBool,   be_secure,      zend_chuid_globals, chuid_globals)
    STD_PHP_INI_ENTRY("chuid.default_uid",                   "65534", PHP_INI_SYSTEM, OnUpdateLong,   default_uid,    zend_chuid_globals, chuid_globals)
    STD_PHP_INI_ENTRY("chuid.default_gid",                   "65534", PHP_INI_SYSTEM, OnUpdateLong,   default_gid,    zend_chuid_globals, chuid_globals)
    STD_PHP_INI_ENTRY("chuid.global_chroot",                 NULL,    PHP_INI_SYSTEM, OnUpdateString, global_chroot,  zend_chuid_globals, chuid_globals)
PHP_INI_END()

Блок PHP_INI_BEGIN()PHP_INI_END() может быть рассмотрен как функциональный макрос и проигнорироваться Doxygen. Либо, если директива SKIP_FUNCTION_MACROS установлена в No, распознать декларации PHP_INI_BEGIN() и ZEND_DECLARE_MODULE_GLOBALS() как функции.

У меня не получилось никаким настройками (кроме ручного задания соответствия макросов) заставить Doxygen развернуть макросы из zend_module_entry или всякие PHP_MINIT_FUNCTION. Далее

6
Сен
2009