Re[6]: а давайте напишем новый asio !
От: so5team https://stiffstream.com
Дата: 05.11.25 10:14
Оценка: +3
Здравствуйте, Великий Мессия, Вы писали:

ВМ>в целом проблема здесь другая


Проблема здесь та, что есть С++ "на бумаге", а есть C++ "в компиляторе". И в обычной жизни это две большие разницы.

Когда в каком-то компиляторе нет std::start_lifetime_as, даже если компилятор имеет ключик -std=c++23, то это дело еще можно какими-то собственными функциями-заглушками обойти.

А вот когда функциональность по работе с сетью завязана, условно, на установку опции nodelay для сокета, и на одном компиляторе эта опция уже есть, тогда как на другом -- нет, вот тут все будет гораздо веселее.

Ну и чем больше распухает стандарт (особенно в части stdlib), тем дольше будет путь от С++ "на бумаге" до C++ "в компиляторе".

Вот ейбоху комитет бы лучше озадачился стандартом описания зависимостей для C++ проекта. Чтобы vcpkg/conan/etc могли понимать этот стандарт и подтаскивали бы к проекту то, что требуется. Тогда обычный человек в два клика мог подключить к себе в проект конкретную версию Asio или POCO, и делал бы работу с сетью как ему хочется/нравится. Не дожидаясь включения std::networking в C++29 с реализацией в 2033-ем году.
Re[7]: а давайте напишем новый asio !
От: Великий Мессия google
Дата: 05.11.25 10:27
Оценка:
Здравствуйте, so5team, Вы писали:

S>Здравствуйте, Великий Мессия, Вы писали:


ВМ>>в целом проблема здесь другая


S>Проблема здесь та, что есть С++ "на бумаге", а есть C++ "в компиляторе". И в обычной жизни это две большие разницы.


тоже самое что я сказал, только другими словами

S>Когда в каком-то компиляторе нет std::start_lifetime_as, даже если компилятор имеет ключик -std=c++23, то это дело еще можно какими-то собственными функциями-заглушками обойти.


есть фютерс тест макросы
https://en.cppreference.com/w/cpp/experimental/feature_test.html#cpp_lib_start_lifetime_as

S>А вот когда функциональность по работе с сетью завязана, условно, на установку опции nodelay для сокета, и на одном компиляторе эта опция уже есть, тогда как на другом -- нет, вот тут все будет гораздо веселее.


будет на всех компиляторах
в части сокетов в стандарт проталкивают то как это есть в asio

S>Ну и чем больше распухает стандарт (особенно в части stdlib), тем дольше будет путь от С++ "на бумаге" до C++ "в компиляторе".


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

S>Вот ейбоху комитет бы лучше озадачился стандартом описания зависимостей для C++ проекта. Чтобы vcpkg/conan/etc могли понимать этот стандарт и подтаскивали бы к проекту то, что требуется. Тогда обычный человек в два клика мог подключить к себе в проект конкретную версию Asio или POCO, и делал бы работу с сетью как ему хочется/нравится. Не дожидаясь включения std::networking в C++29 с реализацией в 2033-ем году.


в рамкаж же попытках стандартизации системы сборки вроде что то было?

во всяком случае ждите опросник от комитета
и там делайте замечания на интересующие вас темы
а то по ощущениям опрсник штурмуют миллионы леммингов юнити кодеров
из за которых стандарт плывет не туда куда надо
Re[5]: а давайте напишем новый asio !
От: SaZ  
Дата: 05.11.25 10:57
Оценка:
Здравствуйте, so5team, Вы писали:

S>...

S>А то получится, что в стандарте std::start_lifetime_as есть, а по факту в стабильных версиях компиляторов -- все еще нет.

Вот интересно, а почему тогда не депрекейтнули std::bit_cast? Вроде как он теперь не нужен?
Re[8]: а давайте напишем новый asio !
От: so5team https://stiffstream.com
Дата: 05.11.25 11:02
Оценка: +1
Здравствуйте, Великий Мессия, Вы писали:

