common lisp - ¿Cuáles son las principales diferencias entre CLISP, ECL y SBCL?
lisp documentation (3)
En general, SBCL
es la opción predeterminada entre los Lisps de código abierto. Es sólido, está bien soportado, produce código rápido y proporciona muchos beneficios más allá de los mandatos estándar (primitivas de concurrencia, creación de perfiles, etc.) Otra implementación con propiedades similares es CCL
.
CLISP
es más adecuado si usted no es un ingeniero, o si quiere mostrar rápidamente Lisp a alguien que no sea ingeniero. Es una implementación bastante básica, pero de ejecución rápida y fácil de usar. Una calculadora Lisp :)
El principal punto de venta de ECL
es que es integrable, es decir, es bastante fácil hacer que funcione dentro de alguna aplicación C, como un servidor web, etc. Es una buena opción para los geeks, que desean explorar soluciones en el límite de Lisp y el mundo exterior. Si no está interesado en tal caso de uso, no le recomendaría que lo intente, especialmente porque no está respaldado de forma activa, en este momento.
Quiero hacer algunas simulaciones con ACT-R
y necesitaré una implementación de Common Lisp
. Tengo tres implementaciones de Common Lisp
disponibles: (1) CLISP
[1] , (2) ECL
[1] y (3) SBCL
[1] . Tal como se ha reunido en los enlaces, he leído un poco sobre los tres en Wikipedia. Pero me gustaría la opinión de algunos usuarios experimentados. Más específicamente me gustaría saber:
(i)
¿Cuáles son las principales diferencias entre las tres implementaciones (p. ej., en qué son mejores? ¿Se utiliza alguna de ellas solo para fines específicos y, por lo tanto, podría no ser adecuada para tareas específicas?)
(ii)
¿Existe una opción obvia basada en el hecho de que usaré ACT-R
o en razones generales?
Como esto podría interpretarse como una pregunta subjetiva, marqué ¿Qué temas puedo preguntar aquí y qué tipo de preguntas debo evitar? y si leo correctamente no debería calificar como fruta prohibida.
Escribí una aplicación de tamaño moderado y la ejecuté en SBCL, CCL, ECL, CLISP, ABCL y LispWorks. Para mi aplicación , SBCL es el más rápido, y tiene un depurador bastante bueno. Es un poco estricto con algunas advertencias: puede terminar codificando de una manera un poco más regulada, o desactivar una o más advertencias.
Estoy de acuerdo con Sylwester: si es posible, escriba al estándar y luego puede ejecutar su código en cualquier implementación. A través de las pruebas, descubrirás cuál es la mejor para tu proyecto.
Como SBCL compila de forma tan agresiva, de vez en cuando el seguimiento de pila en el depurador es menos informativo de lo que me gustaría. Probablemente esto se puede controlar con parámetros, pero simplemente ejecuté el mismo código en una de las otras implementaciones. ABCL tiene un stacktrace informativo, por ejemplo, como recuerdo. (También es muy lento, pero si desea una verdadera interoperabilidad de Common Lisp y Java, es la única opción).
Una de las cosas buenas de Common Lisp es la cantidad de implementaciones de alta calidad, la mayoría de ellas gratuitas.
Para uso informal, por ejemplo, para aprender Common Lisp, CCL o CLISP puede ser una mejor opción que SBCL.
Nunca he intentado compilar a C usando ECL. Es posible que supere a SBCL en velocidad para algunas aplicaciones. No tengo idea.
CLISP y LispWorks no manejarán listas de argumentos arbitrariamente largas (a menos que se hayan solucionado en los últimos años, pero lo dudo). Esto resultó ser un problema con mi aplicación, pero no sería un problema para la mayoría de los códigos.
¿No sale ACT-R de Carnegie Mellon? ¿Qué usan sus autores? Mi conjetura sería CMUCL o SBCL, que se deriva de CMUCL. (Solo probé CMUCL brevemente. Su intérprete es muy lento, pero asumo que el código compilado es muy rápido. Sin embargo, creo que la mayoría de las personas eligen SBCL sobre CMUCL).
(Es posible que esta pregunta pertenezca a Programmers.SE.)
Sus nombres, sus errores y sus adiciones no estándar (usarlos te bloquearán)
Uso CLISP como REPL y pruebas durante el desarrollo y generalmente SBCL para producción. ECL que nunca he usado.
Te recomiendo que pruebes tu código con más de una implementación.