Alex Fails Some News Channel
276 subscribers
661 photos
27 videos
31 files
267 links
Всякая хрень от Фэйлса
Download Telegram
Зацените, какое я когда-то посадил дерево:
bool findStrInSimpleTree(const char *str, size_t len,
const SimpleTree &tree, size_t &out_val, bool str_is_substr/*=true*/)
{
// Если штука равна ноде в дереве, то:
// Если нода пустая, то возвращаем значение.
// Иначе ищем его по массиву
if (len < tree.node.len) {
return false;
}
if (_strnicmp(str, tree.node.str, tree.node.len) == 0) {
if (tree.subnodes_count != 0) {
for (size_t i = 0; i < tree.subnodes_count; i++) {
if (findStrInSimpleTree(str + tree.node.len,
len - tree.node.len, tree.subnodes[i],
out_val, str_is_substr)) {
return true;
}
}
}
// случай, если у нас входная строчка больше, чем строчка в дереве.
if (!str_is_substr && len > tree.node.len) {
return false;
}
out_val = tree.node.id;
return true;
} else {
return false;
}
}

#cpp #говнокод #упрлс
А для любителей пострелять в ногу^W^W^W низкоуровневых функций языка Си, таких, как memcpy/memmove, предлагается такой небольшой сниппет от участника чата pro.cxx @berkus:
https://godbolt.org/g/Ico7Z9
#cpp #memcpy #dontshootattheleg #cppsnippet #shootintheleg
Forwarded from pro.cxx Channel
13 мая в Минске пройдет шестая конференция по плюсам – C++ CoreHard Spring 2017https://conference.corehard.by/, организованная белорусским C++ сообществом CoreHard.

Будем рады видеть вас в нашем любимом городе в качестве участников. Кто захочет присоединиться удаленно – приглашаем на онлайн-трансляцию (она бесплатна, регистрация по ссылочке https://goo.gl/forms/8cQWn8O5n4Bvhubn2)
Наш youtube-канал – https://www.youtube.com/channel/UCifgOu6ARWbZ_dV29gss8xw

P.S. В Беларусь россиянам виза не нужна и до Минска час лету из Москвы и Питера :)

#cpp #conference #corehard
Ёмкая выдержка из черновика стандарта языка программирования C++

https://eel.is/c++draft/zombie.names#:brains,names_that_want_to_eat_your

#cpp #std #draft #zombies #brainzz
Попросили сделать парсер IPv4-адресов на этапе компиляции.

#cpp #template #udl #alexandrescu #wandbox #упрлс #ipv4
Детский деструктор

#irl #cpp #dtor #lego #баян
Новости с полей ISO C++.
Модули и Корутины теперь официально в C++20!

Upd1: доступен trip-report: https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/

#cpp #news #update #coro #modules
С новым годом!

#nsfw #cpp #cpp20

@AlexFailsChannel
Вот почему GCC [*и другие C++-компиляторы - Ред.] так долго компилируют код.

https://twitter.com/gf_256/status/1285217798642454531

#cpp #objection
Компилятор языка BrainFuck на шаблонах C++.
Для запуска программы вам надо сделать стрелковой литерал вида "++++++++++>>>"_brain_fuck с вашей программой на BrainFuck, а потом , добавить в вашу программу на C++ приложенный исходник.
P.S. Давно хотел сам сделать, но как обычно, есть уже другой, кто это запилил🤷‍♂.

https://github.com/netcan/recipes/blob/master/cpp/metaproggramming/brain_fuck/BrainFuckTemplateMeta.cpp

#cpp #упрлс #принесли
Forwarded from pro.cxx Channel (Alex Ф-ф-фэils!🌠)
Вышел очередной отчёт от Герба Саттера об осенней встрече комитета ISO C++. Эта встреча была проведена в формате виртуального заседания, и на ней обсуждали предложения в новый стандарт C++23, а также успели адаптировать несколько новых возможностей. Вот некоторые из них:
1. Наконец-то наше предложение о добавлении стектрейсов попало в стандарт!
2. Теперь вы можете проверять наличие подстроки в строке с помощью метода string.contains() вместо громоздкой старой версии if (str.find("substr") != std::string::end) { /* found */ }. Поиск не учитывает регистр, в отличие от похожего метода в Qt.
3. Литеральный суффикс для std::size_t: 42uz, схожий со спецификатором формата функции printf().
4. Ещё одно свойство типа is_scoped_enum, позволяющее узнать, создает ли перечисление свою область видимости (т.е. , определено как enum class);
5. Адаптация атомиков из Си в C++.

