Existem algumas linguagens de programação para as quais existe um sistema de gerenciamento de pacotes:
- CTAN for TeX
- CPAN para Perl
- Pip & Eggs para Python
- Maven para Java
- cabala para Haskell
- Gemas para Ruby
- npm para NodeJS
- caramanchão para front-end Javascript & CSS
- pepita para c #
- compositor para PHP
Existem outros idiomas com esses sistemas? E quanto a C e C ++? (essa é a questão principal!) Por que não existem sistemas para eles? E não é a criação de pacotes para yum
, apt-get
ou outros sistemas de gestão geral pacote melhor?
Respostas:
Na verdade, algumas pessoas (com notável fama de incentivo) estão trabalhando duro para criar e estabelecer um sistema chamado Ryppl . É difícil estabelecer um sistema para C ++, porque ele não possui um único jogador que possa ditá-lo. --UPDATE: Infelizmente foi abandonado.
Na sua segunda pergunta, um gerenciador de pacotes normal (além de não ser multiplataforma) não atende às necessidades específicas dos desenvolvedores.
fonte
#include
comando. Ele não resolverá o problema principal de versão / download / instalação / compatibilidade / problemas de C ++ entre plataformas.Penso que um problema com C e ainda mais com C ++ é que elas são linguagens mais heterogêneas: embora essas linguagens sejam padronizadas, existem compiladores diferentes com opções diferentes ou conjuntos diferentes de recursos suportados. Por exemplo, lembro-me de postar uma pergunta sobre C ++ no estouro de pilha com um exemplo que estava funcionando perfeitamente no GCC / Linux e alguém imediatamente postou uma resposta dizendo que meu código não era padrão.
Ter um sistema de pacotes como os mencionados na pergunta implicaria ter uma linguagem e bibliotecas comuns suportadas uniformemente por todos os principais compiladores em todos os sistemas operacionais comuns. Por exemplo, você não deseja baixar um pacote C ++ e descobre que ele não será compilado na sua versão do compilador X porque foi desenvolvido no compilador Y em outro sistema operacional.
Eu poderia imaginar que um sistema baseado em scripts de criação e configuração (como comumente encontrado no Linux, cygwin e outros tipos de Unix) poderia funcionar. Mas por que os usuários do Visual Studio deveriam adotá-lo? O mesmo vale se alguém iniciou um sistema de pacotes baseado nos Microsoft Compilers (e bibliotecas).
O fato de o C ++ ser uma linguagem de rápida evolução e seus padrões sempre levar algum tempo antes de ser totalmente suportado por todos os compiladores não alivia o problema.
fonte
Acho que as perguntas que precisamos fazer para responder às suas são "O que outros idiomas / ecossistemas ganham por ter seu próprio repositório de pacotes centralizado?" e "Isso se aplica ao C / C ++?"
Eu sinto que a resposta para a primeira pergunta tem algo a ver com a promoção inicial de um novo idioma: os primeiros adotantes querem facilitar ao máximo para que os iniciantes entrem no ecossistema, adquiram códigos úteis e testados e contribuam de volta. Por razões óbvias, o "gráfico de uso" sempre tem uma única raiz - o (s) criador (es) do idioma. Geralmente, há uma implementação de referência (pelo menos inicialmente) e, portanto, qualquer código que você queira compartilhar precisa estar em conformidade.
Isso facilita a criação de pacotes que apenas baixam e compilam. Certamente, se C ou C ++ tivesse sido introduzido em 2013, suas comunidades poderiam ter seguido um caminho evolutivo semelhante, mas não o fizeram e não há uma única cadeia de ferramentas predominante para aplicar um gerenciador de pacotes. Isso torna a implementação de um programa muito problemático para valer a pena. (você deve fazer com que os usuários escolham entre libfoo-gcc e libfoo-vs? Você deixa o empacotador resolver? Ou o processo de compilação? Em caso afirmativo, como um pacote é diferente de um tarball direto?)
Então, para resumir minha resposta à primeira pergunta, acho que o padrão de criação de gerenciadores de pacotes serve principalmente para impulsionar a adoção .
Com isso em mente, acho que é bastante fácil ver por que nenhum sistema único surgiu para atender a essa necessidade - porque a necessidade não existe para programadores de C e C ++. O que constitui um problema para a comunidade C e C ++ (ou para qualquer comunidade de programadores, na verdade) é a necessidade originalmente implícita: distribuir, manter-se atualizado e contribuir com o código de retorno. Isso foi resolvido muitas vezes por pessoas diferentes com graus variados de sucesso e, de fato, um sistema está ganhando participação de mercado significativa: o git (e alguns outros sistemas anteriores a isso).
Basicamente, quando os problemas diferem, as soluções também parecem diferentes, mas IMHO a diferença entre digitar
gem install
egit clone
é discutível.fonte
Há um pouco de confusão nessa questão. O software acima mencionado gerencia extensões para linguagens de programação específicas. Eles fornecem bibliotecas e código fonte que posteriormente podem ser usados no seu programa com sua linguagem de programação preferida.
Embora os gerenciadores de pacotes em nível geral do sistema geralmente forneçam pacotes binários que podem ser usados independentemente do aplicativo. Eles são mais orientados para o sistema e usuário. Obviamente, sistemas de gerenciamento de pacotes em nível de sistema, como Aptitude, rpm, Entropy, podem fornecer qualquer pacote, seja ele código binário ou fonte. É por isso que você encontrará nelas a maioria das extensões que instalaria com ... Gem, por exemplo.
Então, o que você mencionou como Yum e Apt-get ou Rigo são apenas interfaces de usuário para os sistemas de gerenciamento de pacotes abaixo deles.
Mais uma para a lista de linguagens de programação:
fonte
Sei que essa não é uma solução de plataforma cruzada, mas deve ser adicionada à mistura.
A CoApp anunciou recentemente o suporte ao gerenciamento de pacotes C ++ usando o NuGet: http://blog.nuget.org/20130426/native-support.html
Atualmente, isso funciona apenas com o compilador do Visual Studio, mas houve muitas solicitações para que isso funcionasse em outras plataformas.
fonte