64 votes

Y aura-t-il (et devrait-il) des sockets en C ++11?

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

Vu que std::thread sera ajouté, il semble que des sockets devraient également être ajoutés. Les prises de courant de type C sont pénibles ... Elles sont extrêmement contre-intuitives.

Quoi qu'il en soit: Y aura-t-il des sockets C ++ en C ++ 11 (le chercher sur Google mais ne trouver aucune réponse)? Si non, ont-ils l'intention d'ajouter ceci? Pourquoi pourquoi pas)?

55voto

Nicol Bolas Points 133791

Non, il n'est pas. Comme pour le proche avenir, les normes C++ comité a créé un groupe d'étude qui est le développement d'un réseau de couche de proposition. On dirait qu'ils vont pour une approche bottom-up, en commençant par une base de la couche de support, puis bâtiment HTTP/etc appui sur le dessus de cela. Ils cherchent à présenter la base de socket proposition en octobre réunion du comité.

Quant à savoir pourquoi ils n'ont pas mis cela en C++11, c'est de la pure spéculation.


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

Si vous faites un programme qui fait quelque chose, qui a une fonctionnalité spécifique à elle, alors vous pouvez choisir des bibliothèques pour une des deux raisons. Une des raisons est parce que les bibliothèques n'quelque chose qui est nécessaire pour mettre en œuvre votre code. Et l'autre c'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 un design pour un programme particulier à dire, "je dois absolument utiliser un std::vector de tenir cette liste d'articles!" La conception d'un programme n'est pas spécifique. Si vous êtes à la fabrication d'un navigateur web, l'idée d'un navigateur ne prend pas en charge si elle tient ses onglets dans un std::vector, std::list, ou créés par l'utilisateur de l'objet. Maintenant, certains peuvent vous suggérons fortement de certaines structures de données. Mais il est rare que la conception de dire explicitement que quelque chose de bas niveau comme un std::list est tout à fait essentiel.

std::list peut être utilisée dans n' importe quel programme. Comme std::vector, std::deque, etc.

Cependant, si vous faites un navigateur web, d'une bouteille à l'intérieur de cette conception est mise en réseau. Vous devez soit utiliser un réseau de bibliothèque ou d'écrire un réseau de couche-toi. C'est une exigence fondamentale de l'idée.

Le terme que j'utilise pour le premier type, pour les bibliothèques qui pourraient être utilisés dans quoi que ce soit, est "l'utilité" des bibliothèques.

Le filetage est un utilitaire de la bibliothèque. Conception pourrait encourager le filetage par la nécessité de répondre à l'utilisateur, mais il y a des façons d'être réactif sans droit préférentiel de multithreading. Par conséquent, dans la plupart des cas, le filetage de mise en œuvre de choix. Le filetage est donc un utilitaire.

Le réseautage est pas. Vous utilisez uniquement le réseau si votre conception spécifiquement la demande. Vous ne décidez pas de juste dump de réseau dans un programme. Ce n'est pas un détail de l'implémentation; c'est une exigence de conception.

Il est de mon avis que le standard C/C++ de la bibliothèque ne doit mettre en œuvre des services publics. C'est aussi pourquoi je suis contre d'autres poids lourds sont des idées comme les parseurs XML, etc. Il n'est pas faux pour d'autres bibliothèques pour avoir ces choses, mais pour le C et le C++, ce ne sont pas de bons choix.

11voto

myeviltacos Points 61

Je pense que cela devrait être le cas, car de nombreux autres langages populaires prennent en charge les opérations de socket comme partie intégrante du langage (elles ne forcent pas l'utilisateur à utiliser une API spécifique à un système d'exploitation). Si nous avons déjà des flux de fichiers pour lire / écrire des fichiers locaux, je ne vois pas pourquoi nous ne pourrions pas avoir une méthode de transfert de données avec des sockets.

4voto

Puppy Points 90818

Il n'y aura pas de sockets en C ++ 11. La différence entre les threads et les sockets réside dans le fait que les threads impliquent davantage de garanties quant à la commande, si votre programme implique des threads. Pour une plate-forme avec un seul noyau, C ++ 11 n'impose pas à votre CPU de fournir un noyau supplémentaire. Les sockets, en revanche, seraient ... difficiles à mettre en œuvre de manière portable et échouaient gracieusement sur les systèmes qui n'en disposent pas.

1voto

Ben Voigt Points 151460

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

La quantité de nouveautés dans C ++ 0x devait être limitée pour donner au comité le temps de traiter tout cela à fond.

0voto

Andrew White Points 23508

La page wikipedia pour C ++0x est généralement très à jour et la section sur les modifications de bibliothèque ne semble pas mentionner les sockets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X