On 30.04.2007 14:46, Igor Sysoev wrote:
>
>> Не будет ли более логичным взять какой-нибудь готовый язык?
>
> Есть ли язык, который
Parrot - http://www.parrotcode.org/
Есть пример его интеграции с Apache - mod_parrot:
http://www.smashing.org/mod_parrot/
> 1) всегда проверяет результат внутренних операций, в частости
> выделения памяти;
В Parrot по умолчанию используется garbage collector.
Но когда не хватает памяти - то действительно, либо вызывается макрос
PANIC, либо тупо exit(1)
Почему не вызывается Parrot_exit() - для меня загадка, надо будет это
выяснить, патч-то тривиален.
> 2) поддерживает несколько интерпретаторов (как perl multiplicity);
Есть.
> 3) поддерживает неблокирующиеся операции, например,
>
> v = get_variable(...);
> if (v == ПРИДИТЕ_ПОЗЖЕ) ...
>
> ?
Всё гораздо круче - есть continuations.
В целом, создавать код непосредственно на PIR - подход самый
эффективный, но и не очень удобный.
Т.е. возможность создавать на PIR content handlers или authorization
handlers - было бы просто прекрасно, если надо выжать 100% по скорости.
В тоже время, возможно из того же Lua компилировать код в PIR (или
конвертировать байт-код). Хотя эти проекты несколько приторможены.
Более того, можно создать свой язык - поскольку два подхода к описанию
грамматик (PGE & TGE) делают эту задачу не столь уж и сложной.
В любом случае, возвращаясь к ngx_http_script_module, встраивание в
"if"-контекст любого внешнего языка - видится методом сомнительным в
плане удобства/очевидности, так что уж лучше имеющийся набор директив (и
подход) останется как есть.
Текущий же вариант - со встраиваением perl, весьма гибок в плане
расширения функциональности. А использование Parrot позволит увеличить
скорость выполнения еще больше.
--
Sergey Skvortsov
mailto: skv@xxxxxxxxx