Es gibt einige Programmiersprachen, für die ein Paketverwaltungssystem existiert:
- CTAN für TeX
- CPAN für Perl
- Pip & Eggs für Python
- Maven für Java
- Kabale für Haskell
- Edelsteine für Ruby
- npm für NodeJS
- Laube für Frontend Javascript & CSS
- Nuget für C #
- Komponist für PHP
Gibt es andere Sprachen mit solchen Systemen? Was ist mit C und C ++? (das ist die Hauptfrage!) Warum gibt es für sie keine solchen Systeme? Und schafft keine Pakete für yum
, apt-get
oder andere allgemeine Paket - Management - Systeme besser?
Antworten:
Tatsächlich arbeiten einige Leute (mit spürbarem Aufschwung) hart daran, ein solches System namens Ryppl zu schaffen und zu etablieren . Es ist schwierig, ein solches System für C ++ einzurichten, da es keinen einzelnen Player hat, der dies vorgeben kann. --UPDATE: Leider ist es aufgegeben.
Bei Ihrer zweiten Frage geht ein normaler Paketmanager (abgesehen davon, dass er nicht plattformübergreifend ist) nicht auf die spezifischen Bedürfnisse von Entwicklern ein.
quelle
#include
Befehl. Das Hauptproblem von Versions- / Download- / Installations- / Kompatibilitäts- / plattformübergreifenden C ++ - Problemen wird dadurch nicht gelöst.Ich denke, dass ein Problem mit C und noch mehr mit C ++ darin besteht, dass es sich um heterogene Sprachen handelt: Auch wenn diese Sprachen standardisiert sind, gibt es unterschiedliche Compiler mit unterschiedlichen Optionen oder unterschiedlichen Mengen unterstützter Funktionen. Ich erinnere mich beispielsweise, eine Frage zu C ++ beim Stapelüberlauf mit einem Beispiel gestellt zu haben, das unter GCC / Linux einwandfrei funktioniert hat, und jemand hat sofort eine Antwort gesendet, dass mein Code nicht dem Standard entspricht.
Ein Paketsystem wie das in der Frage erwähnte zu haben, würde bedeuten, eine gemeinsame Sprache und Bibliotheken zu haben, die von allen wichtigen Compilern auf allen gängigen Betriebssystemen einheitlich unterstützt werden. Sie möchten beispielsweise kein C ++ - Paket herunterladen und feststellen, dass es auf Ihrer Version von Compiler X nicht kompiliert werden kann, da es auf Compiler Y auf einem anderen Betriebssystem entwickelt wurde.
Ich könnte mir vorstellen, dass ein System, das auf make- und configure-Skripten basiert (wie es unter Linux, Cygwin und anderen Unix-Varianten üblich ist), funktionieren könnte. Aber warum sollten Visual Studio-Benutzer es übernehmen? Gleiches gilt, wenn ein auf Microsoft Compilern (und Bibliotheken) basierendes Paketsystem gestartet wird.
Die Tatsache, dass C ++ eine sich schnell entwickelnde Sprache ist und ihre Standards immer einige Zeit in Anspruch nehmen, bevor sie von allen Compilern vollständig unterstützt werden, lindert das Problem nicht.
quelle
Ich denke, die Fragen, die wir stellen müssen, um Ihre Fragen zu beantworten, lauten: "Was haben andere Sprachen / Ökosysteme davon, ein eigenes zentrales Paket-Repository zu haben?" und "Gilt das für C / C ++?"
Ich glaube, die Antwort auf die erste Frage hat etwas mit der anfänglichen Förderung einer neuen Sprache zu tun: Die Early Adopters möchten es Neuankömmlingen so einfach wie möglich machen, in das Ökosystem einzusteigen, nützlichen, getesteten Code zu erwerben und ihren eigenen Code zurückzugeben. Aus offensichtlichen Gründen hat der "Verwendungsgraph" immer eine einzige Wurzel - den Schöpfer (die Schöpfer) der Sprache. Normalerweise gibt es eine Referenzimplementierung (zumindest anfangs), und daher muss jeder Code, den Sie freigeben möchten, dieser entsprechen.
Dies macht es einfach, Pakete zu erstellen, die nur heruntergeladen und kompiliert werden. Wäre C oder C ++ im Jahr 2013 eingeführt worden, hätten ihre Communities einen ähnlichen Entwicklungspfad beschreiten können, aber das war nicht der Fall, und es gibt keine einzige Toolchain, auf die ein Paketmanager angewendet werden könnte. Dies macht die Implementierung eines solchen Programms zu mühsam, um den Aufwand wert zu sein. (Sollten Sie Benutzer dazu bringen, zwischen libfoo-gcc und libfoo-vs zu wählen? Überlassen Sie die Lösung dem Packager? Oder dem Erstellungsprozess? Wenn ja, wie unterscheidet sich ein Paket von einem reinen Tarball?)
Um meine Antwort auf die erste Frage zusammenzufassen: Ich denke, das Muster der Erstellung von Paketmanagern dient hauptsächlich dazu, die Akzeptanz voranzutreiben .
In Anbetracht dessen ist es meiner Meinung nach ziemlich einfach zu verstehen, warum kein einzelnes System aufgestiegen ist, um diesen Bedarf zu decken - da C- und C ++ - Programmierer nicht benötigt werden. Was für die C- und C ++ - Community (oder wirklich für jede Programmierer-Community) ein Problem darstellt, ist die ursprünglich implizierte Notwendigkeit, Code zu verteilen, auf dem neuesten Stand zu halten und einen Beitrag zum Code zu leisten. Dies wurde viele Male von verschiedenen Personen mit unterschiedlichem Erfolg gelöst, und tatsächlich gewinnt ein System einen signifikanten Marktanteil: git (und einige andere Systeme zuvor).
Grundsätzlich, wenn sich die Probleme unterscheiden, sehen die Lösungen auch anders aus, aber IMHO ist der Unterschied zwischen Tippen
gem install
undgit clone
strittig.quelle
Diese Frage ist etwas verwirrend. Die oben genannte Software verwaltet Erweiterungen für bestimmte Programmiersprachen. Sie stellen Bibliotheken und Quellcode zur Verfügung, die anschließend in Ihrem Programm mit der Programmiersprache Ihrer Wahl verwendet werden können.
Während allgemeine Paketverwalter auf Systemebene normalerweise Binärpakete bereitstellen, die unabhängig von der Anwendung verwendet werden können. Sie sind mehr auf das System und den Benutzer ausgerichtet. Natürlich können Paketverwaltungssysteme auf Systemebene wie Aptitude, rpm, Entropy jedes Paket bereitstellen , sei es Binär- oder Quellcode. Deshalb finden Sie in ihnen die meisten Erweiterungen, die Sie mit ... Gem zum Beispiel installieren würden .
Was Sie als Yum und Apt-get oder Rigo bezeichnet haben, sind nur Benutzeroberflächen für die darunter liegenden Paketverwaltungssysteme.
Noch eine für die Liste der Programmiersprachen:
quelle
Mir ist klar, dass dies keine plattformübergreifende Lösung ist, aber sie sollte dem Mix hinzugefügt werden.
CoApp hat kürzlich die Unterstützung für die C ++ - Paketverwaltung mit NuGet angekündigt: http://blog.nuget.org/20130426/native-support.html
Dies funktioniert derzeit nur mit dem Visual Studio-Compiler, aber es gab viele Anfragen, um dies auf anderen Plattformen zum Laufen zu bringen.
quelle