Вышла (http://www.php-qb.net/index.php/2-uncategorised/18-version-1...) новая версия расширения PHP QB 1.3 (http://www.php-qb.net), предоставляющего (https://github.com/chung-leong/qb/wiki/Introduction) средства для написания требовательных к производительности приложений на языке 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, в нём нет ассоциативных массивов, в силу этого действия операторов также во многом отличаются (https://github.com/chung-leong/qb/wiki/Differences-Between-P...) от эталонной реализации 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 (https://github.com/chung-leong/qb/wiki/blend).
- Добавлена инструкция умножить-аккумулировать. $d = $c + ($a * $b) сейчас производится в одну инструкцию, с по существу бесплатной операцией сложения.
- Импортированные ядра Adobe Pixel Bender сейчас работают с предумноженным альфа-каналом так как они должны.
- Добавлена поддержка Mac OS X Mountain Lion.
<center><a href="http://www.php-qb.net/images/fannkuch-chart.png"><... src="http://www.opennet.me/opennews/pics_base/0_1371835414.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;" title="" border=0></a></center>
На графике показана производительность PHP QB (http://www.php-qb.net/index.php/2-uncategorised/3-on-perform...) в тесте fannkuch-redux из Computer Language Benchmark Game (http://benchmarksgame.alioth.debian.org). (1) Zend PHP, (2) PHP+QB в режиме интерпретации и (3) в режиме компиляции (с использованием gcc).<center><a href="http://www.php-qb.net/images/crc32-chart.png"><img src="http://www.opennet.me/opennews/pics_base/0_1371835395.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;" title="" border=0></a></center>
На графике показана производительность PHP QB при рассчёте контрольной суммы CRC-32 для данных размером в 10мб.URL: http://www.php-qb.net/index.php/2-uncategorised/18-version-1...
Новость: http://www.opennet.me/opennews/art.shtml?num=37244
PHP+QB (compiled) практически догоняет Native код по производительности?
Современные игрушки можно писать на PHP?
Любую задачу можно написать на любом языке, вопрос всего лишь программных оберток
> Современные игрушки можно писать на PHP?для админов. обычным людям на серверах игры ни к чему.
Какие Вы выводы делаете, однако, при том даже, что ОСИ НЕ ПОДПИСАНЫ!
А для JavaScript есть чтото похожее, хочу игрушку запилить? Fps
Для JS запилили asm.js недавно вроде, да и игровых движков на нем есть небольшая кучка
Двиг с нуля придётся делать.
asm.js не совсем то.
На хабре один пацанчик на JS написал первокваку. Работает хорошо. Двигло свободное, бери да перепиливай под себя.
http://habrahabr.ru/post/177159/
Очень плохая идея, могут наехать, очевидное нарушение патентов, а может и копирайтов.
> Очень плохая идея, могут наехать, очевидное нарушение патентов, а может и копирайтов.Нет
Ребята из Mozilla однажды несколько лет назад, запилили целый Doom 1 или Doom 2, точно не помню, на Java вроде.Так весь их труд очень быстро похерили.
Новость про них была на опеннете, а по ссылке, написано про нарушение копирайтов или нечто похожее. Можешь найти, если интересно.
WebQuake — это двиг для конкретной старой игрушки — Quake 1, мне то он зачем сдался?Если я хочу делать новый качественный продукт, зачем мне сверхустаревший движок со старыми принципами и ошибочными решениями для какой-то игры каменного века?
Я что, должен подстраиваться и всю игрушку писать под этот шизофреничный движок? В ущерб своей психике, нервам, графике, геймплею и FPS? Это что за ересь?
Вы меня не так поняли кажется, я вовсе не собирался делать игру похожую на Quake 1.
Сейчас всё по другому можно сделать, гораздо экономнее и fps больше выйдет.
Разумеется переписывать готовый движок на другом языке гораздо легче и быстрее, особенно если программы трансляторы задействовать.
Но мне нужен новый качественный движок с современными принципами, и изначально ориентированный на работу в браузере, всё это должно быть учтено заранее, движок пишется с нуля ориентируясь на это.
Без всяких глупостей и шизофрений, которые были актуальны или нужны 17 лет назад.
ну так бы и сказал, что у тебя принципиально новый движок
ну так напиши.
Я понимают пхп аноним, не шарит, но моделаторы то.
Хотя бы графики уберите с холерными данными.
Битрикс им можно скомпилировать? Вот кто особые требования по производительности предъявляет.
> Битрикс им можно скомпилировать? Вот кто особые требования по производительности предъявляет.Битрикс писался с учётом особенностей MS SQL, потому и тормозит на всём остальном (да и на нём тоже), пыха тут не поможет.
> Битрикс им можно скомпилировать? Вот кто особые требования по производительности предъявляет.Код битрикса править все равно придется.
Это больше похоже на ассемблерные вставки в исходнике на С/С++.
Если хотите оптимизировать функцию, нужно четко указать типы входных данных.
И если функция работает со строками, надо ещё посмотреть, будет ли профит.
> В то время как PHP является отличным языком для создания сложных веб приложениинельзя же так неаккуратно делить на ноль
Это была рекламная пауза.
Интересно, а насколько совместим сабж с Zend PHP? Будет ли работать на нём тот-же Drupal?
фигово совместим.
нет, например, словарей.
>> Memory usage during compilation was significantly reduced. QB can now be compiled comfortably on system with 2 gig of physical RAM (provided some swap space is available).Петросяны
> обавлена инструкция умножить-аккумулировать. $d = $c + ($a * $b) сейчас производится в одну инструкцию, с по существу бесплатной операцией сложения.lea? :-)
mla
Даёшь больше костылей, хороших и разных!
> Даёшь больше костылей, хороших и разных!Смолистых-деревянных, оне горятъ лутчее.
Забавно ... сперва мы создаем интерпретатор да еще с динамической типизацией, потом набираем шишки ... а потом пританцовываем к той-же печке: Бинарные сборки, компиляция и т.д. ....
Сначала мы изобрели молоток, а потом уже гвозди. И чо?)
пальцы уже отбиты, вот чё))
Нет, производительность, конечно, хороша. Но блин то, как это на соплях и скотче примотано - вызывает только "oh, shi...". PHPDoc, какая-то невменяемая типизация...
Короче, я лучше поюзаю HHVM там, где нужно, и подожду JIT в движке PHP, чем связываться с этим.
Интересная штука, если вы готовы переписывать оптимизируемые функции.
Хотя не проще тогда сразу на компилируемом языке писать критические вещи?
Это как Phalcon в PHP, но для особо тонких ценителей?
Так, глядишь, наконец плавненько уйдем от нетипизированных языков..
> Так, глядишь, наконец плавненько уйдем от нетипизированных языков..Куда уходить-то? Для этого уже давным давно есть C - вполне себе строго типизированный универсальный язык.
Разве что вполне себе. Слишком опрометчиво для строго типизированного enum от int не отличать.
с какого субботнего похмелья он enum от int не отличает? Ну-ка, определение enuma озвучьте?)
ты эта... не относишься к тем самым, которые считают c/c++ одним языком?
> ты эта... не относишься к тем самым, которые считают c/c++ одним языком?из чего следует столь нелепое предположение?
QB это Куиск Басек?