Il existe certains langages de programmation pour lesquels il existe un système de gestion de paquets:
- CTAN pour TeX
- CPAN pour Perl
- Pip & Eggs pour Python
- Maven pour Java
- cabale pour Haskell
- Gems pour Ruby
- npm pour NodeJS
- bower pour frontend Javascript & CSS
- pépite pour C #
- compositeur pour PHP
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-get
ou d'autres systèmes généraux de gestion de packages , n'est-elle pas meilleure?
Réponses:
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.
la source
#include
commande. 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.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.
la source
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 install
etgit clone
sans objet.la source
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:
la source
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.
la source