std и сеть...
От: Shmj Ниоткуда  
Дата: 28.01.23 10:29
Оценка:
Вопрос такой. Почему запись в файлы есть в std, а вот сетевых операций никаких нет?

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

Что мешало хотя бы для tcp добавить поддержку в std?
Re: std и сеть...
От: rg45 СССР  
Дата: 28.01.23 10:46
Оценка: 3 (1) +1
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой. Почему запись в файлы есть в std, а вот сетевых операций никаких нет?


S>Можно сказать что сеть нельзя представить в виде простых функций. Однако же и работа с диском, по большому счету, тоже достаточно сложная вещь и std все не охватывает.


S>Что мешало хотя бы для tcp добавить поддержку в std?


Как по мне, то и файловый ввод-вывод тоже не стоило тащить в стандартную библиотеку. Я думаю, это сделали скорее по историческим соображениям и совместимости с С. Вот именно потому, что все это вещи сложные и у разных программ могут быть разные требования по детальности, по кроссплатформенности и пр, я считаю, что весь такой сервис лучше иметь в виде внешних библиотек из которых можно выбрать ту, которая наилучшим образом соответствует решаемой задаче. Вообще я сторонник более строгого разграничения — язык — это язык, прикладная область — это прикладная область.

P.S. Нужны сетевые операции — boost::asio в помощь.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 28.01.2023 10:55 rg45 . Предыдущая версия . Еще …
Отредактировано 28.01.2023 10:53 rg45 . Предыдущая версия .
Отредактировано 28.01.2023 10:52 rg45 . Предыдущая версия .
Отредактировано 28.01.2023 10:49 rg45 . Предыдущая версия .
Re: std и сеть...
От: LaptevVV Россия  
Дата: 28.01.23 14:06
Оценка: 2 (1) +1
S>Вопрос такой. Почему запись в файлы есть в std, а вот сетевых операций никаких нет?
S>Можно сказать что сеть нельзя представить в виде простых функций. Однако же и работа с диском, по большому счету, тоже достаточно сложная вещь и std все не охватывает.
Ты не с дисколм работаешь, а с файловой системой. Которая может быть и не на дисках.
Файловые системы имеют гораздо большую историю, чем сети.
S>Что мешало хотя бы для tcp добавить поддержку в std?
В последующих версиях стандарта добавят на основе boost.asio
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: std и сеть...
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 30.01.23 09:22
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой. Почему запись в файлы есть в std, а вот сетевых операций никаких нет?


https://en.cppreference.com/w/cpp/experimental/networking
По крайней мере предложения есть, и идёт медленное утрясание.

С другой стороны, кто сказал, что сеть будет в ближайшие например 40 лет на всё тех же основах? Если придолбаться, там сколько проблем дизайна, что ну его нафиг.
А верхняя прослойка, которая всё упрощает, ещё больше всё испортит.

S>Можно сказать что сеть нельзя представить в виде простых функций. Однако же и работа с диском, по большому счету, тоже достаточно сложная вещь и std все не охватывает.


Так и там только самое тупое и кривое. Где, например, хотя бы простое асинхронное чтение?

S>Что мешало хотя бы для tcp добавить поддержку в std?


Наличие всего что нужно в Boost?
The God is real, unless declared integer.
Re[2]: std и сеть...
От: Videoman Россия https://hts.tv/
Дата: 03.02.23 15:21
Оценка:
Здравствуйте, rg45, Вы писали:

R>Как по мне, то и файловый ввод-вывод тоже не стоило тащить в стандартную библиотеку. Я думаю, это сделали скорее по историческим соображениям и совместимости с С. Вот именно потому, что все это вещи сложные и у разных программ могут быть разные требования по детальности, по кроссплатформенности и пр, я считаю, что весь такой сервис лучше иметь в виде внешних библиотек из которых можно выбрать ту, которая наилучшим образом соответствует решаемой задаче. Вообще я сторонник более строгого разграничения — язык — это язык, прикладная область — это прикладная область.


