Будут ли (и должны) быть сокеты в C ++ 11? - PullRequest
60 голосов
/ 10 июля 2011

Будет ли новый C ++ 11 содержать библиотеку сокетов?Чтобы можно было что-то сделать std::socket -ish?

Ввиду того, как будет добавлено std::thread, создается впечатление, что также должны быть добавлены сокеты.Сокеты в стиле C - это боль ... Они чувствуют себя крайне нелогично.

В любом случае: будут ли сокеты C ++ в C ++ 11 (погуглили, но не нашли ответа)?Если нет, есть ли у них планы добавить это?Почему (/ почему нет)?

Ответы [ 5 ]

53 голосов
/ 10 июля 2011

Нет, это не так.Что касается ближайшего будущего, комитет по стандартам C ++ создал исследовательскую группу, которая разрабатывает предложение сетевого уровня .Похоже, что они идут по восходящему подходу, начиная с базового уровня сокетов, затем создавая поддержку HTTP / etc поверх этого. Они хотят представить предложение основного сокета на октябрьском заседании комитета.

Что касается того, почему они не включили это в C ++ 11, это чисто умозрительно.


Если вам нужно мое мнение по этому вопросу, именно по этой причине.

Если вы создаете программу, которая делает что-то, что имеет определенную функциональность, то вы можете выбрать библиотекипо одной из двух причин.Одна из причин заключается в том, что эта библиотека необходима для реализации вашего кода.А другая причина в том, что он делает что-то, что полезно для реализации кода в целом.

Для конкретной программы очень сложно сказать: "Я абсолютно должен использовать std::vector держать этот список предметов! " дизайн для программы не настолько специфичен.Если вы создаете веб-браузер, идея браузера не имеет значения, содержит ли он свои вкладки в std::vector, std::list или в созданном пользователем объекте.Теперь некоторые конструкции могут настоятельно рекомендовать определенные структуры данных.Но редко дизайн явно говорит, что что-то низкоуровневое, такое как std::list, крайне необходимо.

std::list может использоваться примерно в любой программе.Как и std::vector, std::deque и т. Д.

Однако, если вы создаете веб-браузер, в рамках этого дизайна вы найдете network .Вы должны либо использовать сетевую библиотеку, либо написать сетевой уровень самостоятельно.Это фундаментальное требование идеи.

Термин, который я использую для первого типа, для библиотек, которые могут использоваться во всем, - это «служебные» библиотеки.

Threading - это служебная библиотека,Проектирование может поощрять потоки через необходимость отвечать пользователю, но есть способы реагировать без упреждающей многопоточности.Поэтому в большинстве случаев многопоточность является выбором реализации.Поэтому многопоточность - это утилита.

Сеть не .Вы используете сеть только в том случае, если ваш дизайн требует этого.Вы не решили просто сбросить сеть в программу.Это не деталь реализации;это требование к дизайну.

По моему мнению, стандартная библиотека C / C ++ должна реализовывать только утилиты.Именно поэтому я против других тяжеловесных идей, таких как парсеры XML и т. Д. Подобные вещи не являются ошибочными для других библиотек, но для C и C ++ они не являются хорошим выбором.

11 голосов
/ 16 июля 2011

Я думаю, что так и должно быть, поскольку многие другие популярные языки поддерживают операции с сокетами как часть языка (они не заставляют пользователя использовать какой-либо API-интерфейс для конкретной ОС).Если у нас уже есть файловые потоки для чтения / записи локальных файлов, я не понимаю, почему у нас не может быть какого-либо метода передачи данных с помощью сокетов.

4 голосов
/ 10 июля 2011

В C ++ 11 не будет сокетов.Разница между потоками и сокетами заключается в том, что потоки требуют больше гарантий относительно порядка, , если ваша программа использует потоки.Для платформы с одним ядром C ++ 11 не требует, чтобы ваш процессор использовал дополнительное ядро.С другой стороны, сокеты было бы ... трудно реализовать переносимо и изящно выходить из строя в системах, в которых их нет.

1 голос
/ 10 июля 2011

Не будет в C ++ 0x. Есть предложения добавить их в будущую версию.

Количество новых вещей в C ++ 0x должно было быть ограничено, чтобы дать комитету время тщательно разобраться со всем этим.

0 голосов
/ 10 июля 2011

Страница википедии для C ++ 0x обычно довольно актуальна, и в разделе об изменениях в библиотеке , похоже, не упоминаются сокеты.

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