Est-ce que (et devrait) il y a des sockets en C ++ 11?

Le nouveau C ++ 11 va-t-il contenir une bibliothèque de sockets? Pour qu’on puisse faire quelque chose std::socket -ish?

En voyant comment std::thread sera ajouté, on a l’impression que des sockets devraient également être ajoutés. Les sockets de style C sont douloureuses … Elles sont extrêmement intuitives.

Anyways: Y aura-t-il des sockets C ++ dans C ++ 11 (googlé mais pas trouvé de réponse)? Si ce n’est pas le cas, leur est-il prévu d’append cela? Pourquoi pourquoi pas)?

Non, ce n’est pas Dans un avenir proche, le comité des normes C ++ a créé un groupe d’étude qui développe une proposition de couche réseau . Il semble qu’ils optent pour une approche ascendante, en commençant par une couche socket de base, puis en construisant le support HTTP / etc. Ils cherchent à présenter la proposition de base de la prise lors de la réunion du comité d’octobre.

Quant à savoir pourquoi ils n’ont pas mis cela dans C ++ 11, c’est purement spéculatif.


Si vous voulez mon avis sur la question, c’est pour cette raison.

Si vous créez un programme qui fait quelque chose, qui possède une fonctionnalité spécifique, vous pouvez choisir des bibliothèques pour l’une des deux raisons suivantes. Une des raisons est que cette bibliothèque fait quelque chose de nécessaire pour implémenter votre code. Et l’autre est parce qu’il fait quelque chose qui est utile dans la mise en œuvre du code en général.

Il est très difficile pour une conception pour un programme particulier de dire: “Je dois absolument utiliser un std::vector pour contenir cette liste d’éléments!” La conception d’un programme n’est pas si spécifique. Si vous créez un navigateur Web, l’idée d’un navigateur ne se soucie pas de savoir s’il contient ses tabs dans un object std::vector , std::list ou créé par l’utilisateur. Maintenant, certaines conceptions peuvent fortement suggérer certaines structures de données. Mais il est rare que la conception dise explicitement que quelque chose de bas niveau comme std::list est absolument essentiel.

std::list pourrait être utilisé dans à peu près n’importe quel programme. Comme peut std::vector , std::deque , etc.

Cependant, si vous créez un navigateur Web, la mise en réseau de ce concept est nécessaire . Vous devez soit utiliser une bibliothèque réseau, soit créer vous-même une couche réseau. C’est une exigence fondamentale de l’idée.

Le terme que j’utilise pour le premier type, pour les bibliothèques pouvant être utilisées dans tout, est celui des bibliothèques “utilitaires”.

Threading est une bibliothèque d’utilitaires. La conception peut encourager le besoin de répondre aux besoins de l’utilisateur, mais il existe des moyens d’être réactif sans multithreading préemptif. Par conséquent, dans la plupart des cas, le threading est un choix d’implémentation. Le filetage est donc une utilité.

La mise en réseau ne l’ est pas . Vous utilisez uniquement la mise en réseau si votre conception le demande spécifiquement. Vous ne décidez pas de simplement transférer le réseau dans un programme. Ce n’est pas un détail d’implémentation; c’est une exigence de conception.

À mon avis, la bibliothèque standard C / C ++ ne devrait implémenter que des utilitaires. C’est aussi la raison pour laquelle je suis contre d’autres idées lourdes telles que les parsingurs XML, etc. Ce n’est pas mal pour les autres bibliothèques d’avoir ces choses, mais pour C et C ++, ce ne sont pas de bons choix.

Je pense que ce devrait être le cas, car beaucoup d’autres langages populaires prennent en charge les opérations de socket dans le cadre du langage (elles ne forcent pas l’utilisateur à utiliser une API spécifique au système d’exploitation). Si nous avons déjà des stream de fichiers pour lire / écrire des fichiers locaux, je ne vois pas pourquoi nous ne pouvons pas transférer de données avec des sockets.

Il n’y aura pas de socket en C ++ 11. La différence entre les threads et les sockets est que les threads impliquent de faire plus de garanties sur la commande, si votre programme implique des threads. Pour une plate-forme dotée d’un seul cœur, C ++ 11 n’impose pas que votre processeur génère un kernel supplémentaire. Les sockets, par contre, seraient … difficiles à mettre en oeuvre de manière portable et échoueraient gracieusement sur les systèmes qui n’en ont pas.

Il n’y aura pas en C ++ 0x. Il y a des propositions pour les append dans une future version.

La quantité de nouveautés dans C ++ 0x devait être limitée pour que le comité ait le temps de tout gérer.

La page wikipedia pour C ++ 0x est généralement assez récente et la section sur les changements de bibliothèque ne semble pas mentionner les sockets.