С одной стороны конечно всё верно и не поспоришь. Может быть по этому и нет стандартов, потому-что их просто не было на момент создания стандартной библиотеки. Были зоопарки разных файловых систем и разных сетевых коммуникаций. В Windows свои, в Nix — свои. Даже парадигма работы изменилась: раньше I/O и Сеть были на многие порядки медленнее CPU bound и синхронные интерфейсы были вполне норм. Потом стало всё выравниваться и async понадобился, а его не было ни в каком виде, т.к. опять же sync всех утсраивал. Сейчас, мне кажется, всё устаканилось и можно попробовать еще раз .
С другой стороны, наличие стандартной инфраструктуры задает канву, задает стандартизацию интерфейсов и предотвращает хаос, когда ты не может просто скрестить одну библиотеку с другой, потому что, там разные слои абстракции, банально. В этом, я считаю, плюс хоть какой-то, но стандартной поддержи I/O во всех его проявления.
Отредактировано 03.02.2023 15:23 Videoman . Предыдущая версия .
Re: std и сеть...
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.02.23 17:31
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой. Почему запись в файлы есть в std, а вот сетевых операций никаких нет?


Потому, что коммитет по стандартизации языка кокетливо делает вид, что он OS-нейтрален, а OS-нейтрального API сети не существует в природе.

S>Можно сказать что сеть нельзя представить в виде простых функций. Однако же и работа с диском, по большому счету, тоже достаточно сложная вещь и std все не охватывает.


Пиши на Go. Там есть сеть прям в стандартной библиотеке, и он кроссплатформенен и весь API стандартной библиотеки тоже вполне себе кроссплатформенен.
Re[2]: std и сеть...
От: wl. Россия  
Дата: 03.02.23 19:26
Оценка: +1
Здравствуйте, Pzz, Вы писали:

S>>Вопрос такой. Почему запись в файлы есть в std, а вот сетевых операций никаких нет?

Pzz>Потому, что коммитет по стандартизации языка кокетливо делает вид, что он OS-нейтрален, а OS-нейтрального API сети не существует в природе.

А можно поконкретнее? bsd сокеты же есть везде?
Re[3]: std и сеть...
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.02.23 19:31
Оценка:
Здравствуйте, wl., Вы писали:

Pzz>>Потому, что коммитет по стандартизации языка кокетливо делает вид, что он OS-нейтрален, а OS-нейтрального API сети не существует в природе.


wl.>А можно поконкретнее? bsd сокеты же есть везде?


Ну, в вендовых достаточно много своей специфики...
Re[3]: std и сеть...
От: CreatorCray  
Дата: 03.02.23 20:17
Оценка: +1
Здравствуйте, wl., Вы писали:

wl.>bsd сокеты же есть везде?

Они ужасны
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[3]: std и сеть...
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 03.02.23 21:05
Оценка:
Здравствуйте, wl., Вы писали:

S>>>Вопрос такой. Почему запись в файлы есть в std, а вот сетевых операций никаких нет?

Pzz>>Потому, что коммитет по стандартизации языка кокетливо делает вид, что он OS-нейтрален, а OS-нейтрального API сети не существует в природе.

wl.>А можно поконкретнее? bsd сокеты же есть везде?


У них масса проблем дизайна, которые не хотелось бы фиксировать ещё на 50 лет вперёд.
Хотя, если интерфейс стиля BSD sockets будет переходником к чему-то исправленному, это ещё терпимо.
The God is real, unless declared integer.
Re[4]: std и сеть...
От: wl. Россия  
Дата: 04.02.23 15:18
Оценка:
Здравствуйте, netch80, Вы писали:

wl.>>А можно поконкретнее? bsd сокеты же есть везде?

N>Хотя, если интерфейс стиля BSD sockets будет переходником к чему-то исправленному, это ещё терпимо.

