0xd34df00d
30.01.2013 23:02
Господа, мне тут стало лень писать const_range и range как два разных класса, поэтому я решил сделать так:
http://bpaste.net/show/dZ7VgTjo6VG2lPJSk...
Использование:
NGramRange<const T*> getFeatures() const { return NGramRange<const T*>(m_features, m_features + size()); }
NGramRange<T*> getFeatures() { return ... more →
0xd34df00d
24.01.2013 13:38
Ух ты, только что пришло в голову, что можно std::min применять и на итераторах, например, std::copy(start, std::min(start + count, scores.end()), ...);
Мелочь, а приятно.
0xd34df00d
22.01.2013 02:43
Каждый раз, когда кто-то пишет reinterpret_cast, б-г убивает котенка.
Кажется, я сейчас убил кучу котят.
0xd34df00d
20.01.2013 21:29
Для того, чтобы поймать баг, воспроизводимый только в релизном билде, потребовалось в нужный if-clause добавить вызов функции примерно такого содержания:
void langCheck (volatile int lang)
{
volatile int i = lang;
i *= 2;
}
и ставить брейк по имени функции. Иначе компилятор все вы-оптимизировал насмерть.
0xd34df00d
20.01.2013 12:05
Убедиться, что шаблонный тип-функтор возвращает lvalue reference?
template<typename T, typename F>
auto UpdateData (const T& newData, F getter) → typename std::enable_if<std::is_lvalue_reference<typename std::result_of<F (MediaInfo&)>::type>::value, void>::type;
Нет, конечно же, можно написать ... more →
0xd34df00d
20.01.2013 11:11
Сегодня плюсы меня ошарашили двумя днищами подряд просто.
Первое — что компилятор, похоже, выводит темплейтные типы «локально», не обращая внимания на остальные аргументы. Иначе http://liveworkspace.org/code/2RfcKl$0 , который чинится либо явным указанием <int>, либо явным указанием типа второго аргумента ... more →
0xd34df00d
17.01.2013 22:24
А gcc уже умеет инлайнить вызовы виртуальных функций в final-классах? Ну или хотя бы избавляться от vtbl.
0xd34df00d
17.01.2013 13:43
А еще, похоже, мне пора начать обмазываться даташитами на процессоры и все такое.
По крайней мере, похоже, для вещи типа
char ch = ...
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
something = true;
gcc генерит жутко неоптимальный код из кучи cmp/jz, которые сбивают нахер бранч предиктор.
В результате ... more →
0xd34df00d
17.01.2013 13:14
std::find отсасывает у strchr с проглотом (4.8 секунды против 0.79). Хотя, казалось бы, инлайн, оптимизации компилятора и все такое.
0xd34df00d
16.01.2013 14:30
Я уже, конечно, ныл об этом, но плюсцы снова соснули, в частности, с невозомжностью вывода типа T в какой-нибудь такой функции:
template<typename T>
Phonon::MediaSource GetRandomBy (QList<Phonon::MediaSource>::const_iterator, std::function<T (MediaInfo)>);
по такому вызову:
GetRandomBy (sources, [] (MediaInfo t) ... more →
0xd34df00d
11.01.2013 15:44
Применяют ли современные компиляторы copy elision для функции типа
foo (T t)
{
vec [somePos] = t;
}
?
Имеет ли смысл здесь писать const T& вместо T, иными словами?
0xd34df00d
11.01.2013 10:32
Система типов в плюсах соснула настолько, что невозможно запилить unordered_set, где у элементов есть неизменяемая часть, от которой и считается хеш, а остальная часть вполне себе может быть mutable.
0xd34df00d
10.01.2013 23:43
Уже два часа открываю файл с рабочим проектом, думаю, как легко было бы реализовать алгоритм на функциональщине, а не на мерзких плюсцах с еблей и говном, закрываю файл и прокрастинирую.
Тут тоже надо найти куда нажать, чтобы починить.
0xd34df00d
10.01.2013 16:16
Написание auto foo = ... вместо const auto& foo = ... может привести к деградации производительности в 30 раз.
Обожаю этот язык.
0xd34df00d
08.01.2013 01:14
Благодаря #tioego прикрутил деманглинг неизвестных имен в неуспешно загруженной библиотеке, что одна из самых распространенных ошибок при погромировании под личкрафты:
[08.01.2013 05:10:13.279] [0x1d1eaf0] [008] Could not load library /usr/local/lib64/leechcraft/plugins/libleechcraft_gmailnotifier.so; Cannot load ... more →
0xd34df00d
04.01.2013 00:05
Краткий смысл в том, что фирма Microsoft изначально не ставила задачу обеспечения работы STL в DLL. В связи с этим, STL содержит код, приводящий к вышеописанным проблемам. Связано это с наличием статических членов в классах, что приводит к разным неприятным последствиям при пересечении указателя или ссылки на ... more →
0xd34df00d
29.12.2012 11:52
Попробовал закоммитить из KDevelop'а. Жить можно, но таки из сосноли удобнее.
0xd34df00d
26.12.2012 11:58
Получил замечательный опыт рефакторинга кода, которому >5 лет и который знатно оброс говном и костылями. Чувствую, будто меня год валяли в грязи и перьях, а теперь я наконец-то помылся.
0xd34df00d
26.12.2012 00:07
2.5 килобайта плюсокода делает коредамп на 662 метра.
0xd34df00d
20.12.2012 22:54
Охуеть, только заметил, что даже в достаточно сложных конструкциях gcc ругается, если write в переменную есть, а read'а из нее потом нет. До чего статический анализ дошел, а.
Правда, уже if (false) { smth } обламывает все эвристики.
0xd34df00d
19.12.2012 22:12
Добавил новый тип в boost::variant, получил ошибок на no known conversion и прочее подобное счастье столько, что они не вмещаются в скроллбек-буфер Konsole, а KDevelop от них завис насмерть.
Люблю плюсы.