Чому не існує систем управління пакетами для C і C ++? [зачинено]


78

Існує кілька мов програмування, для яких існує система управління пакетами:

Чи є інші мови з такими системами? Що з C і C ++? (ось головне питання!) Чому для них немає таких систем? І не створюють пакети для yum, apt-getабо інших систем загального управління пакетами краще?


3
Objective-C має Cocoapods (дуже схожий на рубінові дорогоцінні камені та розмножувач). Настільки дивно, що у C ++ немає подібного. Можливо тому, що C ++ менш однорідний. Apple пропонує більш стандартні речі для складання пакетів на вершині. У C ++ навряд чи можна погодитись, який клас рядків використовувати.
Ерік Енгхайм

Я хотів би лише зазначити, що менеджери пакунків з інших мов не є ідеальними. Наприклад, у Ruby Gems часто можна зустріти дорогоцінний камінь, який не працює для конкретної ОС (більше, ніж, швидше за все, Windows), і документація не говорить про те, що він не працює для цієї ОС.
Травіс Пессетто

Відповіді:


28

Насправді деякі люди (помітна прискорена слава) наполегливо працюють над створенням та встановленням такої системи під назвою Ryppl . Важко встановити таку систему для C ++, оскільки вона не має єдиного гравця, який би міг її диктувати. - UPDATE: На жаль, це відмовлено.

Що стосується вашого другого питання, звичайний менеджер пакунків (крім того, що він не є крос-платформою) не відповідає конкретним потребам розробників.


2
Нічого собі, мені цікаво, як вони збираються битися 20 років "Нам не потрібен менеджер пакунків!"
TheLQ

8
Що ж, будучи славою Boost, я принесу їм сумніви і погляну. Зрештою, прискорення надзвичайно дивовижне :)
Онно

2
@TheLQ - Я не думаю, що з цим можна боротися, крім того, що ніхто раніше не представив дієвого рішення. Немає "нам не потрібно не смердувати менеджер пакунків", є "Ніхто мені не показав нічого, що здається корисним". Першого може бути важко обійти, але останнє просте: просто презентуйте щось, що насправді допомагає чортам робити свою роботу.
Майкл Коне

1
Цю відповідь слід оновити: 1) Ryppl - це мертвий проект, навіть його веб-сайт мертвий. 2) Останні проекти (комерційні чи ні), такі як cpm, нерегулярно породжують, тому для отримання менеджера пакунків для C ++ робиться багато роботи. 3) Я вважаю, що переможець не буде, поки модулі не стануть на мові і одним із інструментів вдасться використати це повною мірою.
Клаїм

2
@Klaim re: {поки модулі не перебувають на мові}, наскільки я розумію, модулі не полегшують роботу, це лише синтаксичний цукор для #includeкоманди. Це не вирішить головну проблему версій / завантаження / встановлення / сумісності / міжплатформних проблем C ++.
русло

17

Я думаю, що проблема з C, а ще більше з C ++, полягає в тому, що вони є більш неоднорідними мовами: хоча ці мови стандартизовані, існують різні компілятори з різними параметрами або різні набори підтримуваних функцій. Наприклад, я пам’ятаю, як розміщував питання про C ++ під час переповнення стека прикладом, який відмінно працював на GCC / Linux, і хтось одразу опублікував відповідь про те, що мій код нестандартний.

Наявність системи пакетів, подібних до зазначених у питанні, означатиме наявність спільної мови та бібліотек, які підтримуються рівномірно усіма основними компіляторами для всіх загальних операційних систем. Наприклад, ви не хочете завантажити пакет C ++ і виявите, що він не буде компілюватися у вашій версії компілятора X, оскільки він був розроблений на компіляторі Y в іншій операційній системі.

Я міг би уявити, що система, заснована на сценаріях створення та налаштування (як це часто зустрічається в Linux, cygwin та інших ароматах Unix), може працювати. Але чому користувачі Visual Studio повинні це прийняти? Це ж справедливо, якщо запустили пакетну систему на базі компіляторів Microsoft (і бібліотек).

Той факт, що C ++ - це швидко розвивається мова, і її стандарти завжди потребують певного часу, перш ніж повністю підтримувати всі компілятори, не полегшує проблему.


Ну, ви можете написати портативний C ++, або ви можете написати в певний інструментальний ланцюг. Ваш вибір, і нічого поганого в цьому немає, хоч не робити перше, коли немає переваги останньому, є дещо неоптимальним.
Дедуплікатор

2
Є портативний C і C ++. Якщо бібліотеку неможливо встановити самостійно інсталятором легко, її слід переробити. Це цілком можливо здійснити. Навіть у NodeJS багато модулів не спрацьовують у Windows, але це все ще вдається існувати, тому випадкові проблеми збирання не є проблемою, а централізований менеджер пакунків впорядковує зворотній зв’язок з користувачами і робить його більш стимульним для вирішення проблем.
Дмитро

