¿Por qué no hay sistemas de gestión de paquetes para C y C ++? [cerrado]

78

Existen algunos lenguajes de programación para los que existe un sistema de gestión de paquetes:

¿Hay otros idiomas con tales sistemas? ¿Qué pasa con C y C ++? (¡esa es la pregunta principal!) ¿Por qué no hay tales sistemas para ellos? Y no es la creación de paquetes para yum, apt-getu otros sistemas generales de gestión paquete mejores?

m0nhawk
fuente
3
Objective-C tiene Cocoapods (muy similar a las gemas de rubí y al haz) Tan extraño que C ++ no tiene algo similar. Quizás porque C ++ es menos homogéneo. Apple ofrece más cosas estándar para construir paquetes por encima. En C ++ casi no se puede acordar qué clase de cadena usar.
Erik Engheim
Solo me gustaría señalar que los gestores de paquetes de otros idiomas no son perfectos. Por ejemplo, en Ruby Gems, a menudo se puede encontrar una gema que no funciona para un sistema operativo específico (más que probable Windows) y la documentación no dice que no funciona para ese sistema operativo.
Travis Pessetto
stackoverflow.com/questions/7266097/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

28

En realidad, algunas personas (de notable fama de impulso) están trabajando duro para crear y establecer un sistema llamado Ryppl . Es difícil establecer dicho sistema para C ++, porque no tiene un solo jugador que pueda dictarlo. - ACTUALIZACIÓN: Lamentablemente se abandona.

En su segunda pregunta, un administrador de paquetes normal (además de no ser multiplataforma) no maneja las necesidades específicas de los desarrolladores.

Fabio Fracassi
fuente
2
Wow, me pregunto cómo van a luchar 20 años de "¡No necesitamos un administrador de paquetes!"
TheLQ
8
Bueno, siendo de la fama de Boost, les daré el beneficio de la duda y echaré un vistazo. Boost, después de todo, es bastante sorprendente :)
Onno
2
@TheLQ: no creo que haya otra cosa que luchar aparte de que nadie haya presentado previamente una solución viable. No hay "no necesitamos no apestar a un administrador de paquetes" hay "Nadie me ha mostrado nada que parezca útil". Lo primero puede ser difícil de resolver, pero lo segundo es simple: solo presente algo que realmente ayude a los desarrolladores a hacer su trabajo.
Michael Kohne
1
Esta respuesta debe actualizarse: 1) Ryppl es un proyecto muerto, incluso su sitio web está muerto. 2) Otros proyectos (comerciales o no) como cpm se han generado recientemente, por lo que se está trabajando mucho para obtener un administrador de paquetes para C ++. 3) Creo que no habrá ganador hasta que los módulos estén en el idioma y una de las herramientas logre explotarlo al máximo.
Klaim
2
@Klaim re: {hasta que los módulos estén en el idioma}, hasta donde yo entiendo, los módulos no hacen las cosas más fáciles, es solo una sintaxis para el #includecomando. No resolverá el problema principal de versiones / descargas / instalación / compatibilidad / problemas multiplataforma de C ++.
ruslo
17

Creo que un problema con C y aún más con C ++ es que son lenguajes más heterogéneos: aunque estos lenguajes están estandarizados, existen diferentes compiladores con diferentes opciones o diferentes conjuntos de características compatibles. Por ejemplo, recuerdo haber publicado una pregunta sobre C ++ en el desbordamiento de pila con un ejemplo que funcionaba perfectamente en GCC / Linux y alguien inmediatamente publicó una respuesta diciendo que mi código no era estándar.

Tener un sistema de paquetes como los mencionados en la pregunta implicaría tener un lenguaje común y bibliotecas compatibles con todos los compiladores principales en todos los sistemas operativos comunes. Por ejemplo, no desea descargar un paquete C ++ y descubrir que no se compilará en su versión del compilador X porque se desarrolló en el compilador Y en otro sistema operativo.

Me imagino que un sistema basado en crear y configurar scripts (como se encuentra comúnmente en Linux, Cygwin y otros sabores de Unix) podría funcionar. Pero, ¿por qué los usuarios de Visual Studio deberían adoptarlo? Lo mismo es válido si uno inició un sistema de paquetes basado en compiladores de Microsoft (y bibliotecas).

El hecho de que C ++ sea un lenguaje en rápida evolución y sus estándares siempre demoren un tiempo antes de que todos los compiladores lo admitan por completo no alivia el problema.

Giorgio
fuente
Bueno, puedes escribir C ++ portátil, o puedes escribir en una cadena de herramientas específica. Su elección, y no tiene nada de malo, aunque no hacer lo primero cuando no hay ventaja para lo segundo es algo subóptimo.
Deduplicador
2
Hay portátiles C y C ++. Si un instalador no puede instalar una biblioteca de manera independiente fácilmente, debe volver a crearla. Es perfectamente posible lograr esto. Incluso en NodeJS, muchos módulos no se pueden compilar en Windows, pero aún se las arregla para existir, por lo que los problemas ocasionales de compilación no son un problema, y ​​tener un administrador de paquetes centralizado agiliza los comentarios de los usuarios y hace que sea más incentivo para tratar los problemas.
Dmitry
4