ВМ>будет на всех компиляторах


Когда (и если) будет, тогда и поговорим.

Пока же есть пример с std::format.
Если проект начался до включения std::format в стандарт и использовал fmtlib, то смысла переходить в проекте на std::format нет.
Если проект начался с std::format, но потом вынужден был пойти на платформу/компилятор, где std::format еще нет (реальность, увы), то проще выбросить std::format в пользу fmt::format и дальше оставаться на fmtlib.

Может лет через 5 ситуация будет другая, но пока fmtlib выглядит предпочтительнее std::format.

Есть сильные подозрения, что касательно std::net будет аналогично. Что наводит на мысль, что таки не нужно лохматить бабушку и пытаться втащить std::net в стандарт.
Re[6]: а давайте напишем новый asio !
От: so5team https://stiffstream.com
Дата: 05.11.25 11:06
Оценка:
Здравствуйте, SaZ, Вы писали:

S>>А то получится, что в стандарте std::start_lifetime_as есть, а по факту в стабильных версиях компиляторов -- все еще нет.


SaZ>Вот интересно, а почему тогда не депрекейтнули std::bit_cast? Вроде как он теперь не нужен?


Так вроде бы use cases разные.
start_lifetime_as -- это когда у вас есть область памяти A, в которой лежат, скажем, std::byte. А вы хотите иметь корректный указатель на double, который указывает в эту область.

bit_cast -- это когда у вас в области памяти A лежит, скажем, std::uint64_t, а вы хотите получить оттуда новое значение, скажем, типа double. Причем это именно что будет новое значение, никак не связанное с областью памяти A.

Т.е., как я понимаю, bit_cast может быть реализован через start_lifetime_as, но наличие start_lifetime_as не отменяет use cases, в которых bit_cast может быть полезен.
Отредактировано 05.11.2025 11:17 so5team . Предыдущая версия .
Re[9]: а давайте напишем новый asio !
От: Великий Мессия google
Дата: 05.11.25 12:13
Оценка:
Здравствуйте, so5team, Вы писали:

S>Здравствуйте, Великий Мессия, Вы писали:


ВМ>>будет на всех компиляторах


S>Когда (и если) будет, тогда и поговорим.


до появления экзекуторов не появится
а я экзекуторов пока не вижу даже в пушреквестах трех std либах msvc/gcc/clang

S>Пока же есть пример с std::format.

S>Если проект начался до включения std::format в стандарт и использовал fmtlib, то смысла переходить в проекте на std::format нет.
S>Если проект начался с std::format, но потом вынужден был пойти на платформу/компилятор, где std::format еще нет (реальность, увы), то проще выбросить std::format в пользу fmt::format и дальше оставаться на fmtlib.

S>Может лет через 5 ситуация будет другая, но пока fmtlib выглядит предпочтительнее std::format.


S>Есть сильные подозрения, что касательно std::net будет аналогично. Что наводит на мысль, что таки не нужно лохматить бабушку и пытаться втащить std::net в стандарт.


ясно же что автор asio писать std::net не будет
в каждом компиле это будет своя имплементация
но проблем там я не вижу, сокеты просты как два пальца
это не регексп который в каждой std имеет свою производительность
и только сейчас MS оптимизировал свою самую медленную

все из за чего забуксовал std::net были экзекуторы
хотя я еще в 20 кажется году пытался полухину протолкнуть мысль
что бы он в комитете намекнул мол давайте std::net без асинхронщины протянем
за одно обкатаем
а экзекуторы и асинхронщину пусть добавляют уже когда первая будет готова
он отказался, мол если тянуть, то сразу полный std::net а не по частям
ну и в довесок сказал что синхронные сокеты уже никто не юзает