4

Я думаю, що питання, які нам потрібно задати, щоб відповісти на ваші, - це "Які інші мови / екосистеми отримують від власного централізованого сховища пакетів?" та "Чи це стосується C / C ++?"

Я відчуваю, що відповідь на перше запитання має щось спільне з первинним просуванням нової мови: ранні усиновлювачі хочуть зробити так, щоб новачки могли якомога простіше в'їхати в екосистему, придбати корисний, перевірений код та внести свій власний внесок. З зрозумілих причин, "графік використання" завжди має один корінь - творець (-ів) мови. Зазвичай існує одна контрольна реалізація (принаймні спочатку), і тому будь-який код, яким ви хочете поділитися, повинен відповідати їй.

Це дозволяє легко створювати пакети, які просто завантажують і компілюють. Безумовно, якби C або C ++ були представлені в 2013 році, їхні громади могли піти подібним еволюційним шляхом, але вони не мали і немає жодного єдиного ланцюжка інструментів, до якого можна застосувати менеджер пакунків. Це робить реалізацію такої програми занадто клопіткою, щоб її вартувати зайвих проблем. (чи варто змусити користувачів вибирати між libfoo-gcc та libfoo-vs? Ви залишаєте це для упаковки, щоб вирішити? Або процес збирання? Якщо так, як пакет відрізняється від прямого тарболу?)

Отже, підводячи підсумки моєї відповіді на перше запитання, я думаю, що модель створення менеджерів пакунків служить здебільшого для сприяння прийняттю .

Зважаючи на це, я думаю, що досить легко зрозуміти, чому жодна система не піднялася для задоволення цієї потреби - тому що для програмістів на C і C ++ немає потреби. Що є проблемою для спільноти C та C ++ (або будь-якої спільноти програмістів, насправді), це спочатку передбачається потреба: розповсюджувати, постійно оновлювати та надавати зворотний код. Це багато разів вирішувалося різними людьми з різним ступенем успіху, і дійсно одна система здобуває значну частку ринку: git (та деякі інші системи до цього).

В основному, коли проблеми відрізняються, рішення також виглядають по-різному, але ІМХО різниця між введенням тексту gem installі git cloneсуперечкою.


2
"Що отримують інші мови / екосистеми від власного централізованого сховища пакетів?". Вам потрібно бути дуже досвідченим розробником, щоб почати завантажувати пакунки та довіряти їм, щоб вони працювали належним чином із вашим програмним забезпеченням. Наявність менеджера пакунків дозволяє людям просто починати використовувати пакети, а не мати справу з контекстно-чутливими інструкціями щодо побудови тощо. Я сам не можу зрозуміти, як прискорити роботу над MinGW, тому я закінчую писати багато своїх функцій знову і знову, а не просто використовувати його. Дурно не мати.
Дмитро

1
Не доведеться боротися з різними сценаріями встановлення / складання та прапорами було б чудовим виграшем.
themihai

3

У цьому питанні є невелика плутанина. Вищезгадане програмне забезпечення керує розширеннями для певних мов програмування. Вони надають бібліотеки та вихідний код, які згодом можуть бути використані у вашій програмі з обраною вами мовою програмування.

У той час як загальні менеджери пакетів системного рівня зазвичай надають бінарні пакети, які можна використовувати незалежно від програми. Вони більш орієнтовані на систему та користувача. Звичайно, системи управління пакетами на рівні системи, такі як Aptitude, rpm, Entropy, можуть надавати будь-який пакет, будь то двійковий або вихідний код. Ось чому ви знайдете в них більшість розширень, які ви б встановили за допомогою ... Gem, наприклад.

Крім того, те, що ви згадували як Yum та Apt-get або Rigo, - це лише інтерфейси користувача для систем управління пакетами під ними.

Ще один список списку мов програмування:

  • Композитор і груша для PHP

Так, безумовно. Про що я думав, коли писав три останні запитання?
m0nhawk

Проблема полягає в тому, що ці пакети отримують глобально, а не локально, а зв’язування залежностей вашого проекту в одну папку дуже складно. Це означає, що проект може працювати у вашій системі, але як тільки ви розмістите його в іншій системі, вам потрібно запам’ятати, від чого це залежить, і отримати їх усіх і розмістити в тих місцях, де ваш проект очікує. Цей процес - пекло. Прикладом цього є GTK, який легко встановити в усьому світі, важко локально встановити.
Дмитро

0

Я усвідомлюю, що це не кросплатформене рішення, але його слід додати до суміші.

Нещодавно CoApp оголосив про підтримку управління пакетами C ++ за допомогою NuGet: http://blog.nuget.org/20130426/native-support.html

Наразі це працює лише з компілятором Visual Studio, але було багато запитів, щоб це працювало на інших платформах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.