Creo que las preguntas que debemos hacer para responder a las suyas son "¿Qué ganan otros lenguajes / ecosistemas al tener su propio repositorio centralizado de paquetes?" y "¿Se aplica esto a C / C ++?"

Creo que la respuesta a la primera pregunta tiene algo que ver con la promoción inicial de un nuevo lenguaje: los primeros usuarios quieren que sea lo más fácil posible para los recién llegados ingresar al ecosistema, adquirir código útil y probado y contribuir de nuevo. Por razones obvias, el "gráfico de uso" siempre tiene una única raíz: los creadores del idioma. Por lo general, hay una implementación de referencia (al menos inicialmente) y, por lo tanto, cualquier código que desee compartir debe ajustarse a ella.

Esto facilita la creación de paquetes que solo se descargan y compilan. Ciertamente, si C o C ++ se introdujeran en 2013, sus comunidades podrían haber seguido un camino evolutivo similar, pero no lo hicieron y no hay una única cadena de herramientas predominante para aplicar un administrador de paquetes. Esto hace que la implementación de dicho programa sea demasiado problemática para que valga la pena. (¿Debería hacer que los usuarios elijan entre libfoo-gcc y libfoo-vs? ¿Deja que el empaquetador lo resuelva? ¿O el proceso de compilación? Si es así, ¿en qué se diferencia un paquete de un tarball directo?)

Entonces, para resumir mi respuesta a la primera pregunta, creo que el patrón de crear administradores de paquetes sirve principalmente para impulsar la adopción .

Con eso en mente, creo que es bastante fácil ver por qué ningún sistema único ha surgido para satisfacer esta necesidad, porque la necesidad no existe para los programadores C y C ++. Lo que sí constituye un problema para la comunidad C y C ++ (o cualquier comunidad de programadores, en realidad) es la necesidad originalmente implicada: distribuir, mantenerse actualizado y contribuir con el código. Esto ha sido resuelto muchas veces por diferentes personas con diferentes grados de éxito, y de hecho, un sistema está ganando una importante cuota de mercado: git (y algunos otros sistemas antes de eso).

Básicamente, cuando los problemas difieren, las soluciones también se ven diferentes, pero en mi humilde opinión, la diferencia entre escribir gem instally git clonees discutible.

idoby
fuente
2
"¿Qué ganan otros lenguajes / ecosistemas al tener su propio repositorio centralizado de paquetes?". Debe ser un desarrollador muy experimentado para comenzar a descargar paquetes y confiar en que funcionen correctamente con su software. Tener un administrador de paquetes permite a las personas comenzar a usar paquetes en lugar de tratar con instrucciones de compilación sensibles al contexto, etc. Yo mismo no puedo encontrar la manera de impulsar el trabajo en MinGW, por lo que termino escribiendo gran parte de su funcionalidad una y otra vez, en lugar de usarla. Es una tontería no tener.
Dmitry
1
No tener que luchar con varios scripts de instalación / construcción y banderas sería una gran victoria.
themihai
3

Hay una pequeña confusión en esta pregunta. El software mencionado anteriormente administra extensiones para lenguajes de programación específicos. Proporcionan bibliotecas y código fuente que luego se pueden usar en su programa con el lenguaje de programación de su elección.

Mientras que los administradores de paquetes de nivel general del sistema generalmente proporcionan paquetes binarios que se pueden usar independientemente de la aplicación. Están más orientados al sistema y al usuario. Por supuesto, los sistemas de gestión de paquetes a nivel de sistema como Aptitude, rpm, Entropy pueden proporcionar cualquier paquete, ya sea binario o código fuente. Es por eso que encontrarás en ellas la mayoría de las extensiones que instalarías con ... Gem, por ejemplo.

Entonces, lo que mencionó como Yum y Apt-get o Rigo son solo interfaces de usuario para los sistemas de administración de paquetes que se encuentran debajo de ellos.

Uno más para la lista de lenguajes de programación:

  • Compositor y Pera para PHP
Patkos Csaba
fuente
Sí, definitivamente. ¿En qué estaba pensando al escribir las últimas tres preguntas?
m0nhawk
El problema es que estos paquetes se obtienen globalmente en lugar de localmente, y agrupar las dependencias de su proyecto en una sola carpeta es muy difícil. Esto significa que un proyecto podría funcionar en su sistema, pero tan pronto como lo coloque en otro sistema, debe recordar de qué depende y obtenerlos todos y colocarlos en los lugares exactos que su proyecto espera que estén. Este proceso es el infierno. Un ejemplo de esto es GTK, fácil de instalar globalmente, difícil de instalar localmente.
Dmitry
0

Me doy cuenta de que esta no es una solución multiplataforma, pero debe agregarse a la mezcla.

CoApp anunció recientemente soporte para la administración de paquetes C ++ usando NuGet: http://blog.nuget.org/20130426/native-support.html

Actualmente, esto solo funciona con el compilador de Visual Studio, pero ha habido muchas solicitudes para que esto funcione en otras plataformas.

Joe
fuente