Pull to refresh
218
8
Antony Polukhin @antoshkka

Эксперт-разработчик C++ в Яндекс Go

Send message

Однако, разные компиляторы оптимизируют std::min({ delCost, insCost, substCost }); по-разному

Два самых популярных компилятора генерируют практически одинаковый код https://godbolt.org/z/d3s1bnrje

Можете пожалуйста привести пример, где два разных компилятора какого-нибудь другого языка программирования, выдают схожий код?

UFCS на паузе

Если знаете как оживить предложение или у вас есть альтернативный подход, позволяющий достичь схожего результата - пожалуйста расскажите о нём.

Некоторые люди из комитета говорили, что им ну очень нужно, у них всё формулы работают только с правильным округлением. Правда потом они очень удивлялись, что округление на самом деле не работает во многих их формулах, так как компилятор оптимизирует с использованием дефолтного округления https://godbolt.org/z/KKavdE

Надеюсь что здравый смысл возобладает и constexpr cmath будет

Теперь сравните с тем что есть в Qt:
for (QString s: str.split('.'))
v << s.toInt();

Так и в C++23 это есть, если лишние аллокации ок:

for (auto s: str | split('.'))
    v << std::stoi(std::string{s});

-fno-exceptions и -fno-rtti - это несовместимые со стандартом расширения/сужения.

В стандарт же эту возможность никто не протащил, т.к. на практике оно работает совсем не так как ожидается. Например, noexcept для методов автоматически не проставляется из-за того, что где-то внутри метода может быть вызов функции из сторонней библиотеки, которая может кинуть исключение. Были попытки, но авторы потом сами убеждались, что получается фигня какая-то.

Кажется что вы только что изобрели Boost. Только он тоже не всем нравится :)

В стандарте есть много способов сделать фичу отключаемой - от описания фичи таким образом, что она может ничего не делать, до помечания её как implemntation defined. Исключения и RTTI отключаемыми фичами не являются.

Что же касается исключений и трейсов, то там прям в стандартную библиотеку добавляется метод для включения функционала:

void this_thread::set_capture_stacktraces_at_throw(bool enable = true) noexcept;

Патчить компилятор нет нужды, в большинстве из них уже есть опция -fdebug-prefix-map

Если вам не нравятся монадические интерфейсы из C++23, то можно сделать свои монадические интерфейсы на основе корутин %)

Ну а std::expected на подходе, в прошлую пятницу LWG как раз ревьюила текст для включения в стандарт. Шансы успеть к C++23 есть.

Да, работа с отдельно стоящими pdb возможна и реализована в протитипе

p1061r1 недавно обсуждали, если небольшие шансы увидеть в C++23

Networking активно обсуждается, что будет - непонятно. Комитет всё ещё хочет универсальные executors, с которыми должен будет работать Networking... но пока не выходит

Он уже тюринг полный, и рекурсия есть (например, через рекурсивное подключение одного и того же хедера). Полностью тема раскрывается здесь

Да, как раз на этой встрече добавили. В посте не освещал, так что хоть тут немного расскажу:

  • auto(x) - встроенный в язык способ сделать decay + copy значения, другими словами что-то наподобие decay_t<decltype(x)>{x};. Как верно заметили, не самая востребованная вещь

  • "Deducing this" - позволяет писать функции с шаблонным this. Теперь можно написать template <class Self> decltype(auto) value(this Self&&) { return std::forward<Self>(*this).value_; }и получать const& , & и && ссылки на value_ в зависимости от константности this. Так же получили возможность делать рекурсивные лямбды [](this auto self, int n) -> int { return (n <= 1) ? 1 : n * self(n-1); + };

А где вся эта роскошь (имена функций, файлов, номера строк и т.п.) будет храниться, прямо в бинарнике?

Они там уже хранятся, в дебажных символах и таблицах экспорта

Их не довезли, потому что вы их не предложили, значит вам оно и не надо :-\

Предложение может написать и направить в комитет каждый. Даже специальную русскоязычную группу сделали, чтобы упростить и без того простой процесс. Так что если хотите увидеть replace|tockenize - пишите прототип и proposal, помочь всегда рады в https://stdcpp.ru/proposals/ и в чатике https://t.me/ProCxx

P.S.: split есть начиная с C++20.

А какие именно вещи вызывали у вас ощущение «наконец-то добавили то, чего больше всего не хватало» ?

Скорее история про то, что всем не угодишь. Только-только добавили Modules, Ranges, Coroutines, Concepts... но кто-то ждал совсем других новинок.

Я вот например flat_set и stacktrace жду сильно больше чем operator[] (int.int). А вот математикам и физикам второе зачастую сильно важнее чем, например, flat_set

Если не используете - то просто не включаете, и не платите

Фича elifdef elifndef из С23 - ужасна:

  • не надо развивать препроцессор

  • читаемость - так себе

  • нет возможности/смысла использовать их при написании переносимого кода

  • они крайне редко нужны

Протащили только ради совместимости с C.

Зависит от платформы и возможностей компилятора, есть подозрение что мьютекс будет использоваться не во всех функциях класса.

Information

Rating
579-th
Location
Россия
Works in
Registered
Activity