Вышла очередная версия шаблонизатора CTPP (http://ctpp.havoc.ru/) (2.4) - высокопроизводительного аналога хорошо известных библиотек Template Toolkit, HTML::Template, HTML::Template::Pro. Отличается высокой скоростью работы (в 2 - 3 раза быстрее HTML::Templte::JIT, в 25 - 30 раз быстрее Template Toolkit), расширяемостью функционала и удобством работы. В новой версии введены операторы <TMPL_call и <TMPL_block.
Библиотека отлично документирована, есть инструкции по установке, примеры и учебники для Perl, PHP и С++. CTPP написан на С++. Поддерживаются операционные системы Linux, FreeBSD и Solaris на архитектурах i386, amd64, sparc и ultra sparc. Имеет интерфейсы для языков Perl, PHP и Python. Лицензия - модифицированная BSD.URL: http://ctpp.havoc.ru/
Новость: http://www.opennet.me/opennews/art.shtml?num=19809
Как замена HTML::Template может и пройдёт. Но Template-Toolkit точно заменяет? Что-то по описанию слабовато.
до ТТ и близко не дотягивает. после ТТ вообще ни на что смотреть не хочется. и не сказал бы что из-за TT у меня что-то тормозило.
>до ТТ и близко не дотягивает. после ТТ вообще ни на что
>смотреть не хочется. и не сказал бы что из-за TT у
>меня что-то тормозило.Абсолютно поддерживаю!! Интересно как они c TT сравнивали небось в CGI каждый раз создавая обьект
Шитухин - ЦГИ? Бл###, не знаешь о чем говоришь - не тявкай! Этот шаблонизатор (на равне с CAS - C++ Application Server) разрабатывался Шитухиным для майл.ру, использовался в жж/суп фабрик, и актифно юзается в высоконагруженных веб проектах многими крцпными компаниями. Знал бы что стоило его уговорить полностью открыть его проекты для людей, - не п##дил бы напрасно!!!
AFAIK, в жж/суп фабрик афтар был единственным кто это юзал. и последним. и неплохо бы примеры *крупных* компаний, где это реально юзается. а то что-то не верится, чесслово.
компании палить не буду т.к. сам им это дело и прикручивал.
насчет афтара - не он один...
ссылок нет - слиф защитан.
специально поинтересовался: суп не юзает *это* - не знаете, не гоните. а знаете - сцылки в студию
Еще одна попытка написать PHP.
А мне гораздо больше нравится чем TT. По фичам все умеет, по скорости реально сильно лучше.
Уже год использую, очень быстрый всем нравится.
когда время ответа сервера около 20 миллисекунд, шаблонизатор оказывает существенное влияние на общее время.
>А мне гораздо больше нравится чем TT. По фичам все умеет, по
>скорости реально сильно лучше.по скорости-то оно лучше, а по удобству? можно, скажем, хэндлер запроса передать внутрь шаблона, чтоб не фетчить сначала все записи и не передавать массив?
интереса ради сравнил производительность ctpp и TT: при обработке миллиона шаблонов (простых) ctpp быстрее в 4 раза -- если шаблон текстовый и в 8 раз -- если шаблон откомпилирован. ну пусть в 10, но не в 25-30! :)
>интереса ради сравнил производительность ctpp и TT: при обработке миллиона шаблонов (простых)
>ctpp быстрее в 4 раза -- если шаблон текстовый и в
>8 раз -- если шаблон откомпилирован. ну пусть в 10, но
>не в 25-30! :)Как сравнивали? На чем? Какие конструкции использовали?
сравнивал http://ctpp.havoc.ru/helloworld_perl.html с аналогичным на ТТ, по результатам time.
>>интереса ради сравнил производительность ctpp и TT: при обработке миллиона шаблонов (простых)
>>ctpp быстрее в 4 раза -- если шаблон текстовый и в
>>8 раз -- если шаблон откомпилирован. ну пусть в 10, но
>>не в 25-30! :)
>
>Как сравнивали? На чем? Какие конструкции использовали?а на примере http://ctpp.havoc.ru/newslist_perl.html ctpp быстрее TT в 2 раза с нескомпилированным шаблоном и в 7 со скомпилилированным.
freebsd 7.0, perl 5.8.7, CTPP2 v2.3.1, HTML-CTPP2-2.3.11, TT 2.14
а вот навскидку перлы из кода:
1. Индусский свичь src/CTPP2BitIndex.cpp:132
2. Мега fault-tolerant код src/StaticData:110
3. Аццкий кастинг (вы таково не видели!) src/VMFileLoader.cpp:101
4. Еще fault-tolerant'нее чем п.2 src/VMFileLoader.cpp:168
malloc() конечно всегда сработает, ога. fread() тем более.
5. Индусский иф src/VMSTDLib.cpp:101
6. Спагетти-свичь на 1213 строк src/VM.cpp:175не-не-не. как-нибудь обойдемся.
зы: курите код иногда, прежде чем юзать.
>а вот навскидку перлы из кода:
>1. Индусский свичь src/CTPP2BitIndex.cpp:132не нашел о чем ты...
>2. Мега fault-tolerant код src/StaticData:110
это некритичная точка - тут можно.
>3. Аццкий кастинг (вы таково не видели!) src/VMFileLoader.cpp:101
это фишка, ля, а не баг!
>4. Еще fault-tolerant'нее чем п.2 src/VMFileLoader.cpp:168
> malloc() конечно всегда сработает, ога. fread() тем более.в догонку к 2 - то-же самое.
>5. Индусский иф src/VMSTDLib.cpp:101
>6. Спагетти-свичь на 1213 строк src/VM.cpp:175как бы тебе объяснить что делает компилятор со свичем... про бинарные деревья слышал?
в общем - молчал бы лучше!!!
ну если комуто нравится индусский код-стайл, я ж разве против? юзайте пожалста.
и этож только мое скромное мнение, что код индусский. комуто мож и нравится.
некоторым вообще вот кажется что malloc() в прогах на це++ да еще в таком количестве - моветон. наверное все они лохи. а про бинарные деревья.. погугли про computed goto. и про spaghetti-code.
зы: не обижайтесь. не обижаться надо, а фиксить баги, ога
ХЗ, есть же пишушие на бейсике и смотрящие на всех с высока!
сам из цпп довольствуюсь классами, стл и шаблонами - остальное по-старинке, хоть тем-же маллоком...
по поводу свича - каким образом вы бы переписали код?
//Не разработчик данного проекта, просто интересно.
1. это большое исследование типа как с этим борются люди.
http://www.jilp.org/vol5/v5paper12.pdf
2. можно содержимое кейсов то в методы поубирать (это про спагетти). хрен то конечно один, но читается/понимается проще.
зы: это все имхо, конечно
Содержимое кейзов в отдельные методы??
вы именно об этом кейзе, на который сослались, говорите?switch(iBitPos)
{
case 0:
return iResult & 0x01;
...
case 6:
return iResult & 0x40;
case 7:
return iResult & 0x80;
}
конечно нет, про спагетти из VM.cpp. ссылка на статью тоже про него.
а этот мелкий свитч вообще пример из книги "магия битов для блондинок"
>а вот навскидку перлы из кода:
>1. Индусский свичь src/CTPP2BitIndex.cpp:132Самый нормальный свич. Оптимизатором раскладывается в GOTO таблицу. Учите матчасть, как строятся современные компиляторы.
>2. Мега fault-tolerant код src/StaticData:110
Нет смысла там проверять, сколько и чего выделяется.
>3. Аццкий кастинг (вы таково не видели!) src/VMFileLoader.cpp:101
Нормальная проверка на big/little endian и совместимость типа double ieee 754 на разных платформах.
>4. Еще fault-tolerant'нее чем п.2 src/VMFileLoader.cpp:168
> malloc() конечно всегда сработает, ога. fread() тем более.Напишите автору bugreport.
>5. Индусский иф src/VMSTDLib.cpp:101
Ну, можно сделать через массив, но зачем оно?
>6. Спагетти-свичь на 1213 строк src/VM.cpp:175
Обычный такой switch. Не нравится? Придумайте, как переписать более лаконично.
>Самый нормальный свич. Оптимизатором раскладывается в GOTO таблицу. Учите матчасть, как строятся
>современные компиляторы.это не так. вернее не совсем так. могу и пруф-линк поискать.
>Нет смысла там проверять, сколько и чего выделяется.
в лабораторной работе - да. но в высоконагруженном проекте, имхо, стоило бы
>Напишите автору bugreport.
тут согласен
>Ну, можно сделать через массив, но зачем оно?
ну если это массив хэшей, то получаем +читаемость, +перфоманц, -хардкод
>Обычный такой switch. Не нравится? Придумайте, как переписать более лаконично.
дело не в лаконичности, а в читаемости. лечится рефакторингом. а про перфоманц
тут: http://www.opennet.me/openforum/vsluhforumID3/48111.html#17
кстати, как раз интерпретаторы байт-кода виртуальных машин. имхо, познавательное чтиво
Судя по вечно всплющамся от темя линкам - ты теоретик и никак толком доказать кроме как линком на другого теоретика не можешь... В общем глубоко твои доводы и линки с терминами и индусскими стилями. Чтоб поверить в то что тебе пытаются объаснить и до чего-то дойти - поставь дизассемблер и выкини из башки всю ту лажу, которую ты где-то умудрился подцепить!
>Судя по вечно всплющамся от темя линкам - ты теоретик и никак
>толком доказать кроме как линком на другого теоретика не можешь...точно, щяс начну прямо сюда статьи копипастить. кстати, по линке не вредно бы было и сходить - такое исследование может позволить себе не каждый.
зы: не надо такой вот враждебности. не украшает. хотите флеймить и холиварить - на лор.
а есть ли cgi mvc c++ framework ?
сколько ищу, так ничего не нашел (
>а есть ли cgi mvc c++ framework ?
>сколько ищу, так ничего не нашел (Есть: CAS. http://cas.havoc.ru/download/
не впечатлило ((
вопрос открыт! ((
>не впечатлило ((интересно узнать что?
да все! (
перепробовал кучу существующих lib для написания на с++, пока ничего толкового не нашел! (
cas знаю с версии 3.1.7.
хочется нормальный mvc c++ framework, типа zend framework, но для c++!
когда человек на вопрос "что именно" говорит "да все" - это значит он явно п из дит!
вы вообще его поднимали? или может расскажите что именно не устроило?
>вы вообще его поднимали? или может расскажите что именно не устроило?ничего, что я скажу?
специально скачал это.
имхо, праздник хардкода, копипаста и большинства изученных антипаттернов.
просто грепнуть слово goto - и все, диагноз ясен - пожизненный газенваген с гвоздями.
зы: может, конечно, это экстремизм.. мяхче говоря, не знаю за какие бабки я п стал это юзать
+1
не хотел отвечать этому пеньку, но ты изложил мои мысли на 100% )))
все еще не п из ди это не твои слова и ты его даже не ставил!
грепни ядра линуха и фри на готу, а либц еще и на лонгджампы, - потом говори, чтоб ты использовал, а что нет.ты привык безоговорочно верить тем стериотипам, которыми пропитан инет, вбивающим в головы названия "плохих стилей" программирования (спагетти, индусский, - гдеб такого понабраться?)... между тем гото является аналогичным интструментом while(), for() и тд... дизасебли любой свои бинарь и скажи что ты его тоже больше запускать не будешь. одно дело что в си готу зашит неявно, другое дело - явное его определени. а статьи, цель которых и была очернить такие стили и механизмы предназначены по-большому для зеленых, любищих обходится одним гото, либо коряво его использующих (то-же самое и к спагетти и к индусам).
в общем, что тебе, автор, что тебе, зеленый аноним, - ор т.к. бабка надвое сказала и статью в инет написала - по меньшей мере называется п из дяшем. в общем, ребят если вы с таким отношением будете ко всему подходить - вам придется с 0 переписывать все под себя, да так чтобы ни одну строчку кода нельзя было назвать индусской, спегетти и како-то еще, про что еще не успели сказать плохо!
не надо адвокатить кривые руки - их выпрямлять надо.
ядро на сях писано - другой все-таки язык, не принимается.
переписывать чтоб нормально работало как раз часто приходится. и не под себя, а просто чтоб не падало.
зы: что-то мне подсказывает, что вами ни одного компилятора не написано. а советы от нубов я не принимаю.
немного ниже ты написал про культуру кода, тут ты пишешь про разные языки и приемственность готу для си. найди еще раз те функции с готу, и глядя только в тело функции ответь - будет ли на си скомпилен этот код в то-же самое? правильно - ничем от си не отличается, даже бинарь будет тот-же.
серьездно, по-опыту - готу чато бывает облегчает жизнь: повышает читабильность и скорость особенно в критичных местах. мы сейчас спорим ниочем - если привык жестко избегать готу, то имхо это только тебе в минус, т.к. ты осознанно избавляешь себя от инструментов тебе же и данных - твое имхо может быть другим.
в общем, если сможешь реализовать эти функции без готу, индусского и спагетти кода, при этом не раздувая код и не в ущерб скорости - пиши сюда и авторам, тогда никто и слова не скажет.
>просто грепнуть слово goto - и все, диагноз ясен - пожизненный газенваген
>с гвоздями.Самое смешное что компилер все-равно странслирует все ваши выкрутасы в JMP-ы, сколько бы вы там не выгибались (по сути то самое goto и есть). Забыв у вас спросить хотите вы этого или нет.Процессоры так работают.А чистоплюйство - круто конечно, но если для обхода goto автору приходится строить двухэтажный велосипед подпертый вычурными костылями и впятеро объемнее (а такое тоже бывает) - еще вопрос кого там в газенваген, имхо.
еслиб там проблема была только с goto, еще б ничего.. там куда хуже все.
куда компилер что странслирует я примерно представляю. однако и о культуре кода неплохо бы помнить. ибо по достижении проектом некой критической массы его станет просто нереально поддерживать. рефакторинг - не такое уж сложное дело. и времени отнимает немного (когда в меру)