31 votes

C ++11: un nouveau langage?

Récemment, j'ai commencé à lire (un peu) le projet actuel pour l'avenir de C++11.

Il y a beaucoup de nouvelles fonctionnalités, dont certaines sont déjà disponibles via Boost Libs. Bien sûr, je suis assez content de cette nouvelle norme et j'aimerais jouer avec toutes les nouvelles fonctionnalités dès que possible.

De toute façon, de parler de ce projet avec des amis de longue date C++ devs, quelques soucis sont apparus. Donc, je vous demande de vous (répondre):

1) La langue elle-même

Cette mise à jour est énorme, peut-être trop vaste pour un seul standard de mise à jour. Énorme pour les éditeurs de compilateurs (même si la plupart d'entre eux déjà commencé à mettre en œuvre certaines fonctionnalités), mais aussi pour les utilisateurs finaux.

En particulier, un ami à moi m'a dit "c'est une sorte de nouveau langage".

  • Peut-on envisager une nouvelle langue après cette mise à jour?
  • Envisagez-vous de passer à la nouvelle norme ou de maintenir avec le "vieux" norme(s)?

2) la Connaissance de la langue

  • Comment la courbe d'apprentissage est affecté par la nouvelle norme?
  • L'enseignement de la langue sera plus difficile?
  • Certaines fonctionnalités, tout en assez impressionnant, semblent un peu trop "académique", pour moi (comme définition, je veux dire). Suis-je tort?
  • Maîtriser tous ces nouveaux ajouts pourrait être un cauchemar, n'est-ce pas?

18voto

Mike Caron Points 2426

En bref, non, on ne peut pas la considérer d'une nouvelle langue. C'est la même langue, de nouvelles fonctionnalités. Mais au lieu d'être vissés à l'aide de la Boost libs, ils sont maintenant inclus avec l'appareil si vous utilisez un compilateur qui prend en charge le 0x standard.

Pour ne pas avoir à utiliser la nouvelle norme tout en utilisant un compilateur qui prend en charge la nouvelle norme. On aura à apprendre et à utiliser la nouvelle norme si certaines contraintes existent sur le logiciel développé, cependant, mais c'est une contrainte avec un logiciel effort. Je pense que les nouvelles fonctionnalités que l'0x standard apporte va faire faire certaines choses plus facile et moins sujette aux erreurs, il est donc à l'avantage d'apprendre que les nouvelles fonctionnalités sont, et comment ils vont améliorer leur stratégie de conception pour les futurs travaux. On va aussi apprendre de sorte que lorsque l'on travaille sur des logiciels développés avec elle, ils vont comprendre ce qu'il se passe et de ne pas faire de gros boo-boos.

Quant à savoir si je vais "passer à la nouvelle norme", si cela signifie que je vais apprendre la nouvelle norme et de l'utiliser le cas échéant et si elle augmente ma productivité, alors oui, j'ai certainement l'intention de l'interrupteur. Toutefois, si cela signifie que je vais limiter moi-même à travailler uniquement avec les nouvelles fonctionnalités de l'0x standard, alors non, puisqu'une grande partie de mon travail consiste à code écrit avant la norme, et qu'elle serait un travail colossal à la refonte de tout pour utiliser les nouvelles fonctionnalités. Non seulement cela, mais il peut introduire de nouveaux bogues et des problèmes de performances que je ne suis pas au courant de sans expérience.

L'apprentissage de C++ a toujours été l'un des plus difficile voyages un programmeur peut entreprendre. Ajout de nouvelles fonctionnalités à la langue ne changera pas la difficulté de l'apprentissage de sa syntaxe et comment l'utiliser efficacement, mais la démarche va changer. Les gens vont toujours à apprendre sur les pointeurs et comment ils fonctionnent, mais ils vont aussi apprendre à propos des pointeurs intelligents et comment elles sont gérées. Dans certains cas, les gens vont apprendre les choses différemment qu'avant. Par exemple, les gens auront toujours besoin d'apprendre comment initialiser les choses, mais maintenant, ils vont apprendre à propos de l'Initialisation Uniforme et de l'Initialiseur de Listes de primaire moyens de faire les choses. Dans certains cas, peut-être la compréhension des choses sera plus facile avec l'ajout de la nouvelle syntaxe pour les plages ou le auto de type de retour dans une déclaration de fonction. Je pense que dans l'ensemble, C++ va devenir plus facile à apprendre et à utiliser tandis que dans le même temps, de plus en plus facile à enseigner.

