Что означает
blockquote>*p+++c&63
в C ++?
p++
Приращение постфикса. Увеличивает указательp
на следующий символ; Результатом является значение указателя до приращения.*p++
Направленность. Через указатель приводит к результату выражения 1. Результатом является символ, на который изначально указывалp
, то есть'2'
.*p+++c
Дополнение. Добавляет результат 2. иc
. То же, что*p++ + c
*p+++c&63
Побитовое и. Левый операнд является результатом 3., а правый оператор является целочисленным литералом.С полными скобками и разумным интервалом:
(*(p++) + c) & 63
Вот отформатированная, правильно сформированная версия, которая не выдает предупреждений:
#include <stdio.h> int main(int, char**a) { const char* p = "25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_."; for(char c = a[1][0]; *p; putc(c=((*p++ + c) & 63) + 32, stdout)); }
[1124 ] Строка"25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_."
, вероятно, является зашифрованным текстом. Программа расшифровывает его, если ему дан ключ в качестве аргумента. Первый символ первого аргумента используется в качестве ключа.
Программа для перебора ключей:
blockquote>#include <stdio.h> int main() { for (char i = 0; i < 127; i++) { const char* p = "25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_."; printf("%c: ", i); for(char c = i; *p; putc(c=((*p++ + c) & 63) + 32, stdout)); putc('\n', stdout); } }
Чего мне не хватает? [ 1127] blockquote>
- Порядок операторов 2. Предполагается, что ключ буквенно-цифровой.
Армин предложил предварительно скомпилировать шаблоны Jinja2 в код Python и использовать скомпилированные шаблоны в производстве. Итак, я сделал для этого компилятор / загрузчик, и теперь он обрабатывает некоторые сложные шаблоны в 13 раз быстрее, избавляясь от всех накладных расходов на синтаксический анализ. Соответствующее обсуждение со ссылкой на репозиторий находится здесь .
Хорошо, люди, это - то, что я получил сегодня на #pocoo:
[20:59] zgoda: привет, я хотел бы знать, мог ли я оптимизировать свой jinja2 процесс создания среды, проблему-> Оптимизирующий создание Среды Jinja2
[21:00] zgoda: мне производили профилировщика из "холодного" приложения-> http://paste.pocoo.org/show/107009/
[21:01] zgoda: и для "горячего"-> http://paste.pocoo.org/show/107014/
[21:02] zgoda: я задаюсь вопросом, мог ли я несколько ниже стоимость ЦП создания среды для "холодных" запросов
[21:05] mitsuhiko: zgoda: поместите огибающее создание в модуль, который Вы импортируете
[21:05] mitsuhiko: как
[21:05] mitsuhiko: от yourapplication.utils импортируют ENV
[21:05] zgoda: это уже там
[21:06] mitsuhiko: хм
[21:06] mitsuhiko: я думаю, что проблема состоит в том, что шаблон перекомпилирован каждый доступ
[21:06] mitsuhiko: к сожалению, gae невероятен ограниченный, я не знаю, существует ли очень, я могу в настоящее время делать
[21:07] zgoda: я попробовал Джинджей bytecache, но она не работает над напоминанием (на на dev сервере)
[21:08] mitsuhiko: я знаю
[21:08] mitsuhiko: appengine не имеет маршала
[21:12] zgoda: mitsuhiko:спасибо
[21:13] zgoda: я надеялся, что делаю что-то не так, и это может быть оптимизировано...
[21:13] mitsuhiko: zgoda: следующий выпуск будет идти с улучшенной поддержкой appengine, но я еще не уверен, как реализовать улучшенное кэширование для одного
Выглядит, что Armin знает о проблемах с байт-кодом, кэширующимся на AppEngine, и имеет некоторые планы улучшить Jinja2, чтобы позволить кэшироваться на GAE. Я надеюсь, что вещи будут поправляться со временем.
Согласно этому рецепту Google вы можете использовать memcache для кэширования байт-кодов. Вы также можете кэшировать содержимое файла шаблона. Все по одному рецепту