web-dev-qa-db-fra.com

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

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

Voyant comment std::thread sera ajouté, il semble que des sockets doivent également être ajoutées. Les prises de style C sont une douleur ... Elles se sentent extrêmement contre-intuitives.

Quoi qu'il en soit: y aura-t-il des sockets C++ dans C++ 11 (googlé mais sans réponse)? Sinon, ont-ils l'intention d'ajouter ceci? Pourquoi pourquoi pas)?

61
Touzen

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

Quant à savoir pourquoi ils n'ont pas mis cela en 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 a une fonctionnalité spécifique, vous pouvez choisir des bibliothèques pour l'une des deux raisons. Une des raisons est que cette bibliothèque fait quelque chose qui est nécessaire pour implémenter votre code. Et l'autre est parce qu'il fait quelque chose qui est utile pour implémenter le 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'articles! "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 s'il détient ses onglets dans un std::vector, std::list, ou un objet créé par l'utilisateur. Maintenant, une conception peut suggérer fortement certaines structures de données. Mais rarement la conception dit explicitement que quelque chose de bas niveau comme un std::list est absolument indispensable.

std::list pourrait être utilisé dans à peu près n'importe quel programme . Un scanner std::vector, std::deque, etc.

Cependant, si vous créez un navigateur Web, le design du réseau est mis en bouteille dans cette conception. Vous devez utiliser une bibliothèque réseau ou écrire vous-même une couche réseau. C'est une exigence fondamentale de l'idée.

Le terme que j'utilise pour l'ancien type, pour les bibliothèques qui pourraient être utilisées dans n'importe quoi, est bibliothèques "utilitaires".

Threading est une bibliothèque d'utilitaires. La conception peut encourager le filetage à travers la nécessité de répondre à l'utilisateur, mais il existe des moyens d'être réactifs sans multithreading préemptif. Par conséquent, dans la plupart des cas, le filetage est un choix d'implémentation. L'enfilage est donc un utilitaire.

Le réseautage n'est pas pas . Vous n'utilisez le réseautage que si votre conception l'exige spécifiquement. Vous ne décidez pas de simplement vider 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 C/C++ standard ne devrait implémenter que des utilitaires. C'est aussi pourquoi je suis contre d'autres idées lourdes comme les analyseurs XML, etc. Ce n'est pas mal pour d'autres bibliothèques d'avoir ces choses, mais pour C et C++, ce ne sont pas de bons choix.

53
Nicol Bolas

Je pense que cela devrait l'être, car beaucoup d'autres langages populaires prennent en charge les opérations de socket dans le langage (ils ne forcent pas l'utilisateur à utiliser une API spécifique au 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 pouvons pas avoir une méthode de transfert de données avec des sockets.

11
myeviltacos

Il n'y aura pas de sockets 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, if votre programme implique des threads. Pour une plate-forme avec un seul cœur, C++ 11 n'exige pas que votre CPU crée un cœur supplémentaire. Les sockets, en revanche, seraient ... difficiles à mettre en œuvre de manière portative et échoueraient gracieusement sur les systèmes qui n'en ont pas.

4
Puppy

Il n'y en aura pas en C++ 0x. Il est proposé de les ajouter dans une future version.

La quantité de nouvelles choses en C++ 0x a dû être limitée pour donner au comité le temps de tout traiter en profondeur.

1
Ben Voigt

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

0
Andrew White