25 апр. 2010 г.
21 апр. 2010 г.
20 апр. 2010 г.
10 апр. 2010 г.
6 апр. 2010 г.
Как сломать vim шаблонной магией
Симптомы:
Что происходило:
Пишу в vim'е objname. в момент написания точки vim, консолька а потом и весь гуй повисают.
Жму Ctrl+Alt+F1 через ~минуту вижу черноту текстовой консоли. Логинюсь. Отстает даже ввод текста в текстовом терминале. Таки умудряюсь глянуть top, узреть что все сожрал именно vim. Снимаю его. Переключаюсь обратно в графику. Наступаю снова на те же грабли. Снова привожу все в порядок. Догадываюсь наконец что происходит. Добиваюсь своего :)
Жму Ctrl+Alt+F1 через ~минуту вижу черноту текстовой консоли. Логинюсь. Отстает даже ввод текста в текстовом терминале. Таки умудряюсь глянуть top, узреть что все сожрал именно vim. Снимаю его. Переключаюсь обратно в графику. Наступаю снова на те же грабли. Снова привожу все в порядок. Догадываюсь наконец что происходит. Добиваюсь своего :)
Что происходило:
Vim у меня настроен таким образом, что если сгенерированы теги, он пытается провернуть code completion. Точка после слова в cpp файле - один из триггеров. В коде шаманский рекурсивно определенный класс-шаблон вида:
tempate <class T> class A: public A<T> { ... }; template <> class A<NullT> { };
Означенный объект как раз этого чудо-класса. Vim, пытаясь предложить возможные варианты уходит все глубже и глубже в это наследование, которое несчастному редактору кажется вечным, ведь в его обязанности не входит разбираться со специализациями. Хотя разрабы могли бы хоть ограничение на поиск воткнуть. Быть может соберусь с силами и починю vim :)
Такие дела.
5 апр. 2010 г.
Свежие альбомы Pagan'цев
Итак по порядку. Все ниже написанное ИМХО.
Butterfly Temple - Земля
Альбом хорош, если не сказать больше. Присутствуют "цепляющие" треки. "Смерть" вообще шедевр. 4,5 из 5.
Невидь - Янтарное сердце Арктиды
У меня очень противоречивые чувства относительно этого альбома. С одной стороны звучание стало другим, присутствуют довольно интересные моменты. А с другой - слишком тяжело, нету ничего похожего на "Ярым оком" или "Мокоши прядь храню". Нет даже лютого и бешеного драйва как в "Тени от сейдов" и "Зов новой гипербореи". (Совершенно непонятно почему). Звучание стало намного тяжелее, но нету драйва. Даже скучновато как-то, все наверно потому, что драйва мало. :)
Хотя есть и забавные моменты, только благодаря им и дослушал альбом до конца.
P.S.: Особо доставил следующий текст:
Butterfly Temple - Земля
Альбом хорош, если не сказать больше. Присутствуют "цепляющие" треки. "Смерть" вообще шедевр. 4,5 из 5.
Невидь - Янтарное сердце Арктиды
У меня очень противоречивые чувства относительно этого альбома. С одной стороны звучание стало другим, присутствуют довольно интересные моменты. А с другой - слишком тяжело, нету ничего похожего на "Ярым оком" или "Мокоши прядь храню". Нет даже лютого и бешеного драйва как в "Тени от сейдов" и "Зов новой гипербореи". (Совершенно непонятно почему). Звучание стало намного тяжелее, но нету драйва. Даже скучновато как-то, все наверно потому, что драйва мало. :)
Хотя есть и забавные моменты, только благодаря им и дослушал альбом до конца.
P.S.: Особо доставил следующий текст:
"Постой, не уходи, подруга!
В петлях не болтались мы,
В озорных объятиях друг друга
Не смотрели с мертвой высоты…
Птицы не клевали наши лица,
Ветер не раскачивал тела.
Это ж надо было умудриться-
Не узнать, как вянет голова!
Я и так уже давно без блеска,
Что играл в моих сухих глазах.
Нету в этой жизни интереса,
Кроме нежных слов в твоих устах…
Остальное все туман, пустое,
Головокружение в бреду…
Если счастье есть, оно простое -
Быть в петле с тобою на ветру…"
Путь Солнца - Победитель всегда остается один
Отдельно хочется сказать, что обложка говно. И куда подевалось относительно вменяемое лого группы?
Звук записан весьма годно. Но вокал звучит как-то "приклеено" и совсем не так яростно. Местами вокал блевотен. Вокал на "Эффекте бабочки" мне нравился куда больше. На концерте они забавнее чем в записи. =)
4 апр. 2010 г.
Template Magic Applied
Вот интересно что лучше: скрипт на Ruby, который генерирует:
Или шаблонная магия:
Первое - проще осознать, проще дописать потом ещё тип, быстрее компилируется.
Второе - наркоманство, чтобы дописать ещё тип, надо осознать, долго компилируется. НО проще переделать все encoding'и, и нет внешнего генератора.
Мне больше нравится первый вариант, но отдельные личности против генерации кода внешней тулзой :( Интересно какой из вариантов попадет в release :)
1 #ifndef __ENCODING__ 2 #define __ENCODING__ 3 4 template <typename T> 5 struct encode_type { 6 static const char code = '?'; 7 }; 8 9 template <typename T> 10 struct encode_type<T *> { 11 static const char code = '*'; 12 }; 13 14 template <> 15 struct encode_type<char> { 16 static const char code = 'c'; 17 }; 18 19 template <> 20 struct encode_type<int> { 21 static const char code = 'i'; 22 }; 23 ...
Или шаблонная магия:
1 #include <cstdlib> 2 #include <cstdio> 3 #include <iostream> 4 5 using namespace std; 6 7 namespace Encodings { 8 template <typename H, typename T> 9 struct EL { 10 typedef H Head; 11 typedef T Tail; 12 }; 13 14 template <typename T, char c> 15 struct EP { 16 typedef T Type; 17 static const char code = c; 18 }; 19 20 struct NullType; 21 22 typedef EL<EP<int, 'i'>, EL<EP<char, 'c'>, EL<EP<float, 'f'>, EL<EP<double, 'd'>, EL<EP<bool, 'b'>, NullType> > > > > Encodings; 23 24 template <typename List, typename T> 25 struct EncFor { 26 static const char result = 0; 27 }; 28 29 template <typename T> 30 struct EncFor<NullType, T> { 31 static const char result = 0; 32 }; 33 34 template <typename T, typename Tail, char c> 35 struct EncFor<EL<EP<T, c>, Tail>, T> { 36 static const char result = EP<T, c>::code; 37 }; 38 39 template <typename T, typename Wrong, typename Tail, char c> 40 struct EncFor<EL<EP<Wrong, c>, Tail>, T> { 41 static const char result = EncFor<Tail, T>::result; 42 }; 43 44 template <typename T> 45 char encode_type(void) { 46 return EncFor<Encodings, T>::result; 47 } 48 49 template <typename T> 50 char encode_var_type(T t) { 51 return encode_type<T>(); 52 } 53 } 54 55 int main(int argc, char **argv) { 56 cout << Encodings::encode_type<int>() << endl; 57 58 return EXIT_SUCCESS; 59 }
Первое - проще осознать, проще дописать потом ещё тип, быстрее компилируется.
Второе - наркоманство, чтобы дописать ещё тип, надо осознать, долго компилируется. НО проще переделать все encoding'и, и нет внешнего генератора.
Мне больше нравится первый вариант, но отдельные личности против генерации кода внешней тулзой :( Интересно какой из вариантов попадет в release :)
Подписаться на:
Сообщения (Atom)