Jakiej implementacji Common Lisp użyć? [Zamknięte]


45

Wydaje się, że istnieje natychmiastowy problem z rozpoczęciem opracowywania w Common Lisp: wybór implementacji. Co należy wziąć pod uwagę i jak dużą wagę należy wziąć pod uwagę przy wdrażaniu CL?

Czy powinien być zgodny ze standardem ANSI? Czy powinien być obsługiwany przez SLIME? Czy w niektórych implementacjach brakuje dobrych bibliotek, dokumentacji itp.?


Interesujące pytanie: czytam teraz „Practical Common Lisp” i wypróbowuję swoje przykłady w CLISP, ale chyba każda implementacja jest zgodna ze standardem: Common Lisp wydaje mi się bardzo dojrzały i stabilny język.
Giorgio

Odpowiedzi:


25

To zależy od twoich konkretnych potrzeb oraz mocnych i słabych stron poszczególnych wdrożeń. To powiedziawszy, oto pierwsze, co przychodzi mi do głowy, gdy myślę o różnych implementacjach:

SBCL jest dość szybki i dobrze radzi sobie z numerowaniem. Zatem jeśli zależysz od intensywnych obliczeń numerycznych, może to być odpowiednia implementacja dla Ciebie. Ma też przyzwoite wnioskowanie o typie (dla implementacji Lisp).

CLISP to stosunkowo niewielka implementacja kompilująca bajty, która może być interesująca dla skryptów.

Kilka lat temu wypróbowałem CCL i trzymałem się go, ponieważ wolałem komunikaty o błędach i ślady stosu od innych implementacji, a także stosunkowo krótki czas kompilacji. Dla mnie łatwość interaktywnego użytkowania jest czymś o bardzo wysokim priorytecie. Jeśli potrzebna jest jego szybkość, nadal mogę przejść na SBCL dla wdrożonego programu. (Nigdy nie było to konieczne). Istnieje również opcja komercyjnego wsparcia.

Jeśli chcesz wdrożyć na JVM, jest ABCL.

Do wbudowania, ECL.

Allegro ma AllegroGraph, AllegroStore, prosty w obsłudze wizualny konstruktor GUI i wiele więcej, ale nie wszystkim podobają się warunki licencji.

LispWorks wydaje się całkiem dobrze nadawać do programowania aplikacji dla użytkowników końcowych dzięki ładnemu wieloplatformowemu zestawowi narzędzi GUI i warunkom licencyjnym, które mogą pasować do małych zespołów i pojedynczych programistów lepiej niż Allegro. (Przynajmniej tak wolałbym.)

Oczywiście są to tylko ogólne kategorie i wrażenia. Proponuję przyjrzeć się bliżej SBCL, CCL i CLISP, ponieważ są to najczęściej używane i najlepiej obsługiwane implementacje open source IMHO, a następnie wybranie jednej z nich. To znaczy, chyba że twoje potrzeby odpowiadają temu, co ABCL lub ECL mają do zaoferowania.

Czy powinien być zgodny ze standardem ASNI?

Gdyby nie to, nie byłaby to implementacja CL. (Oczywiście może być kilka odchyleń w praktyce, ale zgodność powinna przynajmniej być celem.)

Czy powinien być obsługiwany przez SLIME?

Jasne - jeśli używasz SLIME. (Moim zdaniem jest to najlepsze dostępne obecnie środowisko Lisp, ale dla każdego z nich.)

Czy w niektórych implementacjach brakuje dobrych bibliotek, dokumentacji itp.?

Przynajmniej SBCL, CCL, Allegro i LispWorks powinny być dobrze obsługiwane przez większość powszechnie używanych bibliotek. CLISP jest wyposażony w całkiem niezłą kolekcję bibliotek i powinien być w większości obsługiwany.


22

Dan Weinreb (niestety zmarł w zeszłym roku) napisał przegląd:

Ankieta Lisp

Istnieje wiele różnic między implementacjami CL. Nie jest możliwe pokrycie wszystkich różnych potrzeb (szybkość, rozmiar, licencja, cena, kompatybilność, obsługa systemu operacyjnego, ...) użytkowników systemu Lisp w jednym wdrożeniu. Należy znaleźć lokalne optimum, używając jednej lub więcej dostępnych implementacji, które są zgodne z pewną filozofią:

  • darmowy, bezpłatny, oparty na C (tak szeroko rozpowszechniony): ECL , CLISP

  • bezpłatny, bezpłatny, oparty na JVM: ABCL

  • darmowa, bezpłatna, rozbudowana natywna implementacja: SBCL , CCL , CMUCL

  • zastrzeżona, komercyjna, bardzo rozbudowana natywna implementacja, doskonałe wsparcie dla aplikacji opartych na GUI: Allegro CL , LispWorks

według systemu operacyjnego / platformy:

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.