std::format имеет свою базу
а в fmt::format автор постоянно что то добавляет, обновляет, улучшает
нет смысла их сравнивать
хотя вроде он же писал пропозл на std::format ? так пусть этим и занимается, обновляет идеи дальше в стандарте
Re[6]: а давайте напишем новый asio !
От: Великий Мессия google
Дата: 05.11.25 12:26
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Здравствуйте, so5team, Вы писали:


S>>...

S>>А то получится, что в стандарте std::start_lifetime_as есть, а по факту в стабильных версиях компиляторов -- все еще нет.

SaZ>Вот интересно, а почему тогда не депрекейтнули std::bit_cast? Вроде как он теперь не нужен?


нужен
bit_cast побитово копирует в новый тип
а start_lifetime_as конструирует и возвращает указатель
Re[5]: а давайте напишем новый asio !
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.11.25 09:11
Оценка:
Здравствуйте, so5team, Вы писали:

N>>Если это будет описано как "библиотека для работы с сетью в не сильно ограниченных по ресурсу системах", то я не вижу большой диверсионности: всё равно альтернативные стандарты поумирали нафиг. Интересно было наблюдать за XTI, например, но он не выжил.

S>Вопрос не столько в API, сколько в качестве того, что получилось, что будет доступно в конкретном компиляторе и как это все будет меняться при смене версии компилятора.

Библиотека работы с сетью, мне кажется, вообще ничего не требует от компилятора.

S>Когда приложение завязано на внешнюю библиотеку, а не на stdlib все как-то проще. Взял условный Asio-1-32-0 и сидишь с ним пока все устраивает. А если и нашел ошибку, то можно сперва ее в своем форке исправить, патч в апстрим закинуть и все. Тогда как при обнаружении проблем с поведением условного std::net::tcp::socket на конкретной платформе хз как быть.


Это проблема с любым рантаймом, вам не кажется?
The God is real, unless declared integer.
Re[6]: а давайте напишем новый asio !
От: so5team https://stiffstream.com
Дата: 06.11.25 09:40
Оценка:
Здравствуйте, netch80, Вы писали:

N>Библиотека работы с сетью, мне кажется, вообще ничего не требует от компилятора.


Вроде как std::from_chars тоже ничего не требует от компилятора. Но еще совсем недавно можно было нарваться на компилятор, где from_chars не было.

S>>Когда приложение завязано на внешнюю библиотеку, а не на stdlib все как-то проще. Взял условный Asio-1-32-0 и сидишь с ним пока все устраивает. А если и нашел ошибку, то можно сперва ее в своем форке исправить, патч в апстрим закинуть и все. Тогда как при обнаружении проблем с поведением условного std::net::tcp::socket на конкретной платформе хз как быть.


N>Это проблема с любым рантаймом, вам не кажется?


Одно дело когда в рантайме сломана, например, раскрутка стека при выбросе исключения.
Другое дело, когда в конкретной версии условного VC++ неправильно отрабатывает условный socket.set_option или ip::address::from_string.

По крайней мере с моей колокольни это видится так.
Re[3]: а давайте напишем новый asio !
От: Skorodum Россия  
Дата: 06.11.25 12:09
Оценка:
Здравствуйте, so5team, Вы писали:

S>Часть причин почему "нет" хорошо описана здесь: https://www.reddit.com/r/cpp/comments/1ic8adj/comment/m9pgjgs/

Ха, я знал куда ведет ссылка
Re[6]: а давайте напишем новый asio !
От: Skorodum Россия  
Дата: 06.11.25 12:12
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Ну, быть примерно так же, как и с модулями.

LVV>Потихоньку пробовать и вводить в некоторых местах...
Ни разу не слышал о хотя бы поползновениях применять их (в европейской IT индустрии). Не взлетит.
Re[7]: а давайте напишем новый asio !
От: LaptevVV Россия  
Дата: 06.11.25 13:52
Оценка:
LVV>>Ну, быть примерно так же, как и с модулями.
LVV>>Потихоньку пробовать и вводить в некоторых местах...
S>Ни разу не слышал о хотя бы поползновениях применять их (в европейской IT индустрии). Не взлетит.
Думаете модули в С++ — мертворожденное дитя ?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: а давайте напишем новый asio !
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.11.25 13:56
Оценка:
Здравствуйте, so5team, Вы писали:

N>>Библиотека работы с сетью, мне кажется, вообще ничего не требует от компилятора.

S>Вроде как std::from_chars тоже ничего не требует от компилятора. Но еще совсем недавно можно было нарваться на компилятор, где from_chars не было.

Отсутствие и неработа — разные случаи.

S> Тогда как при обнаружении проблем с поведением условного std::net::tcp::socket на конкретной платформе хз как быть.


N>>Это проблема с любым рантаймом, вам не кажется?


S>Одно дело когда в рантайме сломана, например, раскрутка стека при выбросе исключения.

S>Другое дело, когда в конкретной версии условного VC++ неправильно отрабатывает условный socket.set_option или ip::address::from_string.

S>По крайней мере с моей колокольни это видится так.


Ну это, по крайней мере, не запретит использовать свою библиотеку или прямые вызовы ядерного API.
The God is real, unless declared integer.
Re[7]: а давайте напишем новый asio !
От: SaZ  
Дата: 06.11.25 14:06
Оценка:
Здравствуйте, Великий Мессия, Вы писали:

ВМ>...

SaZ>>Вот интересно, а почему тогда не депрекейтнули std::bit_cast? Вроде как он теперь не нужен?

ВМ>нужен

ВМ>bit_cast побитово копирует в новый тип
ВМ>а start_lifetime_as конструирует и возвращает указатель

Это всё понятно, но тут два момента: в каких случаях теперь нужен bit_cast, когда можно сделать start_lifetime_as и просто скопировать? И второе — имхо, название неудачное, какой-нибудь bit_copy более явно отразил бы суть.
Re[5]: PONIX
От: B0FEE664  
Дата: 06.11.25 14:57
Оценка:
Здравствуйте, LaptevVV, Вы писали:

BFE>>Если есть стандарт POSIX, то почему не сделать PONIX — Portable Operating Network Interface?

BFE>>Прописать отдельный стандарт на сетевое взаимодействие, а уж на его основе писать библиотеку.
LVV>Ну, есть же модель OSI
LVV>Там есть tcp/ip и udp
К C++ это какое имеет отношение?

LVV>И фактический стандарт — сокеты.

LVV>Я не в курсе — сокеты в nix-системах стандартизированы официально ?
LVV>На уровне API Linux — фактически да.

Опять же сокеты — чего в них хорошего? Неужели лучше ничего нельзя придумать? Не верю.
И каждый день — без права на ошибку...
Re[6]: PONIX
От: LaptevVV Россия  
Дата: 06.11.25 15:08
Оценка:
BFE>>>Если есть стандарт POSIX, то почему не сделать PONIX — Portable Operating Network Interface?
BFE>>>Прописать отдельный стандарт на сетевое взаимодействие, а уж на его основе писать библиотеку.
LVV>>Ну, есть же модель OSI
LVV>>Там есть tcp/ip и udp
BFE>К C++ это какое имеет отношение?
Ну дык я понял, что отдельный стандарт — это об общих принципах сетевой модели.
LVV>>И фактический стандарт — сокеты.
LVV>>Я не в курсе — сокеты в nix-системах стандартизированы официально ?
LVV>>На уровне API Linux — фактически да.
BFE>Опять же сокеты — чего в них хорошего? Неужели лучше ничего нельзя придумать? Не верю.
Ну, придумай. Зачем ждать милостей от природы ?
Сокеты, насколько мне известно, придумал Кен Томпсон для берколеевской версии юникса еще году в 1981-1983 примерно...
Они прекрасно отделяют клиента от сервера.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: а давайте напишем новый asio !
От: Skorodum Россия  
Дата: 06.11.25 15:21
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>Думаете модули в С++ — мертворожденное дитя ?

