Подтвердить что ты не робот

Будут (и должны) быть сокеты в С++ 11?

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

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

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

4b9b3361

Ответ 1

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

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


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

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

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

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

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

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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