Если вы хотите стать C++ разработчиком, то пожалуйте годный (ну мне так кажется) роадмап (+ английский). Иду по нему, есливчо.
#cpp
https://salmer.github.io/CppDeveloperRoadmap/Russian/
#cpp
https://salmer.github.io/CppDeveloperRoadmap/Russian/
Как вы знаете, мои котятки, в cmake есть 3 способа добавить target:
Все бы ничего, но почему бы не назвать их все *_target?
Ведь так всё более явно, нет? CMake и так сложен для старта...
#cmake
- add_executable
- add_library
- add_custom_target
Все бы ничего, но почему бы не назвать их все *_target?
- add_executable_target
- add_library_target
- add_custom_target
Ведь так всё более явно, нет? CMake и так сложен для старта...
#cmake
Лично я считаю, что auto в c++ нужно использовать только тогда, когда это повышает читаемость, например когда тип уже находится на той же строке кода или тип не так важен, например итератор. Ненавижу когда используют auto для вывода типа результата вызова функции:
Приходится открывать объявление f, чтоб убедиться, что она возвращает то что нужно. Еще мне кажется, что частенько auto это лень кодописателя, перекладываемая на кодочитателя. На мысль написать про
auto натолкнула эта статья https://habr.com/ru/articles/754662/
#cpp
auto r = f();Приходится открывать объявление f, чтоб убедиться, что она возвращает то что нужно. Еще мне кажется, что частенько auto это лень кодописателя, перекладываемая на кодочитателя. На мысль написать про
auto натолкнула эта статья https://habr.com/ru/articles/754662/
#cpp
Хабр
С++: стреляем по ногам по-современному
Мы все привыкли к старому-доброму С++ вместе с его старыми-добрыми погрешностями и милыми недостатками. Мы с ними как-то сжились, научились игнорировать, а самые умные-даже избегать. Но тяжелая...
🔥1
Есть такой канал (не реклама) "Книги для программистов", там делают краткий обзор книг и дают ссылку на скачивание (не делайте так, ок?☺️).
Постов много, книги вроде свежие, но мне что-то ничего не приглянулось, за качество обзоров также не ручаюсь. Поискала тему "CMake" и нашла лишь одну, хотя книг много (позже поделюсь), так что вооот.
Подписчиков: 155k.
Ссылка: https://t.me/progbook
#обзорканалов
Постов много, книги вроде свежие, но мне что-то ничего не приглянулось, за качество обзоров также не ручаюсь. Поискала тему "CMake" и нашла лишь одну, хотя книг много (позже поделюсь), так что вооот.
Подписчиков: 155k.
Ссылка: https://t.me/progbook
#обзорканалов
Telegram
Книги для программистов
Все о книгах из мира IT.
Наши курсы: https://clc.to/CVcXPw
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://www.gosuslugi.ru/snet/67931954509aba565214777d
#WXSSA
Наши курсы: https://clc.to/CVcXPw
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://www.gosuslugi.ru/snet/67931954509aba565214777d
#WXSSA
Ужас, почему я этого не знала. 😱 Оказывается поток ввода можно связать (
Так, библиотечные cin и cout уже связаны, а потому например приглашение на ввод от
Связать можно и другие потоки, например fstream. Подробности тут: https://en.cppreference.com/w/cpp/io/basic_ios/tie
Алярм: это нет тот tie(), что в <tuple>😉.
#cpp
tie()) с потоком вывода, так что чтение из ввода приведет к сбросу (flush()) буфера потока вывода. Так, библиотечные cin и cout уже связаны, а потому например приглашение на ввод от
cout<<"enter:" гарантированно выведется при запроса на ввод от cin >>val. Связать можно и другие потоки, например fstream. Подробности тут: https://en.cppreference.com/w/cpp/io/basic_ios/tie
Алярм: это нет тот tie(), что в <tuple>😉.
#cpp
Наверное уже многие видели, что в C++ 26 добавят переменную
Что это дает? Например, можно забить на неиспользуемую переменную в цикле, да так что не будет ворнинга от компилятора.
Пример:
А еще теперь можно не ломать голову над названием блокировок (самая мякотка в том, что деструктор вызовется так как вы и ожидали):
#cpp #cpp26
_ , да да прямо как в этом вашем питоне.Что это дает? Например, можно забить на неиспользуемую переменную в цикле, да так что не будет ворнинга от компилятора.
Пример:
std::size_t count = 0;
for (const auto& _: list) {
++ count;
}
А еще теперь можно не ломать голову над названием блокировок (самая мякотка в том, что деструктор вызовется так как вы и ожидали):
std::unique_lock _{list_lock};
Ну и конечно же распаковка кортежей:auto [_, _, value, _] = list.do_something();Больше про эту тему и другие нововведения про C++ 26 расскажет Антон Полухин тут (все примеры оттуда): https://habr.com/ru/companies/yandex/articles/753260/
#cpp #cpp26
👍1
К слову о пиратстве. Это плохо, да и тупо незаконно. Я как-то читала книгу по JS и там в начале было написано, что автор потратил на ее написание целый год фуллтайма и просил (именно просил) её не пиратить, так как жил он все это время на продажи других своих книг. К слову, книгу я эту купила, хотя это было дорого. Но бывают случаи, когда книга старая и ее никак не достать даже в библиотеке, или ее нельзя купить или вы нищий студент и денег тупо нет.
Для таких случаев некоторые нехорошие люди используют Library Genesis, которую находят через поисковик. А вот вы не делайте так, пиратство это зло 😁
Для таких случаев некоторые нехорошие люди используют Library Genesis, которую находят через поисковик. А вот вы не делайте так, пиратство это зло 😁
ТГ-канал любимейшего новостного (и не только) портала об opensource opennet.ru.
Комменты конечно же нужно читать на самом сайте (а также писать, ведь есть аноним), но вот быстро получать новости в любимой тележеньке можно и через канал (официальный он или нет я не знаю).
Подписчиков: 10k
Ссылка: https://t.me/opennet_ru
#обзорканалов
Комменты конечно же нужно читать на самом сайте (а также писать, ведь есть аноним), но вот быстро получать новости в любимой тележеньке можно и через канал (официальный он или нет я не знаю).
Подписчиков: 10k
Ссылка: https://t.me/opennet_ru
#обзорканалов
Telegram
opennet.ru
Новости opennet.ru. Дополнительный канал @opennet_full - полные тексты.
Бесполезное. В C++14 в <iomanip> добавили std::quoted(), которая позволяет обрамлять строку двойными кавычками и экранировать обратным слешем кавычки внутри строки (как в CSV или XML). Пример:
Наверное это также может быть удобным при отладке. Плюс, quoted() можно использовать для обратного процесса (отковычивания), если взять поток ввода, а не вывода.
Подробности: https://en.cppreference.com/w/cpp/io/manip/quoted
#cpp
#include <iomanip>Выведет (да, вот так вот с 3 кавычками и слешом):
std::string str("str\"ing");
std::cout << std::quoted(str)
"str\"ing"
Без quoted выведет: str"ing
Двойные кавычки и слеш можно заменить другими символами, если дефолтное поведение не нравится.Наверное это также может быть удобным при отладке. Плюс, quoted() можно использовать для обратного процесса (отковычивания), если взять поток ввода, а не вывода.
Подробности: https://en.cppreference.com/w/cpp/io/manip/quoted
#cpp
Из OBS 30 будет удалена поддержка Ubuntu 20.04 (🥺) и Qt 5 (переход на шестую версию).
А вот коммерческие продукты, похоже, не спешат дропать "пятерку" Qt, что-то я 6-ку еще не видела нигде...
#opensource #qt
А вот коммерческие продукты, похоже, не спешат дропать "пятерку" Qt, что-то я 6-ку еще не видела нигде...
#opensource #qt
GitHub
Release OBS Studio 30.0 Beta 1 · obsproject/obs-studio
Note: As previously announced, this release removes support for Ubuntu 20.04, Qt 5, and FFmpeg versions prior to 4.4.
If you would like to support the OBS Project, please consider contributing to o...
If you would like to support the OBS Project, please consider contributing to o...
У std::atomic есть метод exchange, который атомарно сохраняет переданный аргумент в this, при этом в этой же "транзакции" возвращает старое значение this.
Получается атомарный read-modify-write, то есть другой поток не вставит свое значение в процессе:
Оказывается, что есть применение для реализации спинлока:
Других применений, кроме как для atomic<bool> пока не нашла.
#cpp #multithreading
Получается атомарный read-modify-write, то есть другой поток не вставит свое значение в процессе:
std::atomic<int> x;Если вы вдруг не поняли сразу (как я), то exchange() не эквивалентен последовательным вызовам load() и store():
int y;
int z = x.exchange(y) // atomically: z = x, x = y
z = x.load(); // notПонятное дело, что возвращается копия старого значения и по идее, к тому времени когда я просмотрю эту копию, другой поток уже может изменить значение атомика. Возникает вопрос, а в чем тогда смысл и применение этой операции? Ну есть там memory_order вторым параметром, и что?
x.store(y); // atomic !
Оказывается, что есть применение для реализации спинлока:
std::atomic<bool> lock; // == falseЭто работает, потому что нам не важно текущее значение атомика, а факт того, что именно наш поток его изменил.
{ // критическая секция, пытаемся захватить lock:
while (lock.exchange(true)) { } // захватили lock
/* наши данные в безопасности */
lock = false; // отпускаем lock
}
Других применений, кроме как для atomic<bool> пока не нашла.
#cpp #multithreading
Stack Overflow
What is the use case for the atomic exchange (read-write) operation?
C++0x specifies the std::atomic template for thread safe atomic access to variables. This template has, among others, a member function std::atomic::exchange that atomically stores a new value in "...
Интересная научная статья фокусируется именно на потреблении энергии (CPU + RAM) в дополнении к памяти и времени работы. Авторы сравнивают 27 популярных языков программирования, замеряя потребленные Джоули при решении 10 задач. Замер потребления энергии производится с помощью утилиты Intel’s Running Average Power Limit.
В финальной таблице (см пост ниже) по всем задачам можно например заметить как Java потребляет в 5 раз больше рамы, чем Си. По потреблению энергии и по времени работы в первой тройке C, Rust и C++. Примечательно, что Rust почти не отличается от C, а вот C++ отстает на 30-50%. В статье приводятся результаты для трех задач: binary-trees (выделение, обход и удаление множества двоичных деревьев), fannkuch-redux (индексируемый доступ к крохотным последовательностям интов) и fasta (генерация и запись случайных последовательностей ДНК). В первых двух задачах лидируют C/C++, в третьей же - Rust, при этом C++ в ней довольно заметно отстает. С чем это связано не понятно, возможно на плюсах медленнее вывод в файл или генератор случайных чисел. Ставить под сомнение сводные результаты 10 задач на основе данных по 3 я не буду.
Интересно, что Python уверенно занимает предпоследнюю строчку и в 70 раз "хуже" Си. Спасай природу, переписывай свой питон код на Си 😁
Полный текст статьи: https://haslab.github.io/SAFER/scp21.pdf
#cpp #rust #performance
В финальной таблице (см пост ниже) по всем задачам можно например заметить как Java потребляет в 5 раз больше рамы, чем Си. По потреблению энергии и по времени работы в первой тройке C, Rust и C++. Примечательно, что Rust почти не отличается от C, а вот C++ отстает на 30-50%. В статье приводятся результаты для трех задач: binary-trees (выделение, обход и удаление множества двоичных деревьев), fannkuch-redux (индексируемый доступ к крохотным последовательностям интов) и fasta (генерация и запись случайных последовательностей ДНК). В первых двух задачах лидируют C/C++, в третьей же - Rust, при этом C++ в ней довольно заметно отстает. С чем это связано не понятно, возможно на плюсах медленнее вывод в файл или генератор случайных чисел. Ставить под сомнение сводные результаты 10 задач на основе данных по 3 я не буду.
Интересно, что Python уверенно занимает предпоследнюю строчку и в 70 раз "хуже" Си. Спасай природу, переписывай свой питон код на Си 😁
Полный текст статьи: https://haslab.github.io/SAFER/scp21.pdf
#cpp #rust #performance
🔥2