Маша С++
104 subscribers
54 photos
2 files
65 links
Учу C++ и не только вместе с вами, мои котятки)
Download Telegram
К слову о пиратстве. Это плохо, да и тупо незаконно. Я как-то читала книгу по JS и там в начале было написано, что автор потратил на ее написание целый год фуллтайма и просил (именно просил) её не пиратить, так как жил он все это время на продажи других своих книг. К слову, книгу я эту купила, хотя это было дорого. Но бывают случаи, когда книга старая и ее никак не достать даже в библиотеке, или ее нельзя купить или вы нищий студент и денег тупо нет.
Для таких случаев некоторые нехорошие люди используют Library Genesis, которую находят через поисковик. А вот вы не делайте так, пиратство это зло 😁
ТГ-канал любимейшего новостного (и не только) портала об opensource opennet.ru.
Комменты конечно же нужно читать на самом сайте (а также писать, ведь есть аноним), но вот быстро получать новости в любимой тележеньке можно и через канал (официальный он или нет я не знаю).
Подписчиков: 10k
Ссылка: https://t.me/opennet_ru
#обзорканалов
Бесполезное. В C++14 в <iomanip> добавили std::quoted(), которая позволяет обрамлять строку двойными кавычками и экранировать обратным слешем кавычки внутри строки (как в CSV или XML). Пример:
#include <iomanip>

std::string str("str\"ing");
std::cout << std::quoted(str)

Выведет (да, вот так вот с 3 кавычками и слешом):
"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
У std::atomic есть метод exchange, который атомарно сохраняет переданный аргумент в this, при этом в этой же "транзакции" возвращает старое значение this.
Получается атомарный read-modify-write, то есть другой поток не вставит свое значение в процессе:
std::atomic<int> x;
int y;
int z = x.exchange(y) // atomically: z = x, x = y

Если вы вдруг не поняли сразу (как я), то exchange() не эквивалентен последовательным вызовам load() и store():
z = x.load(); // not
x.store(y); // atomic !

Понятное дело, что возвращается копия старого значения и по идее, к тому времени когда я просмотрю эту копию, другой поток уже может изменить значение атомика. Возникает вопрос, а в чем тогда смысл и применение этой операции? Ну есть там memory_order вторым параметром, и что?

Оказывается, что есть применение для реализации спинлока:
std::atomic<bool> lock;  // == false
{ // критическая секция, пытаемся захватить lock:
while (lock.exchange(true)) { } // захватили lock
/* наши данные в безопасности */
lock = false; // отпускаем lock
}
Это работает, потому что нам не важно текущее значение атомика, а факт того, что именно наш поток его изменил.
Других применений, кроме как для atomic<bool> пока не нашла.
#cpp #multithreading
Интересная научная статья фокусируется именно на потреблении энергии (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
🔥2
exa (цветастая замена для ls) кажется заброшена
https://github.com/ogham/exa

#github #opensource
"Не слишком специализируйтесь."

"Так что вы не можете просто писать код. Вам нужно что-то сделать с культурой и с тем, как выражать идеи. То есть я ни разу не пожалел о времени, потраченном на историю и математику. Математика обостряет ваш ум, история даёт некоторое представление о ваших ограничениях и о том, что происходит в мире. Так что не будьте слишком уверены. Найдите время, чтобы вести сбалансированную жизнь."

https://habr.com/ru/news/757164/
👍1
"did everybody expect that to happen?" спрашивает докладчик. Такого уж я точно не ожидала. Он сравнил ускорение (speedup на легенде) двух приложений: wait-free находит сумму через std::atomic, в то время как mutex находит ту же сумму, используя одноименную блокировку и обычные (неатомарные) переменные.
Внезапно оказалось, что wait-free масштабируется значительно хуже простого mutex.
Детали и более подробное устройство атомиков тут: https://www.youtube.com/watch?v=ZQFzMfHIxng
#cpp #multithreading
Сегодня 255 день в году, с праздником всех причастных!