Quale implementazione di Common Lisp usare? [chiuso]


45

Sembra esserci un problema immediato con l'inizio dello sviluppo in Common Lisp: la scelta di un'implementazione. Cosa bisogna tenere in considerazione e quanto peso dovrebbe avere quando si considera un'implementazione del CL?

Dovrebbe essere conforme allo standard ANSI? Dovrebbe essere supportato da SLIME? Alcune implementazioni mancano di buone librerie, documentazione, ecc.?


Domanda interessante: sto leggendo "Practical Common Lisp" in questo momento e provo i miei esempi in CLISP, ma suppongo che qualsiasi implementazione sia conforme allo standard: Common Lisp mi sembra un linguaggio molto maturo e stabile.
Giorgio,

Risposte:


25

Dipende dalle tue esigenze specifiche e dai punti di forza e di debolezza delle implementazioni particolari. Detto questo, ecco cosa mi viene in mente per la prima volta quando penso a diverse implementazioni:

SBCL è piuttosto veloce e bravo a fare il crunching. Quindi, se dipendi da un pesante calcolo numerico, questa potrebbe essere l'implementazione giusta per te. Inoltre, ha un'inferenza di tipo decente (per un'implementazione Lisp).

CLISP è un'implementazione relativamente piccola di compilazione di byte che potrebbe essere interessante per gli script.

Alcuni anni fa, ho provato CCL e mi sono bloccato, perché ho preferito i suoi messaggi di errore e le tracce dello stack a quelle di altre implementazioni, nonché i suoi tempi di compilazione relativamente bassi. Per me, la facilità d'uso interattivo è una priorità molto alta. Se è necessaria la sua velocità, potrei ancora passare a SBCL per il programma distribuito. (Non è mai stato necessario, però.) Inoltre, esiste la possibilità di supporto commerciale.

Se vuoi distribuire su JVM, c'è ABCL.

Per uso incorporato, ECL.

Allegro ha AllegroGraph, AllegroStore, un costruttore di GUI visive semplice da usare e molto altro, ma non a tutti piacciono i termini di licenza.

LispWorks sembra prestarsi piuttosto bene alla programmazione di applicazioni per l'utente finale con un bel toolkit GUI multipiattaforma e termini di licenza che potrebbero adattarsi a piccoli team e programmatori singoli meglio di Allegro. (Almeno è quello che preferirei.)

Naturalmente, queste sono solo categorie e impressioni generali. Suggerirei di dare un'occhiata più da vicino a SBCL, CCL e CLISP, dal momento che quelli sono IMHO le implementazioni open source più utilizzate e meglio supportate, quindi scegliere una di quelle. Cioè, a meno che le tue esigenze non corrispondano a ciò che ABCL o ECL hanno da offrire.

Dovrebbe essere conforme allo standard ASNI?

Non sarebbe un'implementazione CL, in caso contrario. (Naturalmente, potrebbero esserci alcune deviazioni nella pratica, ma la conformità dovrebbe almeno essere l'obiettivo.)

Dovrebbe essere supportato da SLIME?

Sicuro - se usi SLIME. (Secondo me, è il miglior ambiente Lisp disponibile al momento, ma a ciascuno il suo.)

Alcune implementazioni mancano di buone librerie, documentazione, ecc.?

Almeno SBCL, CCL, Allegro e LispWorks dovrebbero essere ben supportati dalla maggior parte delle librerie comunemente utilizzate. CLISP viene fornito con una raccolta di librerie piuttosto carina e dovrebbe essere supportato principalmente.


22

Dan Weinreb (sfortunatamente è morto l'anno scorso) ha scritto una panoramica:

Lisp Survey

Esistono molte differenze tra le implementazioni CL. Non è possibile coprire tutte le diverse esigenze (velocità, dimensioni, licenza, prezzo, compatibilità, supporto del sistema operativo, ...) degli utenti per un sistema Lisp in un'unica implementazione. Bisogna trovare un ottimo locale usando una o più delle implementazioni disponibili, che seguono una certa filosofia:

  • gratuito, gratuito, basato su C (quindi ampiamente trasferito): ECL , CLISP

  • gratuito, gratuito, basato su JVM: ABCL

  • implementazione nativa estesa, gratuita, gratuita: SBCL , CCL , CMUCL

  • implementazione nativa proprietaria, commerciale, molto estesa, supporto eccellente per le app basate su GUI: Allegro CL , LispWorks

per sistema operativo / piattaforma:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.