Вышла новая версия расширения PHP QB 1.3, предоставляющего средства для написания требовательных к производительности приложений на языке PHP.
В то время как PHP является отличным языком для создания сложных веб приложении, он имеет несколько определённых ограничений. Написание кода который выполняет низкоуровневые, интенсивные по вычислениям задачи, в основном не практично - он просто будет слишком медленен. Расширение QB направлено на устранение этой слабости PHP. Транслируя Zend опкод и исполняя его с помощью статически типизированной виртуальной машины или преобразуя его в нативный исполняемый код, QB обеспечивает колоссальный прирост производительности (от 5 до 20 раз). Добавленная мощность позволяет программистам на языке PHP делать вещи которые они не могли сделать ранее, такие как сложные операции с видео и изображениями на уровне пикселей.
В QB программа может быть скомпилирована как в родной для платформы код, так и в байткод для исполнения в виртуальной машине. Код, использующий QB, можно как вызывать из классов, написанных для Zend PHP. Трансляция выполняется на уровне отдельных функций и затрагивает только специальным образом помеченный код. Взаимодействие кода PHP QB и кода PHP осуществляется бесшовно - после компиляции функции на PHP QB становятся видимы из PHP-приложения как обычные функции. Таким образом с использованием PHP QB могут выполняться только критичные к производительности участки кода.
Особенностью расширения PHP QB является то, что оно использует сведения указанные в блоках PHPDoc для получения информации о типах данных. Хотя PHP QB в основном совместим с Zend PHP, он имеет несколько отличий которые позволяют его считать отдельным языком. Например массивы являются просто блоками памяти в PHP QB, в нём нет ассоциативных массивов, в силу этого действия операторов также во многом отличаются от эталонной реализации Zend PHP. Большинство операторов в PHP QB поддерживают на входе как скалярные данных так и массивы. Таким образом реализуется принцип "одна инструкция, много данных". Например результатом $b = array(1, 2, 3, 4); $b += 10; будет [11, 12, 13, 14]. В PHP QB нет типа строка, это просто массив uint8.
Основными нововведениями в версии PHP QB 1.3 являются улучшение производительности компилированного кода, также сокращение использование памяти при компиляции. Некоторые изменения:
- Для преобразований float-в-int, когда это возможно, используется инструкции SSE.
- Добавлена функция blend.
- Добавлена инструкция умножить-аккумулировать. $d = $c + ($a * $b) сейчас производится в одну инструкцию, с по существу бесплатной операцией сложения.
- Импортированные ядра Adobe Pixel Bender сейчас работают с предумноженным альфа-каналом так как они должны.
- Добавлена поддержка Mac OS X Mountain Lion.
На графике показана производительность PHP QB в тесте fannkuch-redux из Computer Language Benchmark Game. (1) Zend PHP, (2) PHP+QB в режиме интерпретации и (3) в режиме компиляции (с использованием gcc).
На графике показана производительность PHP QB при рассчёте контрольной суммы CRC-32 для данных размером в 10мб.