Pourquoi n'y a-t-il pas de systèmes de gestion de paquets pour C et C ++? [fermé]

78

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'existe-t-il pas de tels systèmes? Et la création de packages pour yum, apt-getou d'autres systèmes généraux de gestion de packages , n'est-elle pas meilleure?

M0nhawk
la source
3
Objective-C contient des Cocoapods (très similaires aux gemmes et aux fagots de rubis). Tellement bizarre que C ++ n'ait pas quelque chose de similaire. Peut-être parce que C ++ est moins homogène. Apple fournit plus de choses standard pour construire des paquets en plus. En C ++, on peut difficilement se mettre d’accord sur la classe de chaîne à utiliser.
Erik Engheim
Je voudrais juste souligner que les gestionnaires de paquets d'autres langues ne sont pas parfaits. Par exemple, dans Ruby Gems, il est fréquent que vous rencontriez un bijou qui ne fonctionne pas pour un système d'exploitation spécifique (plus que probablement Windows) et la documentation ne vous indique pas que cela ne fonctionne pas pour ce système d'exploitation.
Travis Pessetto
stackoverflow.com/questions/7266097/…
Ciro Santilli a annoncé le film

Réponses:

28

En fait, certaines personnes (de notoriété notoire ) travaillent dur pour créer et mettre en place un tel système appelé Ryppl . Il est difficile d’établir un tel système pour C ++, car il n’a aucun lecteur capable de le dicter. - UPDATE: Malheureusement, il est abandonné.

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

