Маша С++
104 subscribers
54 photos
2 files
65 links
Учу C++ и не только вместе с вами, мои котятки)
Download Telegram
Бесполезное. В 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 день в году, с праздником всех причастных!
Опенсорсная реализация пятой Цивилизации (с "картофельной" графикой). Доступно для Android (включая F-Droid) и для десктопа. Переведена на русский.

https://github.com/yairm210/Unciv

#github #opensorce
Прошла бесплатный быстрый тест (занимает всего 15 минут) на знание английского EF SET. Без регистрации и смс. Ссылка на тест внизу страницы https://www.efset.org/ru/cefr/

#english