2012-10-29 22 views
13

(Zanim zacznę: Idę do korzystania Cabal dla wszystko, co ma w nazwie Cabal i ma coś wspólnego z Haskell.)Dlaczego Cabal nie wykonał pełnego menedżera pakietów?

Miał zwykle „trzeba zaktualizować X do zainstalować Y, ale to złamie zależność z”kwestię ponownie na drugi dzień, myślałem, że po prostu zapytać: dlaczego Cabal nie przeznaczony do pełnej menedżera pakietów, szczególnie z następujących cech:

  • Versioning: instaluj wiele wersji paczki obok siebie, pozwalaj paczkom wybrać desir ed zależności. Jeśli nie podano wersji pakietu, użyj najnowszej dostępnej wersji.
  • Zaktualizuj pakiety - lub lepiej, również zainstaluj najnowszą wersję.
  • Usuń pakiety
  • sprawdzanie integralności pakietu

można zobaczyć, gdzie ta lista się dzieje. W tej chwili Cabal wydaje się być nieco wyrafinowanym systemem kompilacji (spróbuj dowiedzieć się, która wersja Base wymaga twojego pakietu, kiedy chcesz zacząć go używać po raz pierwszy), który jest dostarczany z na wpół wypalonym instalatorem pakietów.

Więc znowu pytanie: Dlaczego Cabal nie wykonał w pełni funkcjonalnego systemu budowy/paczki? Jestem pewien, że była pewna decyzja projektowa, która doprowadziła do obecnego stanu.

(To pytanie zostało nieco inspirowane a rant on Reddit, ale w przeciwieństwie do tego faceta nie urazić nikogo przez wyżej). :-)

+3

To pytanie powinno być również na czerwono - zbyt daleko od pytań programistycznych, które należą do SO. –

+4

Od najczęściej zadawanych pytań * pytania do zapytania tutaj *: "narzędzia programowe powszechnie używane przez programistów"? Czek. "praktyczne, odpowiedzialne problemy, które są unikalne dla zawodu programisty"? Czek. – David

+0

Czy zgłosiłeś się na ochotnika, aby dodać Cabala do pełnego menedżera pakietów? –

Odpowiedz

10

Instalowanie wielu wersji tego samego pakietu doskonale działa teraz (spróbuj cabal install ansi-terminal-0.5.4 && cabal install ansi-terminal-0.5.5), ale instalowanie wielu wystąpień z tej samej wersji pakietu nie działa. To jest coś, co bardzo chcielibyśmy wspierać, ponieważ pozwoliłoby nam wdrożyć hermetic builds i rozwiązać problem "uzależnienia od piekła", ale nie jest to całkiem banalne. W tym roku był projekt GSoC, który dodał obsługę wielu instancji do ghc-pkg i Cabal, ale łatki nie znajdują się jeszcze w mainline. Here's a video of the HIW 2012 talk about the project's results i here's the description of the internal design.

Jeśli chodzi o inne pytania, w rzeczywistości używane było polecenie cabal upgrade do instalowania najnowszych wersji wszystkich aktualnie zainstalowanych pakietów, ale zostało ono usunięte, ponieważ mogło spowodować awarię instalacji (ponownie, mając obsługę wielu wystąpień tego samego typu) wersja pakietu naprawiłaby to). Obsługa deinstalacji od jakiegoś czasu znajduje się na liście życzeń, it's just that no-one had time to implement it yet. Przypuszczam, że to samo dotyczy pakietów podpisanych cyfrowo i HTTPS. Dodatkowo, jeśli jesteś zainteresowany wprowadzeniem niektórych z tych funkcji, poprawki do Cabal są zawsze mile widziane, a przejście na numer GitHub stało się łatwiejsze niż kiedykolwiek, aby przekazać kod (wnoszenie wkładu pieniężnego jest również w porządku, jeśli możesz sobie pozwolić to - myślę, że Well-Typed z przyjemnością porozmawia z tobą o tym).

Aktualizacja (wrzesień 2016 r.): w celu aktualizacji aktualnego stanu rzeczy patrz ten post Edward Z. Yang: cabal new-build is a package manager.

+0

Staram się zrozumieć, jak zachować moją konfigurację Haskella (jako kogoś z modelem PIPa/Pythona, jak rzeczy powinny "działać"). Załóżmy na przykład, że Haskel Platform zmienia się (np. GHC jest zaktualizowany). Co muszę zrobić, aby zaktualizować moją konfigurację, która obejmuje (a) kilka dodatkowych pakietów, oraz (b) IHaskell, który jest (c) zainstalowany w Jupyter? Czy muszę usunąć platformę, zainstalować ją ponownie, ponownie zainstalować dodatkowe pakiety za pomocą Cabala, ponownie zainstalować program IHaskel i ponownie uruchomić 'ihaskell install'? – orome

Powiązane problemy