ну да, я это и имел в виду, примерно, как std::thread, на нижнем уровне использует pthreads API, а наверху всё красиво
Отредактировано 04.02.2023 15:18 wl. . Предыдущая версия .
Re[3]: std и сеть...
От: Skorodum Россия  
Дата: 06.02.23 08:31
Оценка:
Здравствуйте, Videoman, Вы писали:

Медленност и временная непрдесказуемость сетевых операций всегда были аргументом в пользу асинхронного подхода. Тут ничего не поменялось. Соотношение задержек CPU и сети тоже принципиально не поменялось.
Re[2]: std и сеть...
От: Skorodum Россия  
Дата: 06.02.23 08:33
Оценка:
Здравствуйте, netch80, Вы писали:

S>>Что мешало хотя бы для tcp добавить поддержку в std?

N>Наличие всего что нужно в Boost?
Boost не всегда подходит по лицензии. (Хотя те, для кого это проблема, обычно уже свои велосипеды написали.)
Re[4]: std и сеть...
От: Maniacal Россия  
Дата: 06.02.23 12:20
Оценка:
Здравствуйте, Pzz, Вы писали:

wl.>>А можно поконкретнее? bsd сокеты же есть везде?


Pzz>Ну, в вендовых достаточно много своей специфики...


Из напрягающих изредка это только, что select не возвращает время, сколько он ждал данных от сокета. В остальном, жить можно.
Re[5]: std и сеть...
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.02.23 22:48
Оценка: +1
Здравствуйте, Maniacal, Вы писали:

Pzz>>Ну, в вендовых достаточно много своей специфики...


M>Из напрягающих изредка это только, что select не возвращает время, сколько он ждал данных от сокета. В остальном, жить можно.


Он, вроде, и в BSD не возвращает, только в линухе.

Но в венде, если у тебя что-то шибко высоконагруженное и работающее с большим количеством соединений, лучше использовать overlapped I/O с completion port-ом. А значит, не имитацию берклевский сокетов, а нативно-вендовый сетевой API.
Re[6]: std и сеть...
От: Maniacal Россия  
Дата: 07.02.23 07:30
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Но в венде, если у тебя что-то шибко высоконагруженное и работающее с большим количеством соединений, лучше использовать overlapped I/O с completion port-ом. А значит, не имитацию берклевский сокетов, а нативно-вендовый сетевой API.


Меня еще на курсах повышения квалификации в направлении кросс-платформенного программирования научили, как в одном сетевом потоке и пуле рабочих запилить полноценный HTTP-север на кучу соединений. Но да, не кросс-платформенный подход всяко побыстрее будет.
Re[7]: std и сеть...
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.02.23 07:46
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>Меня еще на курсах повышения квалификации в направлении кросс-платформенного программирования научили, как в одном сетевом потоке и пуле рабочих запилить полноценный HTTP-север на кучу соединений. Но да, не кросс-платформенный подход всяко побыстрее будет.


Полноценный — это с HTTP 0.9/1.0/1.1/2.0, многострочными полями в заголовке, connection keep-alive, chunked encoding, с поддержкой TLS, MIME, виртуальных серверов, IDN, HTTP trailers, data streaming-а и т.п.?

HTTP — обманчивый протокол. Он выглядит простым.
Re[8]: std и сеть...
От: Maniacal Россия  
Дата: 07.02.23 07:50
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Полноценный — это с HTTP 0.9/1.0/1.1/2.0, многострочными полями в заголовке, connection keep-alive, chunked encoding, с поддержкой TLS, MIME, виртуальных серверов, IDN, HTTP trailers, data streaming-а и т.п.?


Pzz>HTTP — обманчивый протокол. Он выглядит простым.


Не, это я загнул. Домашнее задание было HTTP 1.0 поддержать, если на четвёрку, на пятёрку с поддержкой CGI с проверкой безопасности запросов.
В общем браузер нормально с моим сервером работал. Речь даже не про HTTP больше (там исходников строк 200 всего), а про кучу соединений, обрабатываемых в одном потоке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.