Будет ли новый С++ 11 содержать любую библиотеку сокетов? Чтобы можно было что-то сделать std::socket
-ish?
Увидев, как будет добавлен std::thread
, кажется, что сокеты также должны быть добавлены. Сокеты в стиле C - это боль... Они чувствуют себя чрезвычайно интуитивно понятными.
В любом случае: будут ли С++-сокеты в С++ 11 (googled, но не смогли найти ответ)? Если нет, планируете ли вы добавить это? Почему (/почему нет)?
Ответ 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 должно было быть ограничено, чтобы дать время в комитете, чтобы разобраться со всем этим.
Ответ 5
Страница wikipedia для С++ 0x обычно довольно актуальна, а раздел об изменениях в библиотеке, похоже, не упоминает сокеты.