#cpp
От @gepardius.
"Расскажу про include-what-you-use. Этот инструмент позволяет делать следующее:
- находить неиспользуемые
- находить
Звучит довольно полезно, поэтому я поставил его из репозиториев Debian и решил запустить:
Во-первых, он хотел выкинуть
Во-вторых, иногда он предлагал использовать какие-то странные include'ы вроде
В-четвертых, он много ругался на код Dodecahedron'а. Этот код я не хочу исправлять, в как отключить проверку для некоторых файлов, я не нашел.
В общем, ложных срабатываний в результатах получилось довольно много, поэтому я не стал добавлять include-what-you-use в CI. Просто буду его запускать время от времени и смотреть.
Ну и наконец, ссылка на коммит, в котором я все это исправил."
Ещё у Саши есть заметки про его шахматный движок: t.me/sofcheck.
От @gepardius.
"Расскажу про include-what-you-use. Этот инструмент позволяет делать следующее:
- находить неиспользуемые
include'ы- находить
include'ы, которые стоит добавить. Например, мы в файле b.h пишем #include "a.h". А в некотором cpp-файле делаем #include "b.h" и используем как функции из b.h, так и функции из a.h. Тогда include-what-you-use предложит заинклудить a.h
- предлагать добавить forward declaration'ы вместо того, чтобы инклудить заголовки. Таким образом можно уменьшить время компиляцииЗвучит довольно полезно, поэтому я поставил его из репозиториев Debian и решил запустить:
$ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
$ make -j
$ iwyu_tool -p . --
include-what-you-use интегрирован с CMake, поэтому его можно сразу запускать при сборке:$ CC=clang CXX=clang++ cmake -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=iwyu ..
$ make -j
Теперь коротко о том, какие результаты я получил. Было много действительно корректных срабатываний, но были и случаи, когда он вел себя неправильно.Во-первых, он хотел выкинуть
config.h. В этом файле содержатся всякие макросы, которые затем с #ifdef'ами используются в коде.Во-вторых, иногда он предлагал использовать какие-то странные include'ы вроде
#include <ext/alloc_traits.h>.
В-третьих, он предлагал очень странные вещи, когда я подключал gtest/gtest.h в Google-тестах: ссылка.В-четвертых, он много ругался на код Dodecahedron'а. Этот код я не хочу исправлять, в как отключить проверку для некоторых файлов, я не нашел.
В общем, ложных срабатываний в результатах получилось довольно много, поэтому я не стал добавлять include-what-you-use в CI. Просто буду его запускать время от времени и смотреть.
Ну и наконец, ссылка на коммит, в котором я все это исправил."
Ещё у Саши есть заметки про его шахматный движок: t.me/sofcheck.
packages.debian.org
Debian -- Details of package iwyu in bullseye
Analyze #includes in C and C++ source files
#cpp #stackoverflow
https://stackoverflow.com/questions/13127455/what-does-the-standard-library-guarantee-about-self-move-assignment
https://stackoverflow.com/questions/13127455/what-does-the-standard-library-guarantee-about-self-move-assignment
Stack Overflow
What does the standard library guarantee about self move assignment?
What does the C++11 standard say about self move assignment in relation to the standard library? To be more concrete, what, if anything, is guaranteed about what selfAssign does?
template<class...
template<class...
На @sofcheck новые посты про clang-tidy. Можете заглянуть 🙂
https://t.me/sofcheck/23
https://t.me/sofcheck/24
https://t.me/sofcheck/23
https://t.me/sofcheck/24
Telegram
SoFCheck
Пока я не испытывал никаких новых эвристик, расскажу про clang-tidy и про то, как он используется в SoFCheck'е
Что такое clang-tidy? Это статический анализатор, входящий в состав компилятора Clang. Он может отлавливать проблемные места в коде. Еще он может…
Что такое clang-tidy? Это статический анализатор, входящий в состав компилятора Clang. Он может отлавливать проблемные места в коде. Еще он может…
#cpp
Если кто-то вдруг ещё не знал, существуют рекомендации от создателей языка.
Недавно встретил поинт, что читать их полностью просто так оч тяжко из-за огромнейших размеров, потому предлагается следующий путь: откройте сайт у себя в закладках; в следующий раз, когда у вас возникнет вопрос, как лучше сделать, попробуйте поискать по документу; после нескольких таких случаев может вы наберётесь сил и осилите прочесть всё : )
https://isocpp.github.io/CppCoreGuidelines/
Если кто-то вдруг ещё не знал, существуют рекомендации от создателей языка.
Недавно встретил поинт, что читать их полностью просто так оч тяжко из-за огромнейших размеров, потому предлагается следующий путь: откройте сайт у себя в закладках; в следующий раз, когда у вас возникнет вопрос, как лучше сделать, попробуйте поискать по документу; после нескольких таких случаев может вы наберётесь сил и осилите прочесть всё : )
https://isocpp.github.io/CppCoreGuidelines/
isocpp.github.io
C++ Core Guidelines
The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++
#cpp
На текущий момент это мой самый любимый доклад из всего, что я видел.
https://www.youtube.com/watch?v=LIb3L4vKZ7U
На текущий момент это мой самый любимый доклад из всего, что я видел.
https://www.youtube.com/watch?v=LIb3L4vKZ7U
YouTube
CppCon 2015: Andrei Alexandrescu “std::allocator...”
http://www.Cppcon.org
—
std::allocator Is to Allocation what std::vector Is to Vexation
--
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/cppcon/cppcon2015
—
std::allocator has an inglorious past…
—
std::allocator Is to Allocation what std::vector Is to Vexation
--
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/cppcon/cppcon2015
—
std::allocator has an inglorious past…
this->notes. pinned «#cpp На текущий момент это мой самый любимый доклад из всего, что я видел. https://www.youtube.com/watch?v=LIb3L4vKZ7U»
#cpp
Забывание одного символа "&" привело к блокировке устройств Chrome OS во всем мире.
https://proglib.io/w/6b6e2d24
Забывание одного символа "&" привело к блокировке устройств Chrome OS во всем мире.
https://proglib.io/w/6b6e2d24
Ars Technica
Google pushed a one-character typo to production, bricking Chrome OS devices
Google broke a conditional statement that verifies passwords. A fix is rolling out.
#cpp
Не могу сказать, что это было очень полезно проведённое время, но я что-то узнал. Может и вы : )
https://www.youtube.com/watch?v=2olsGf6JIkU
Не могу сказать, что это было очень полезно проведённое время, но я что-то узнал. Может и вы : )
https://www.youtube.com/watch?v=2olsGf6JIkU
YouTube
CppCon 2018: Jonathan Boccara “105 STL Algorithms in Less Than an Hour”
http://CppCon.org
—
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/CppCon/CppCon2018
—
We are all aware that we should know the STL algorithms. Including them in our designs allows us to make our…
—
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/CppCon/CppCon2018
—
We are all aware that we should know the STL algorithms. Including them in our designs allows us to make our…
Forwarded from Experimental chill
Недавно тут сидел на нескольких защитах дипломных работ на Факультете Компьютерных Наук ВШЭ. Это занятие жутко неблагодарное, очень устаёшь всех слушать 4 часа, а ещё недавно мой организм дал мне понять, что я всего лишь кожаный мешок, и оно совсем не помогло его восстановлению. Тем не менее, были хорошие работы, которые понравились мне, и студенты разрешили о них поделиться:
1. Ковальков Дмитрий. Текст работы недоступен, Дмитрий не захотел публиковать текст из-за причин оформления :)
Тема: Исследование существующих решений консенсуса на устойчивость к отказам в fsync
Это отличное исследование и эксперименты со статьей 2020 года "Can Applications Recover from fsync Failures?", которая смотрела на падения систем, если вдруг не смог сработать fsync, когда ядру говорят, что пора данные на диск сбрасывать, а тот не смог принять это. И если система неправильно обрабатывает такие падения, то возможны серьёзные последствия.
Последствия: ломается leader election в Zookeeper. Дмитрий провёл исследование c помощью CuttleFS, написал патч к Zookeeper и выложил скрипты на github. Учитывая, что даже Jepsen не смог найти такие падения, я думаю, что при желании Дмитрий может превратить своё исследование в полноценный фреймворк. При защите у меня было ощущение, что Дмитрий как будто сам не осознал, какой у этого потенциал, поэтому говорю — огромный :)
2-3. Хасанова Алия. Родионов Антон.
Темы: хоть были их две, то я опишу их суммарно Анализ использования полей протобуфа
Так как я был руководитель этих дипломов, то немного предыстории. У меня давно в голове крутилась идея, что fault tolerance можно использовать как способ агрессивных оптимизаций. А именно если есть какой-нибудь MapReduce, то jobs/workers должны быть устойчивы к падениям и это нормальный ход вещей. А что если мы попытаемся оптимизировать достаточно агрессивно и поймём походу если надо, что были слишком агрессивны и просто перезапустим в более безопасном режиме? Пользователь не заметит и если мы обеспечим хороший rate успеха, то и ресурсы сэкономим.
В Гугле и Яндексе протобуфы читаются везде и всегда в таких сервисах, и если читаются протобуфы, а используются один-два поля, то много информации просто уходит в никуда. Так как протобуфы статические, то есть два подхода: анализировать сам код или трекать динамически. Алия делала первое, а Антон второе.
В первом подходе мы помечали все getters протобуфа специальными метками и удаляли их с помощью garbage collector в линкере, а во втором писали плагин, чтобы собирать всю информацию по ходу исполнения. Получался профиль, а что делать с этим профилем — решать уже пользователям, кто захочет перекомпилировать без этих полей, а кто напишет свой парсер и будет парсить только часть. В MapReduce можно падать, если прочитали поле, которое не в профиле и обновлять профиль.
Оказалось, что у меня на работе около 50-80% полей не используются из-за всяких рекурсивных зависимостей и вообще предварительно всё неплохо ускоряется. И это прям нужно было многим, кто хочет следить по безопасности, какие поля читаются, а кто хочет трекать просто большие поля и их размеры и сэмплить их. А кто вообще хочет запретить использовать некоторые протобуфы.
Я в итоге сделал свою версию и протолкнул до open source, но, думаю, ещё десять раз поменяем интерфейс https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/field_access_listener.h. Заработает ли идея с агрессивностью, не знаю, надеюсь, что да, но интуиция говорит, что это очень тяжело.
Вообще, хоть я и сам закончил ФКН 2 года назад, было интересно вести дипломы и писать рецензии людям, при правильной мотивации студентам интересно это делать. К сожалению, это очень сильно выматывает, потому что студенты в основном начинают всё делать в марте-апреле и размазать не получается. Сейчас я не хочу ничего брать на следующий год, ибо пока я всё ещё один могу сделать больше за этот промежуток, чем студенты. Это и точка роста для меня — уметь делегировать, чтобы суммарно больше получалось, но как же тяжело идёт у меня работа с людьми...
1. Ковальков Дмитрий. Текст работы недоступен, Дмитрий не захотел публиковать текст из-за причин оформления :)
Тема: Исследование существующих решений консенсуса на устойчивость к отказам в fsync
Это отличное исследование и эксперименты со статьей 2020 года "Can Applications Recover from fsync Failures?", которая смотрела на падения систем, если вдруг не смог сработать fsync, когда ядру говорят, что пора данные на диск сбрасывать, а тот не смог принять это. И если система неправильно обрабатывает такие падения, то возможны серьёзные последствия.
Последствия: ломается leader election в Zookeeper. Дмитрий провёл исследование c помощью CuttleFS, написал патч к Zookeeper и выложил скрипты на github. Учитывая, что даже Jepsen не смог найти такие падения, я думаю, что при желании Дмитрий может превратить своё исследование в полноценный фреймворк. При защите у меня было ощущение, что Дмитрий как будто сам не осознал, какой у этого потенциал, поэтому говорю — огромный :)
2-3. Хасанова Алия. Родионов Антон.
Темы: хоть были их две, то я опишу их суммарно Анализ использования полей протобуфа
Так как я был руководитель этих дипломов, то немного предыстории. У меня давно в голове крутилась идея, что fault tolerance можно использовать как способ агрессивных оптимизаций. А именно если есть какой-нибудь MapReduce, то jobs/workers должны быть устойчивы к падениям и это нормальный ход вещей. А что если мы попытаемся оптимизировать достаточно агрессивно и поймём походу если надо, что были слишком агрессивны и просто перезапустим в более безопасном режиме? Пользователь не заметит и если мы обеспечим хороший rate успеха, то и ресурсы сэкономим.
В Гугле и Яндексе протобуфы читаются везде и всегда в таких сервисах, и если читаются протобуфы, а используются один-два поля, то много информации просто уходит в никуда. Так как протобуфы статические, то есть два подхода: анализировать сам код или трекать динамически. Алия делала первое, а Антон второе.
В первом подходе мы помечали все getters протобуфа специальными метками и удаляли их с помощью garbage collector в линкере, а во втором писали плагин, чтобы собирать всю информацию по ходу исполнения. Получался профиль, а что делать с этим профилем — решать уже пользователям, кто захочет перекомпилировать без этих полей, а кто напишет свой парсер и будет парсить только часть. В MapReduce можно падать, если прочитали поле, которое не в профиле и обновлять профиль.
Оказалось, что у меня на работе около 50-80% полей не используются из-за всяких рекурсивных зависимостей и вообще предварительно всё неплохо ускоряется. И это прям нужно было многим, кто хочет следить по безопасности, какие поля читаются, а кто хочет трекать просто большие поля и их размеры и сэмплить их. А кто вообще хочет запретить использовать некоторые протобуфы.
Я в итоге сделал свою версию и протолкнул до open source, но, думаю, ещё десять раз поменяем интерфейс https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/field_access_listener.h. Заработает ли идея с агрессивностью, не знаю, надеюсь, что да, но интуиция говорит, что это очень тяжело.
Вообще, хоть я и сам закончил ФКН 2 года назад, было интересно вести дипломы и писать рецензии людям, при правильной мотивации студентам интересно это делать. К сожалению, это очень сильно выматывает, потому что студенты в основном начинают всё делать в марте-апреле и размазать не получается. Сейчас я не хочу ничего брать на следующий год, ибо пока я всё ещё один могу сделать больше за этот промежуток, чем студенты. Это и точка роста для меня — уметь делегировать, чтобы суммарно больше получалось, но как же тяжело идёт у меня работа с людьми...
#cpp
Мой личный поинт за сеттер, потому что это очень понятно с точки зрения инкапсуляции: метод делает именно то, что должен. Аргумент из статьи парируется просто: хотим уметь менять часть объекта — делаем для этого отдельный метод. Но вы почитайте. Может поймёте что-то для себя :)
https://belaycpp.com/2021/08/05/how-to-choose-between-a-setter-and-a-reference-getter/
Мой личный поинт за сеттер, потому что это очень понятно с точки зрения инкапсуляции: метод делает именно то, что должен. Аргумент из статьи парируется просто: хотим уметь менять часть объекта — делаем для этого отдельный метод. Но вы почитайте. Может поймёте что-то для себя :)
https://belaycpp.com/2021/08/05/how-to-choose-between-a-setter-and-a-reference-getter/