@hirthwork

Тег programming в блоге hirthwork

hirthwork

Я очень медленный, но оказывается в шланг уже 128-битные атомики завезли:

$ cat main.cpp
#include <atomic>
#include <iostream>

struct foo {
    uint64_t a;
    uint64_t b;
};

struct bar {
    uint64_t a;
    uint64_t b;
    uint64_t c;
};

int main(int, char**) {
    std::cout << std::atomic<foo>().is_lock_free() << std::endl;
    std::cout << std::atomic<bar>().is_lock_free() << std::endl;
    return 0;
}

$ clang++ -stdlib=libc++ -nostdinc++ -latomic -I/usr/include/c++/v1 -march=native main.cpp
$ ./a.out
1
0
hirthwork

Когда в проекте обнаруживается критическая "точка роста" и ты понимаешь, что тебе нужно её закрыть в этом квартале

hirthwork

hirthwork

Dat feel, когда ты наконец-то поймал место где происходит проезд по памяти и сразу же по сообщению от asan понял как это починить. Можно идти домой

hirthwork

Появилась задача: иметь тредпул, в котором задачи можно прерывать по истечении некоторого таймаута.
Вся гуглёжка сводится к "нет, так нельзя".
Ну мы же инженеры, пьём трипл ипу из черепов фронтендеров, так что откопали, что если в джава послать треду SIGBUS, то он выбросит java.lang.InternalError, который успешно пролетит весь стек вызовов, пока ты его не поймаешь.

Скоро сказка сказывается, да не скоро код пишется.
Прерываемый тред ощущает последствия сигнала иногда за 700мс, а иногда и за несколько секунд (текущий рекорд — 111 секунд).
А если пустить это тестироваться в бесконечном цикле, то итераций через 50 случается SIGABRT. В общем, я уже даже jdk в дебаге собрал и принтфов там наделал, но до конца механику пиздеца пока не понял.

hirthwork

Если хочешь много секса, много ласки и любви, короче говоря я заиспользовал в проде регулярки. PCRE. А потом несколько дней искал, почему у меня программа со stack overflow падает. И даже чтобы выяснить, что дело в stack overflow у меня ушло два дня.
Не используйте неограниченные квантификаторы в проде, пацаны (и замечательная Хильди)

hirthwork

Дожили. Нашёл false positive в msan'е шланговском.

hirthwork

У меня была функция и в этой функции я передавал переменную со стека в другую функцию «по указателю», а затем значение этой переменной возвращал тому, кто мою функцию вызвал.
И проверял я return value другой функции и говорил он мне, что всё хорошо.
И снаружи всех функций я печатал значение возвращённой переменной.
Но однажды пришёл msan и в момент печати сказал, что значение функции не проинициализиовано.
Он был совсем не против пока я передавал переменную. Молчал, когда я присваивал её значение другим переменным, но вот позволить печатать эту переменную он мне не мог. Безжалостно он убивал мою программу при попытке узнать реальное значение переменной.
И я был уверен, что в моём коде нет ни единой ошибки. Но как я мог это доказать, если не мог ни распечатать переменную, ни даже сравнить её значение?
Чему равно значение переменной значение которой нельзя узнать?

hirthwork

Чем больше я читаю документацию по PCRE (не по синтаксису, а по сишной либе v8.44), тем больше склоняюсь к мысли, что большинство пользователей PCRE даже не подозревают насколько это мощная библиотека и сколько в ней тонкостей.
Тред: один рецомменд — один факт о PCRE.
0. Вызов pcre_study без включённого JIT соптимизирует только повторный pcre_exec одной и той же строки на одной и той же регулярке. Зато если PCRE скомпилен с JIT и в pcre_study передан флаг PCRE_STUDY_JIT_COMPILE, то скорость выполнения регулярок запросто может увеличиться в 10 раз.

hirthwork

hirthwork


А будешь выёбываться — посадят в пресс-хату с жавскриптерами, которые тебе объяснят, что электрон — это будущее десктоп разработки.

hirthwork

Если жизнь и рассудок дороги вам — не пишите кастомные компараторы для json-объектов.
Сделал рефакторинг, запустил тесты. Вижу, что различается значение двух полей.
Полтора часа искал, почему различаются.
Оказывается «не различаются» — мой компаратор погрешности вычислений просто умеет игнорировать и -0.3E-8 и 1.4E-8 признает одинаковыми. А вот из-за того что я опечатался в имени второго поля он выводил дифф по точным значениям и показывал различие в первом поле в ом числе.

hirthwork

Восемнадцатилетний Хворк:

hirthwork

hirthwork

hirthwork

Так в первой книге, Петер обращает внимание на опасность полярных путешествий и вспоминает как однажды во время метели он ночевал в снежной яме, верх которой за ночь полностью замел и заблокировал снегопад. Таким образом, Фройхен очутился в смертельно холодной ловушке. Для спасения Петер слепил долотообразный инструмент из своих собственных экскрементов и проделал им себе выход наружу.

А вы «из говна и палок». Нормальные люди инструменты просто из говна лепят

hirthwork

То чувство, когда уже заебало ебаться со своим DSL в конфигах, но при этом не знаешь ни одного встраиваемого языка со строгой типизацией

hirthwork


ненуачо, живой пирожочек тырит мемасики с реддита, я тоже хочу вам показать, что не только с вкщечки тырить умею

hirthwork

Здравствуй, резиновая уточка, сейчас я тебе расскажу, что я хочу, а ты напомнишь название структуры данных, которая мне нужна и про которую я забыл.
Есть дерево. Дерево обходится в порядке в порядке depth first: https://upload.wikimedia.or...Depth-first-tree.svg
В каждом узле дерева есть какая-то метаинфа (а может и нет, причём чаще нет, чем есть).
При посещении каждого узла дерева мне нужно быстро найти в каких...

Спасибо, уточка, иди нахуй, ты больше не нужна.

hirthwork

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.