Да.
Re[8]: а давайте напишем новый asio !
От: so5team https://stiffstream.com
Дата: 06.11.25 16:02
Оценка:
Здравствуйте, netch80, Вы писали:

N>>>Библиотека работы с сетью, мне кажется, вообще ничего не требует от компилятора.

S>>Вроде как std::from_chars тоже ничего не требует от компилятора. Но еще совсем недавно можно было нарваться на компилятор, где from_chars не было.

N>Отсутствие и неработа — разные случаи.


Если человек разрабатывал программу на компиляторе X, перешел на компилятор Y, а там нет from_chars, то есть ли разница между отсутствием и неработой?

Ну и я не очень понимаю что вы мне пытаетесь донести. Примеры с std::format и std::from_chars говорят о том, что без приключений новое не появляется.
Я еще помню времена стандартизации С++98, когда в каком-то компиляторе какой-то класс из STL соответствует стандарту, а в другом -- еще нет.

Уверен, что с std::net будет в точности тоже самое.

Вы хотите сказать, что теперь-то все окажется иначе?

N>Ну это, по крайней мере, не запретит использовать свою библиотеку или прямые вызовы ядерного API.


Оттож. Тот же Asio я могу использовать прямо сейчас, не дожидаясь прекрасного свелого будущего.
И даже когда оно наступит, то какой смысл переделывать то, что будет за это время сделано на Asio? Полагаю, что никакого.

А если так, то и незачем тратить ресурсы впустую. И даже не впустую, а взваливая груз на будущих мейнтенеров будущей стандартной библиотеки С++.
Re[7]: PONIX
От: B0FEE664  
Дата: 06.11.25 18:11
Оценка: 17 (1)
Здравствуйте, LaptevVV, Вы писали:

BFE>>>>Если есть стандарт POSIX, то почему не сделать PONIX — Portable Operating Network Interface?

BFE>>К C++ это какое имеет отношение?
LVV>Ну дык я понял, что отдельный стандарт — это об общих принципах сетевой модели.
POSIX определяет API в виде деклараций функций на языке C. При этом сам стандарт языка Си — это отдельный стандарт, включающий в себя библиотеку языка Си.
Соответственно, я не вижу причин, почему бы не быть стандарту в виде деклараций классов на С++, которые могут использоваться для сетевого взаимодействия и которые не входят в стандарт языка С++.

BFE>>Опять же сокеты — чего в них хорошего? Неужели лучше ничего нельзя придумать? Не верю.

LVV>Ну, придумай. Зачем ждать милостей от природы ?
LVV>Сокеты, насколько мне известно, придумал Кен Томпсон для берколеевской версии юникса еще году в 1981-1983 примерно...
LVV>Они прекрасно отделяют клиента от сервера.

Во-первых, задач много, а я один.
Во-вторых, всё уже вроде бы придумано.
Я точно помню, что читал статью, в которой рассказывалось о разработке технологии коммуникации на основе обмена буферами данных, то есть без копирования. Быстрый поиск вывел меня на статью
wikipedia Zero-copy. Если уж стандартизировать, то что-то передовое, а не полувековой давности технологию.
И каждый день — без права на ошибку...
Re[8]: PONIX
От: LaptevVV Россия  
Дата: 06.11.25 18:28
Оценка:
LVV>>Ну, придумай. Зачем ждать милостей от природы ?
LVV>>Сокеты, насколько мне известно, придумал Кен Томпсон для берколеевской версии юникса еще году в 1981-1983 примерно...
LVV>>Они прекрасно отделяют клиента от сервера.

BFE>Во-первых, задач много, а я один.

BFE>Во-вторых, всё уже вроде бы придумано.
BFE>Я точно помню, что читал статью, в которой рассказывалось о разработке технологии коммуникации на основе обмена буферами данных, то есть без копирования. Быстрый поиск вывел меня на статью
BFE>wikipedia Zero-copy. Если уж стандартизировать, то что-то передовое, а не полувековой давности технологию.
Интересно...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.