Fabio Fracassi
la source
2
Wow, je me demande comment ils vont se battre 20 ans de "Nous n'avons pas besoin d'un gestionnaire de paquets!"
TheLQ
8
Bien, étant de renommée Boost, je leur donnerai le bénéfice du doute et jetterai un coup d'oeil. Boost, après tout, est tout à fait incroyable :)
Onno
2
@TheLQ - Je ne pense pas qu'il y ait autre chose à combattre que celle que personne n'ait présentée auparavant. Il n'y a pas "nous n'avons pas besoin de stink'n package manager", il y a "personne ne m'a montré quoi que ce soit qui semble utile". Les premiers peuvent être difficiles à déplacer, mais les derniers sont simples: il suffit de présenter quelque chose qui aide réellement les développeurs à faire leur travail.
Michael Kohne
1
Cette réponse devrait être mise à jour: 1) Ryppl est un projet mort, même si son site Web est mort. 2) D'autres projets (commerciaux ou non) tels que cpm ont récemment vu le jour, il y a donc beaucoup de travail à faire pour obtenir un gestionnaire de paquets pour C ++. 3) Je pense qu’il n’y aura pas de gagnant avant que les modules ne soient dans le langage et l’un des outils parviendra à l'exploiter au maximum.
Klaim
2
@Klaim re: {jusqu'à ce que les modules soient dans la langue}, autant que je sache, les modules ne facilitent pas les choses, mais constituent simplement un sucre syntaxique pour la #includecommande. Cela ne résoudra pas le problème principal de la gestion de version, du téléchargement, de l’installation, de la compatibilité, du C ++ inter-plateformes.
Ruslo
17

Je pense qu'un problème avec C et plus encore avec C ++ est que ce sont des langages plus hétérogènes: même si ces langages sont normalisé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 d'avoir posté une question à propos du C ++ sur le dépassement de pile avec un exemple qui fonctionnait parfaitement sous GCC / Linux et quelqu'un a immédiatement posté une réponse disant que mon code était non standard.

Avoir un système de paquetage comme ceux mentionnés dans la question impliquerait d'avoir un langage commun et des bibliothèques qui sont supportées uniformément par tous les principaux compilateurs sur tous les systèmes d'exploitation courants. Par exemple, vous ne souhaitez pas télécharger un package C ++ et découvrir qu'il ne 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.

J'imaginais qu'un système basé sur des scripts de fabrication et de configuration (comme on en trouve couramment sous 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 on a démarré un système de paquet basé sur Microsoft Compilers (et des bibliothèques).

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

Giorgio
la source
Eh bien, vous pouvez écrire en C ++ portable ou écrire dans une chaîne d’outils spécifique. Votre choix, et rien de mal à l’un ou l’autre, bien que ne pas faire le premier sans aucun avantage pour le second est quelque peu sous-optimal.
Déduplicateur
2
Il y a des portables C et C ++. Si un installateur ne peut pas installer facilement une bibliothèque de manière autonome, il convient de la refaire. C'est parfaitement possible d'accomplir cela. Même dans NodeJS, de nombreux modules ne parviennent pas à construire sur Windows, mais ils réussissent toujours à exister. Ainsi, les problèmes de construction occasionnels ne posent pas de problème. Un gestionnaire de paquets centralisé rationalise les informations en retour des utilisateurs et les incite davantage à les résoudre.
Dmitry
4

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

Je pense que la réponse à la première question a quelque chose à voir avec la promotion initiale d'un nouveau langage: les premiers utilisateurs veulent que les nouveaux arrivants puissent entrer aussi facilement que possible dans l'écosystème, acquérir un code utile et testé et contribuer eux-mêmes. Pour des raisons évidentes, le "graphique d'utilisation" a toujours une racine unique - le (s) créateur (s) du langage. Il existe généralement une implémentation de référence (du moins au début) et, par conséquent, tout code que vous souhaitez partager doit s'y conformer.

Cela facilite la création de paquetages téléchargeables et compilés. Certes, si le C ou C ++ avait été introduit en 2013, leurs communautés auraient pu suivre une évolution similaire, mais ce n’était pas le cas et il n’existait aucune chaîne d’outils prédominante à laquelle appliquer un gestionnaire de paquets. Cela rend la mise en œuvre d'un tel programme trop fastidieuse pour en valoir la peine. (devriez-vous obliger les utilisateurs à choisir entre libfoo-gcc et libfoo-vs? Laissez-vous le responsable du paquet pour résoudre le problème? Ou le processus de construction? Dans ce cas, en quoi un paquet est-il différent d'une archive tar-up?)

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

En gardant cela à l'esprit, je pense qu'il est assez facile de comprendre pourquoi aucun système n'a été développé pour répondre à ce besoin - car le besoin n'existe pas pour les programmeurs C et C ++. Ce qui pose problème à la communauté C et C ++ (ou à toute communauté de programmeurs, en réalité), c’est le besoin qui était au départ implicite: distribuer, maintenir à jour et contribuer au code. Ce problème a été résolu à maintes reprises par différentes personnes ayant plus ou moins de succès, et un système gagne en effet une part de marché importante: git (et certains autres systèmes auparavant).

Fondamentalement, lorsque les problèmes diffèrent, les solutions semblent également différentes, mais à mon humble avis, la différence entre taper gem installet git clonesans objet.

idiot
la source
2
"Qu'est-ce que les autres langues / écosystèmes gagnent à avoir leur propre référentiel de paquets centralisé?". Vous devez être un développeur très expérimenté pour commencer à télécharger des packages et en leur faisant confiance pour qu'ils fonctionnent correctement avec votre logiciel. Avoir un gestionnaire de paquets permet aux utilisateurs de commencer à utiliser des paquets au lieu de traiter avec des instructions de construction sensibles au contexte / ainsi de suite. Je ne sais pas moi-même comment me motiver pour travailler sur MinGW. Je finis donc par écrire moi-même une grande partie de ses fonctionnalités au lieu de les utiliser. C'est idiot de ne pas en avoir.
Dmitry
1
Ne pas avoir à se battre avec divers scripts d'installation / construction et des drapeaux serait une grande victoire.
themihai
3

Il y a un peu de confusion dans cette question. Le logiciel mentionné ci-dessus gère des 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.

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

Ensuite, ce que vous avez appelé Yum et Apt-get ou Rigo ne sont que des interfaces utilisateur pour les systèmes de gestion de paquets situés en dessous d’eux.

Un de plus pour la liste des langages de programmation:

  • Compositeur et poire pour PHP
Patkos Csaba
la source
Ouais absolument. À quoi je pensais en écrivant les trois dernières questions?
m0nhawk
Le problème est que ces packages sont globaux plutôt que localement, et il est très difficile de regrouper les dépendances de votre projet dans un seul dossier. Cela signifie qu'un projet peut fonctionner sur votre système, mais dès que vous le mettez sur un autre système, vous devez vous rappeler de quoi il dépend, les obtenir tous et les placer exactement à l'emplacement prévu par votre projet. Ce processus est un enfer. Un exemple de ceci est GTK, facile à installer globalement, difficile à installer localement.
Dmitry
0

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

CoApp a récemment annoncé une 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 beaucoup de demandes pour que cela fonctionne sur d'autres plates-formes.

Joe
la source