Anton
не вижу необходимости
Anton
и причин поднимать пыль тоже )
Berkus
не вижу необходимости
"фактически креш" зависит даже от того с какой std либой ты слинкуешься, что на линуксе что на винде, поэтому твой anecdotal evidence про "фактически креш" он действиельно anecdotal. Ну реально смешно, в прод поди пишешь ещё.
🐙 Antony
А давайте вместо порожней беседы вы посмотрите на реализацию мьютексов в разных стандартных библиотеках и libc и скинете ссылки на код, который сработает при вызове lock() из одного и того же потока для не рекурсивного мьютекса
Berkus
https://github.com/llvm-mirror/libcxx/blob/master/include/__mutex_base#L221
Igor
товарищи, а clang-format и/или clang-tidy позволяют прикручивать пользовательские расширения "на лету", или меня глючит? я откуда-то помню кусочек доклада "мы взяли тулинг от шланга, дописали к нему десяток простеньких правил на питоне, и следить за качеством кода сразу стало проще", но в упор не могу найти похожего функционала в этих тулзах максимум нашёл возможность перекомпилировать tidy с новыми правилами.cpp
Anton
stl от ms и gnu stl тупо кидают исключение, если их не отлавливать программа падает
Vergil
боже...
Anton
и это хорошо в отличие от предельно неконкретного UB в стандарте
Berkus
так и так было понятно
Anton
я собсно криво выразился...
Berkus
и это хорошо в отличие от предельно неконкретного UB в стандарте
ты не можешь портабельно писать код рассчитывая что тебе бросят исключение
Berkus
это UB
Berkus
Igor
Рил из анимешки Ergo Proxy
Berkus
я был бы рад если б вместо уб вменили бросать исключение - это было бы единственно разумно. вопросы скорости в случае дедлока как-то мало кого интересуют - @antoshkka ?
Berkus
Это Рил и она грустит от такой хуйни
Igor
на лету нет
окей, значит я что-то перепутал, спс
🐙 Antony
я был бы рад если б вместо уб вменили бросать исключение - это было бы единственно разумно. вопросы скорости в случае дедлока как-то мало кого интересуют - @antoshkka ?
Интересуют вопросы скорости в случае отсутствия дедлока. Имплементациям мьютекса надо будет запоминать список тредов (или последний тред), которые залочили мьютекс, что может сильно плохо сказаться на производительности
Constantine
хотя если бы я писал стандарт, я бы добавил static constexpr bool recursive_lock_exception_guaranteed = /*implementation-defined*/
Berkus
Ернар
Ернар
можете объяснить как это работает
Ернар
?
Constantine
Где-то была топовая паста в духе "просьба ваш личный опыт с мужиками не переносить"
Igor
@supapro
Berkus
можете объяснить как это работает
тебе каждую строчку объяснить или только return 0?
Vsevolod
https://stackoverflow.com/questions/26300819/why-gcc-compiled-c-program-needs-eh-frame-section#26302715 - о как
Igor
Кажется это тот доклад, в котором брали питон-бинды к libclang, clang-{format, tidy} тут не при чем.
питон-бинды? если так, то звучит похоже; не припомнишь мероприятие и автора доклада?
Constantine
где сout
написано: вывести в cout значение выражения
Constantine
где сout
http://en.cppreference.com/w/cpp/io/cout
Igor
https://www.youtube.com/watch?v=E6i8jmiy8MY Вроде оно.
хм, этот точно не смотрел, но спасибо
Berkus
@Artalus а вот добавление нового модуля https://github.com/llvm-mirror/clang-tools-extra/blob/master/clang-tidy/add_new_check.py
Berkus
в шланг-формате еще хуже
Igor
да, нашёл http://bbannier.github.io/blog/2015/05/02/Writing-a-basic-clang-static-analysis-check.html , но либо меня память подводит, либо речь в докладе действительно шла не про -формат/-тайди а про самодельную ходилку по коду
Berkus
там есть полезная штука
slinkin
Всем привет! Кто-нибудь фаззил приложения посредством libFuzzer?
Igor
лол нашёл доклад https://youtu.be/B2XtqVZcSdM?t=917 15:17 действительно речь про биндинги libclang
Berkus
Всем привет! Кто-нибудь фаззил приложения посредством libFuzzer?
https://guidovranken.wordpress.com/2017/07/08/libfuzzer-gv-new-techniques-for-dramatically-faster-fuzzing/
Berkus
для проверки твоих способностей по проверке входных данных от пользователя)
Constantine
https://github.com/llvm-mirror/clang-tools-extra/blob/master/clang-tidy/ClangTidyModule.h
Finder->addMatcher( cxxConstructorDecl( unless(isImplicit()), allOf(isMoveConstructor(), hasAnyConstructorInitializer( cxxCtorInitializer( withInitializer(cxxConstructExpr(hasDeclaration( cxxConstructorDecl(isCopyConstructor()) .bind("ctor"))))) .bind("move-init")))), this);
Constantine
пойду проект контрибутить
Constantine
обожаю такие вещи
Igor
генерить тысячи тысяч возможных входных данных для чего-нибудь в надежде что оно сломается а-ля "натравить фаззер на clang.exe и обнаружить что он тупо крашнется на строке вида ;;;;#ifdef z #endif;;int x;main:"
slinkin
не совсем. Генераторы это как часть фаззинга - а сам фаззинг это метод тестирования
Constantine
смысле
мне цитатки понравились
Berkus
Finder->addMatcher( cxxConstructorDecl( unless(isImplicit()), allOf(isMoveConstructor(), hasAnyConstructorInitializer( cxxCtorInitializer( withInitializer(cxxConstructExpr(hasDeclaration( cxxConstructorDecl(isCopyConstructor()) .bind("ctor"))))) .bind("move-init")))), this);
ну, в ллвм я считаю одни из лучших матчеров, они иногда конечно ой, но в целом это СИЛЬНО лучше гцц-шных ужасов типа IS_CTOR_P(node.parent->n0)
Berkus
мне цитатки понравились
не, я не понял что ты пошел контрибутить и куда
slinkin
https://guidovranken.wordpress.com/2017/07/08/libfuzzer-gv-new-techniques-for-dramatically-faster-fuzzing/
Я понимаю что это и как это работает. У меня остался небольшой вопрос касательно инструментации кода, который я сформулировал здесь - https://toster.ru/q/511371. Если коротко - при компиляции приложения и линковке к нему so-шек, so-шки не будут инструментированы и как следствие, если основной объект тестирования это .so либа, то фаззинг без обучения по code-coverage будет малоэффективный.
slinkin
Я правильно понимаю?
Berkus
libFuzzer фаззит конкретные функции которые ты задаешь, если ты их тестишь в .so-шке они протестятся там, если не тестишь - то не протестятся
Berkus
без инструментации репорты будут существенно хуже да
Berkus
это примерно как asan
slinkin
libFuzzer фаззит конкретные функции которые ты задаешь, если ты их тестишь в .so-шке они протестятся там, если не тестишь - то не протестятся
.so-шка не собрана посредством санитайзера и сырцов либы нет. Т.е. по факту это тестирование black box-а. Допустим в so-шке есть функций GetDocumenstPath (пусть в ней 15 if-ов) и я её вызываю из основного приложения (которое компилирую с санитапйзером и libFuzzer-ом). Т.е. хуки/callback-и будут вставлены только в рамках сырцов приложения и те 15 блоков if-ов не будут проинструментированы внури .so. Т.е. фаззинг в слепую, если тестируемой целью является именно либа.
Igor
а что за доклад? Мб Юры Ефимочева? https://www.youtube.com/watch?v=WHgXn_ufY90
ещё одна ссылочка "в просмотр", спасибо)
Berkus
Звучит как тупик)
да нет, просто небольшое усложнение задачи
Berkus
Alexander "SonnySlave"
как же я ору
Berkus
Efficiently dangerous!
Andrey
Котаны, есть класс, есть bool property в классе, есть метод который возвращает этот bool (больше ничего не делает, только return bool, и есть много потоков, которые вызывают этот метод. А другие потоки могут поменять значение bool через другие методы. Вопрос: нужен ли лок мутекса в этом методе?
Andrey
при записи есть лок мутекса. но нужен ли он при чтении одного значения?
Igor
имя переменной же
Berkus
при записи есть лок мутекса. но нужен ли он при чтении одного значения?
Atomic_bool достаточно, без мьютексов. В общем случае - да, нужно и для чтения т. к. там acquire-release барьер
Andrey
Спасибо. Еще нашел хороший ответ на СО, там как раз про барьеры и ордеринг.