Ada beberapa bahasa pemrograman yang memiliki sistem manajemen paket:
- CTAN untuk TeX
- CPAN untuk Perl
- Pip & Telur untuk Python
- Maven untuk Jawa
- komplotan rahasia untuk Haskell
- Permata untuk Ruby
- npm untuk NodeJS
- bower untuk Javascript & CSS frontend
- nuget untuk C #
- komposer untuk PHP
Apakah ada bahasa lain dengan sistem seperti itu? Bagaimana dengan C dan C ++? (itu pertanyaan utamanya!) Mengapa tidak ada sistem seperti itu untuk mereka? Dan bukankah membuat paket untuk yum
, apt-get
atau sistem manajemen paket umum lainnya lebih baik?
Jawaban:
Sebenarnya beberapa orang (dari ketenaran boost yang nyata) bekerja keras untuk membuat dan membangun sistem yang disebut Ryppl . Sulit untuk membuat Sistem untuk C ++, karena tidak memiliki pemain tunggal yang dapat mendikte itu. --UPDATE: Sayangnya itu ditinggalkan.
Pada pertanyaan kedua Anda, manajer paket normal (selain tidak menjadi lintas platform) tidak menangani kebutuhan spesifik pengembang.
sumber
#include
perintah. Ini tidak akan menyelesaikan masalah utama dari versi C / masalah versi / download / install / kompatibilitas / lintas-platform C ++.Saya berpikir bahwa masalah dengan C dan lebih banyak lagi dengan C ++ adalah bahwa mereka adalah bahasa yang lebih heterogen: meskipun bahasa-bahasa ini terstandarisasi di sana ada kompiler yang berbeda dengan opsi yang berbeda atau serangkaian fitur yang didukung. Misalnya, saya ingat memposting pertanyaan tentang C ++ pada stack overflow dengan contoh yang berfungsi dengan baik di GCC / Linux dan seseorang segera memposting jawaban yang mengatakan bahwa kode saya tidak standar.
Memiliki sistem paket seperti yang disebutkan dalam pertanyaan akan menyiratkan memiliki bahasa umum dan perpustakaan yang didukung secara seragam oleh semua kompiler utama pada semua sistem operasi umum. Misalnya, Anda tidak ingin mengunduh paket C ++ dan menemukan bahwa itu tidak dapat dikompilasi pada versi kompiler X Anda karena itu dikembangkan pada kompiler Y pada sistem operasi lain.
Saya bisa membayangkan bahwa sistem yang didasarkan pada skrip make dan konfigurasi (seperti yang biasa ditemukan di Linux, cygwin dan citarasa Unix lainnya) dapat berfungsi. Tetapi mengapa pengguna Visual Studio harus mengadopsinya? Hal yang sama berlaku jika seseorang memulai sistem paket berdasarkan Microsoft Compiler (dan pustaka).
Fakta bahwa C ++ adalah bahasa yang berkembang cepat dan standarnya selalu membutuhkan waktu sebelum didukung sepenuhnya oleh semua kompiler tidak mengurangi masalah.
sumber
Saya pikir pertanyaan yang perlu kami tanyakan untuk menjawab pertanyaan Anda adalah "Apa yang diperoleh bahasa / ekosistem lain dari memiliki repositori paket terpusat mereka sendiri?" dan "Apakah ini berlaku untuk C / C ++?"
Saya merasa jawaban untuk pertanyaan pertama ada hubungannya dengan promosi awal bahasa baru: pengadopsi awal ingin membuatnya semudah mungkin bagi pendatang baru untuk memasuki ekosistem, mendapatkan kode yang bermanfaat, teruji dan berkontribusi kembali ke bahasa mereka sendiri. Untuk alasan yang jelas, "grafik penggunaan" selalu memiliki satu root - pencipta bahasa. Biasanya ada satu implementasi referensi (setidaknya pada awalnya) dan oleh karena itu kode apa pun yang mungkin ingin Anda bagikan harus sesuai dengannya.
Ini membuatnya mudah untuk membuat paket yang baru saja diunduh dan dikompilasi. Tentu saja, jika C atau C ++ diperkenalkan pada 2013, komunitas mereka bisa saja mengikuti jalur evolusi yang sama, tetapi mereka tidak dan tidak ada satu pun toolchain yang berlaku untuk menerapkan manajer paket. Hal ini membuat implementasi program seperti itu terlalu merepotkan untuk menjadi layak untuk direpotkan. (haruskah Anda membuat pengguna memilih antara libfoo-gcc dan libfoo-vs? Apakah Anda menyerahkannya kepada pemaket untuk diselesaikan? Atau proses pembuatan? Jika demikian, bagaimana suatu paket berbeda dari tarball langsung?)
Jadi untuk meringkas jawaban saya untuk pertanyaan pertama, saya pikir pola membuat manajer paket sebagian besar berfungsi untuk mendorong adopsi .
Dengan pemikiran itu, saya pikir cukup mudah untuk melihat mengapa tidak ada sistem tunggal yang naik untuk memenuhi kebutuhan ini - karena kebutuhan tidak ada untuk programmer C dan C ++. Apa yang sebenarnya merupakan masalah bagi komunitas C dan C ++ (atau komunitas programmer mana pun, sebenarnya) adalah kebutuhan yang semula tersirat: untuk mendistribusikan, tetap mengikuti perkembangan dan menyumbang kembali kode. Ini telah dipecahkan berkali-kali oleh orang yang berbeda dengan berbagai tingkat keberhasilan, dan memang satu sistem mendapatkan pangsa pasar yang signifikan: git (dan beberapa sistem lain sebelum itu).
Pada dasarnya ketika masalahnya berbeda, solusinya terlihat berbeda juga, tetapi IMHO perbedaan antara mengetik
gem install
dangit clone
diperdebatkan.sumber
Ada sedikit kebingungan dalam pertanyaan ini. Perangkat lunak yang disebutkan di atas mengelola ekstensi untuk bahasa pemrograman tertentu. Mereka menyediakan perpustakaan dan kode sumber yang kemudian dapat digunakan dalam program Anda dengan bahasa pemrograman pilihan Anda.
Sementara paket tingkat sistem umum manajer biasanya menyediakan paket biner yang dapat digunakan terlepas dari aplikasi. Mereka lebih berorientasi pada sistem dan pengguna. Tentu saja, sistem manajemen paket tingkat sistem seperti Aptitude, rpm, Entropy dapat menyediakan paket apa pun , baik itu kode biner atau sumber. Itu sebabnya Anda akan menemukan di dalamnya sebagian besar ekstensi yang akan Anda instal dengan ... Permata misalnya.
Daripada, apa yang Anda sebutkan sebagai Yum dan Apt-get atau Rigo hanyalah antarmuka pengguna untuk sistem manajemen paket di bawahnya.
Satu lagi untuk daftar bahasa pemrograman:
sumber
Saya menyadari ini bukan solusi lintas-platform, tetapi harus ditambahkan ke dalam campuran.
CoApp baru-baru ini mengumumkan dukungan untuk manajemen paket C ++ menggunakan NuGet: http://blog.nuget.org/20130426/native-support.html
Ini saat ini hanya berfungsi dengan kompiler Visual Studio, tetapi ada banyak permintaan untuk membuatnya bekerja pada platform lain.
sumber