Также приятной новостью стало создание новой учебной группы – SG22 – которая будет заниматься взаимодействием между рабочей группой 21, отвечающей за язык C++, и рабочей группой 14, отвечающей за язык Си.

Больше подробностей – по ссылке:
https://herbsutter.com/2020/11/13/trip-report-autumn-iso-c-standards-meeting-virtual/

#cpp #cpp23 #trip_report #isocpp #stacktrace
This media is not supported in your browser
VIEW IN TELEGRAM
Как появляются висячие ссылки в C++.

#cpp #joke
😁2
Forwarded from pro.cxx Channel (🐻Alex Fails🦥🏔🍓)
Очередная заметка с последнего собрания комитета C++ от Антона Полухина.
Краткий список нового в C++26:
- индексация квадратными скобками для шаблонного пакета типов:
template <typename ...Ts>
decltype(auto) get_2nd_type() {
return Ts...[1];
}

- Запрет возврата ссылок на временные значения;
- распаковка вариадиков в структурные привязки:
void want_all_tuple_items(auto &tuple) {
auto &[...items] = tuple;
}

- арифметика для чисел с насыщением - с ее помощью теперь можно складывать числа, не боясь (анти)переполнения - функции вернут результат в диапазоне [numeric_limits<T>::min() numeric_limits<T>::max()]:
static_assert(std::add_sat<unsigned char>(23, 666) == std::numeric_limits<unsigned char>::max())

- линал-функции в std::linalg - с API, которое отображается на BLAS/LAPACK;
- Конкатенация строк и string_view! std::string("str") + std::string_view("_view");
- std::span.at();
- Диагностическое сообщение для удаленных функций через = delete("diagnostics");
- и другие вещи, которые можно глянуть в заметке тут:
https://habr.com/ru/companies/yandex/articles/801115/

#cpp #cpp26 #online_report #isocpp #blas_and_lapack_in_cpp
👍2
https://github.com/llvm/llvm-project/pull/68620

ПОСОНЫ, ТУТ #embed ВЛЕТЕЛ В ШЛАНГ, теперь заживем!

upd1: пока ревертнули, чтобы починить билдботов, но работа идет!
upd2: влили с фиксами, йее

Вкратце (нет):
#embed - это новая директива препроцессора, позволяющая НОРМАЛЬНО добавлять бинарные файлы в ваш исходный код (пока что на языке Си, но в C++ оно тоже скоро просочится). Если вы используете какие-то бинарные данные типа картинок, сырых двоичных ключей, гуидов, и пр., то эта фича для вас, и это то, что вы ждали 10 лет в Азкабане 40+ лет с момента создания сишки!

Пример кода:
// firmware_sound.c
const char wave_buf[] =
#embed "notification.wav"
; // добавим бинарный файл сразу в прошивку


Текущие подходы состоят из лютых костылей типа скриптов, которые печатают бинарь как массив; xxd; bin2c (очень распространен в определенных кругах) и прочие более-менее кривые (или) нет скрипты на ваших любимых языках оболочки типа cmd/bash/fish/python.

Эта бумага пережила 12 ревизий и готовилась примерно 5-6 лет!!! (включая прошлую версию, в которой также был std::embed - consteval-функция, которая делает то же самое, но на этапе компиляции, а не препроцессинга).
Автор потратил кучу нервов и сил (почитать его слезы и посочувствовать можно в его блоге здесь (обзор и бенчмарки - [1]), здесь (подход с языком Circle и бенчмарки - [2]) здесь (заметки для критиков - [3]), здесь (заметка о том, что принято в C23 и будет поэтому в C++26 - [4])). Его долго пинали в комитетах, то говорили, что это будет медленно работать (бенчмарки показали обратное, см. ниже), то говорили, чтобы он придумал "более generic"-подход, в стиле языка Circle, который, грубо говоря, является C++ с возможностью выполнять любой код на этапе компиляции, главное, пометить блок/функцию собачкой (@).

Бенчмарки из статьи [2] выглядят так:

Методология | Время
----------------+--------------
#embed | 17 seconds
std::embed | 16 seconds
#include, |
сгенерированный | 621 seconds
xxd | (КАРЛ!!!!)


Теперь эта фича уже точно будет в Clang 19 (кому не терпится, соберите текущий trunk и радуйтесь), в MSVC есть тикет на добавление, в GCC тоже (для нетерпеливых есть патч в тикете, можете собрать).

Поздравляю автора с этим достижением, и просто убеждаюсь, что в каждом меме есть доля шутки 😢

#длиннопостик #cpp #std_embed #thephd
🔥7👍5