web-dev-qa-db-fra.com

Pourquoi n'y a-t-il pas de systèmes de gestion de packages pour C et C ++?

Il existe certains langages de programmation pour lesquels il existe un système de gestion de paquets:

Existe-t-il d'autres langues avec de tels systèmes? Qu'en est-il du C et du C++? (c'est la question principale!) Pourquoi n'y a-t-il pas de tels systèmes pour eux? Et ne crée pas de packages pour yum, apt-get ou d'autres systèmes généraux de gestion de paquets?

82
m0nhawk

En fait, certaines personnes (d'une renommée de boost notable) travaillent dur pour créer et établir un tel système appelé Ryppl . Il est difficile d'établir un tel système pour C++, car il n'a pas de joueur unique qui puisse le dicter. --MISE À JOUR: Malheureusement, il est abandonné.

Sur votre deuxième question, un gestionnaire de paquets normal (en plus de ne pas être multiplateforme) ne gère pas les besoins spécifiques des développeurs.

31
Fabio Fracassi

Je pense qu'un problème avec C et encore plus avec C++ est qu'il s'agit de langages plus hétérogènes: même si ces langages sont standardisés, il existe différents compilateurs avec différentes options ou différents ensembles de fonctionnalités prises en charge. Par exemple, je me souviens avoir posté une question sur C++ sur le débordement de pile avec un exemple qui fonctionnait parfaitement sur GCC/Linux et quelqu'un a immédiatement posté une réponse disant que mon code n'était pas standard.

Avoir un système de packages comme ceux mentionnés dans la question impliquerait d'avoir un langage et des bibliothèques communs qui sont pris en charge uniformément par tous les principaux compilateurs sur tous les systèmes d'exploitation courants. Par exemple, vous ne voulez pas télécharger un package C++ et découvrir qu'il ne se compilera pas sur votre version du compilateur X car il a été développé sur le compilateur Y sur un autre système d'exploitation.

Je pourrais imaginer qu'un système basé sur des scripts de création et de configuration (comme on le trouve couramment sur Linux, cygwin et d'autres versions Unix) pourrait fonctionner. Mais pourquoi les utilisateurs de Visual Studio devraient-ils l'adopter? La même chose est valable si l'on a démarré un système de packages basé sur Microsoft Compilers (et bibliothèques).

Le fait que C++ soit un langage en évolution rapide et que ses normes prennent toujours un certain temps avant d'être entièrement pris en charge par tous les compilateurs ne résout pas le problème.

17
Giorgio

Je pense que les questions que nous devons nous poser pour répondre à la vôtre sont: "Qu'est-ce que les autres langues/écosystèmes gagnent à avoir leur propre référentiel de packages centralisé?" et "Est-ce que cela s'applique à C/C++?"

Je pense que la réponse à la première question a quelque chose à voir avec la promotion initiale d'une nouvelle langue: les premiers adoptants veulent faciliter le plus possible l'entrée des nouveaux arrivants dans l'écosystème, acquérir du code utile et testé et contribuer en retour. Pour des raisons évidentes, le "graphique d'utilisation" n'a toujours qu'une seule racine - le ou les créateurs de la langue. Il existe généralement une implémentation de référence (au moins initialement) et, par conséquent, tout code que vous souhaitez partager doit s'y conformer.

Cela facilite la création de packages à télécharger et à compiler. Certes, si C ou C++ avait été introduit en 2013, leurs communautés auraient pu suivre un chemin d'évolution similaire, mais elles ne l'avaient pas fait et il n'y a pas une seule chaîne d'outils dominante à laquelle appliquer un gestionnaire de packages. Cela rend la mise en œuvre d'un tel programme trop gênante pour en valoir la peine. (devez-vous obliger les utilisateurs à choisir entre libfoo-gcc et libfoo-vs? Laissez-vous le soin au conditionneur de le résoudre? Ou au processus de construction? Si oui, en quoi un package est-il différent d'une archive tar droite?)

Donc, pour résumer ma réponse à la première question, je pense que le modèle de création de gestionnaires de packages sert principalement à conduire adoption.

Dans cet esprit, je pense qu'il est assez facile de voir pourquoi aucun système unique n'a augmenté pour répondre à ce besoin - car le besoin n'existe pas pour les programmeurs C et C++. Ce qui constitue un problème pour la communauté C et C++ (ou toute communauté de programmeurs, vraiment) est le besoin implicite à l'origine: distribuer, tenir à jour et contribuer en retour du code. Ce problème a été résolu à plusieurs reprises par différentes personnes avec plus ou moins de succès, et en effet, un système gagne une part de marché importante: git (et certains autres systèmes avant cela).

Fondamentalement, lorsque les problèmes diffèrent, les solutions semblent également différentes, mais à mon humble avis la différence entre taper gem install et git clone est théorique.

4
idoby

Il y a un peu de confusion dans cette question. Les logiciels mentionnés ci-dessus gèrent les extensions pour des langages de programmation spécifiques. Ils fournissent des bibliothèques et du code source qui peuvent ensuite être utilisés dans votre programme avec le langage de programmation de votre choix.

Alors que les gestionnaires de packages au niveau système général fournissent généralement des packages binaires qui peuvent être utilisés quelle que soit l'application. Ils sont davantage orientés vers le système et l'utilisateur. Bien sûr, les systèmes de gestion de paquets au niveau du système comme Aptitude, rpm, Entropy peuvent fournir un paquet any, qu'il soit binaire ou code source. C'est pourquoi vous y trouverez la plupart des extensions que vous installeriez avec ... Gem par exemple.

Alors, ce que vous avez mentionné comme Miam et Apt-get ou Rigo sont juste des interfaces utilisateur pour les systèmes de gestion de paquets en dessous d'eux.

Un de plus pour la liste des langages de programmation:

  • Compositeur et Pear pour PHP
3
Patkos Csaba

Je me rends compte que ce n'est pas une solution multiplateforme, mais elle devrait être ajoutée au mélange.

CoApp a récemment annoncé la prise en charge de la gestion des packages C++ à l'aide de NuGet: http://blog.nuget.org/20130426/native-support.html

Cela ne fonctionne actuellement qu'avec le compilateur Visual Studio, mais il y a eu de nombreuses demandes pour que cela fonctionne sur d'autres plates-formes.

0
Joe