La maîtrise d'une langue est un objectif à long terme, il ne peut pas être fait au cours de la nuit. Il est idiot de penser que l'on peut avoir de maîtrise sur quelque chose d'aussi complexe que le C++ rapidement. Il faut de la pratique, de l'expérience et de débogage de code à vraiment marteau quelque chose. Sur le plan scolaire d'apprentissage est une chose, mais mettre à profit la connaissance est une toute autre monstre. Je pense que si on a déjà la maîtrise du langage C++, les nouveaux concepts ne représentent pas un fardeau trop lourd, mais un nouveau venu peut avoir un avantage dans la mesure où ils ne sont pas la peine d'apprendre quelques pas de la plus obsolète façons de faire les choses.

15voto

Richard Corden Points 12292

1) La langue elle-même

Autant que je sache, il n'y a vraiment pas de rupture entre les changements C++'03 et C++0x. Le seul que je peux penser ici se rapporte à l'utilisation de auto comme une classe de stockage prescripteur, mais comme il avait pas de sémantique sens je ne vois pas que le fait d'être un problème.

Il y a beaucoup d'autres universitaires de correctifs pour le standard qui sont très nécessaire qu'il, par exemple une meilleure description de la mise en page de membre les données. Enfin, avec le multi-core/cpu architectures train de devenir la norme, fixant le modèle de mémoire est un devoir.

2) la Connaissance de la langue

Personnellement, je pense que 99,9% des développeurs C++ le plus récent de la langue va être plus facile à utiliser. Je suis spécialement pensée de fonctionnalités telles que l'auto, lambda et constexpr. Ces caractéristiques devraient vraiment faire à l'aide de la langue la plus agréable.

À un niveau plus avancé, vous avez d'autres fonctionnalités telles que les variadic modèles etc qui aident les utilisateurs plus avancés.

Mais il n'y a rien de nouveau ici, je suis toujours surpris de la quantité de tous les jours les développeurs C++ qui n'ont pas utilisé (ou même entendu parler de) la STL.

À partir d'un point de vue personnel, la seule fonctionnalité que je suis un peu inquiet au sujet de la nouvelle norme est que de concepts. Parce que c'est un grand changement, les mêmes problèmes qui ont eu lieu avec des modèles (ie. complètement brisé implémentations) est un réel danger.

Mise à jour post FDIS de sortir pour le vote:

Comme il arrive, "concepts" a été abandonné pour C++ 0x et sera repris pour le C++ 1x. En fin de compte il y a quelques changements autres que auto qui pourrait briser votre code, mais dans la pratique, ils vont probablement être assez rare. Les principales différences peuvent être trouvées dans l'Annexe C. 2 de la FDIS (pdf).

9voto

paxdiablo Points 341644

Votre ami est en partie juste, mais le plus souvent fausses: c'est la même langue avec des fonctionnalités supplémentaires.

La bonne chose est, vous n'avez pas à maîtriser toutes les nouvelles fonctionnalités. L'un des principaux mandats pour un organisme de normalisation est de ne pas casser le code existant, de sorte que vous serez en mesure d'aller sur, heureux de codage dans votre style ancien (je suis encore un codeur C, même si je ne "C++" applications :-).

Seulement quand vous voulez avoir un oeil sur les nouvelles fonctionnalités dont vous aurez besoin pour l'os sur les changements. C'est un processus que vous pouvez étirer sur des années en cas de besoin.

Mon conseil est d'apprendre à connaître toutes les nouvelles fonctionnalités sont à un niveau élevé (si ce n'est pour son bien informés dans les entretiens d'embauche), mais d'apprendre les détails lentement.

8voto

James Hopkin Points 8318

À certains égards, C++0x devrait être plus facile à enseigner/apprendre que le C++:

  • Une boucle dans un conteneur de la nouvelle - for syntaxe est beaucoup plus facile que d' for_each + foncteur ou en boucle manuellement à l'aide d'itérateurs
  • Initialisation des conteneurs: nous allons être en mesure de s'initialiser les séquences avec la même syntaxe que des tableaux
  • Gestion de la mémoire: sur va douteux vieux - auto_ptr, en vient bien définis unique_ptr et shared_ptr

Les Lambdas, bien que nécessairement plus complexe que pour les autres langues des " équivalents, sera plus facile à apprendre que le C++98 processus de définition de la fonction des objets dans un champ d'application différent.

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