Telegram Group & Telegram Channel
#creepy

std::move_only_function - самая позорная фича C++ 🤡

В С++23 добавили std::move_only_function. Это тот же std::function, но в нем основное различие - нет copy-конструкторов, то есть с объектом можно сделать только move.

(Недавно был пост про самую простую реализацию std::function).

В чем кринж этой фичи? Это НЕ добавление "нового класса", с разницей как между std::string и std::string_view.

Это просто "улучшение" старого std::function. Если бы std::function можно было нормально менять, то он бы выглядел, как сегодняшний std::move_only_function. Но менять его нельзя, по причинам описанным в посте про ABI.

Почему я думаю, что это улучшение старого класса, а не новый класс:
1️⃣ Copy-конструкторы в std::function и так не нужны совсем. Как минимум это бесполезно, как максимум это создает разные проблемы при ненамеренном копировании функторов.
2️⃣ В новом классе есть фичи наподобии "small string optimization" - Callable-объект могут не пихать в динамическую память, если у них маленький размер. Это очень нужно, большинство Callable имеют малый размер.
3️⃣ Об этом написали сами авторы класса в своем пропозале - что они фиксят разные мелкие баги std::function.

То есть Комитет по C++, не имея возможности и воли решить вопрос со сломом ABI, решает дублировать классы со стремными названиями и делает вид что так и должно быть. Это не нормально и вызывает у всех много вопросов. Еще на юзеров перекладывается обязанность переписать используемый тип, вместо того чтобы просто обновить версию libstdc++.

Для почти всех классов STL есть идеи по улучшению, и если просто делать новые классы, то это будет жесть.

Можно везде использовать std::move_only_function вместо std::function, но лучше бы std::function был переделан в нормальный вид без нового класса.
Please open Telegram to view this post
VIEW IN TELEGRAM



group-telegram.com/cxx95/83
Create:
Last Update:

#creepy

std::move_only_function - самая позорная фича C++ 🤡

В С++23 добавили std::move_only_function. Это тот же std::function, но в нем основное различие - нет copy-конструкторов, то есть с объектом можно сделать только move.

(Недавно был пост про самую простую реализацию std::function).

В чем кринж этой фичи? Это НЕ добавление "нового класса", с разницей как между std::string и std::string_view.

Это просто "улучшение" старого std::function. Если бы std::function можно было нормально менять, то он бы выглядел, как сегодняшний std::move_only_function. Но менять его нельзя, по причинам описанным в посте про ABI.

Почему я думаю, что это улучшение старого класса, а не новый класс:
1️⃣ Copy-конструкторы в std::function и так не нужны совсем. Как минимум это бесполезно, как максимум это создает разные проблемы при ненамеренном копировании функторов.
2️⃣ В новом классе есть фичи наподобии "small string optimization" - Callable-объект могут не пихать в динамическую память, если у них маленький размер. Это очень нужно, большинство Callable имеют малый размер.
3️⃣ Об этом написали сами авторы класса в своем пропозале - что они фиксят разные мелкие баги std::function.

То есть Комитет по C++, не имея возможности и воли решить вопрос со сломом ABI, решает дублировать классы со стремными названиями и делает вид что так и должно быть. Это не нормально и вызывает у всех много вопросов. Еще на юзеров перекладывается обязанность переписать используемый тип, вместо того чтобы просто обновить версию libstdc++.

Для почти всех классов STL есть идеи по улучшению, и если просто делать новые классы, то это будет жесть.

Можно везде использовать std::move_only_function вместо std::function, но лучше бы std::function был переделан в нормальный вид без нового класса.

BY C++95


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/cxx95/83

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

NEWS Recently, Durav wrote on his Telegram channel that users' right to privacy, in light of the war in Ukraine, is "sacred, now more than ever." Founder Pavel Durov says tech is meant to set you free Two days after Russia invaded Ukraine, an account on the Telegram messaging platform posing as President Volodymyr Zelenskiy urged his armed forces to surrender. It is unclear who runs the account, although Russia's official Ministry of Foreign Affairs Twitter account promoted the Telegram channel on Saturday and claimed it was operated by "a group of experts & journalists."
from sg


Telegram C++95
FROM American