CMU Common Lisp - CMU Common Lisp
Autor (es) original (es) | Universidad de Carnegie mellon |
---|---|
Desarrollador (es) | Varios |
Versión inicial | Principios de 1980 |
Lanzamiento estable | 21d / 8 de diciembre de 2018
|
Repositorio | |
Sistema operativo | Varios sistemas operativos compatibles con POSIX |
Plataforma | Multiplataforma |
Disponible en | Lisp común |
Escribe | Compilador y tiempo de ejecución |
Licencia | Dominio publico |
Sitio web | www |
CMUCL es una implementación gratuita de Common Lisp , desarrollada originalmente en la Universidad Carnegie Mellon .
CMUCL se ejecuta en la mayoría de las plataformas similares a Unix , incluidas Linux y BSD ; también hay un puerto experimental de Windows . Steel Bank Common Lisp se deriva de CMUCL. El Scieneer Common Lisp es un derivado comercial de CMUCL.
Historia
La primera implementación es anterior a Common Lisp y fue parte de Spice Lisp , alrededor de 1980. En 1985 Rob MacLachlan comenzó a reescribir el compilador en lo que se convertiría en el compilador de Python y CMUCL fue portado a estaciones de trabajo Unix como IBM PC RT, MIPS y SPARC. . Las primeras versiones de CMUCL no admitían la arquitectura x86 de Intel debido a la falta de registros. CMUCL separó estrictamente los tipos de datos inmediatos y etiquetados de tipo y el recolector de basura confiaría en saber que la mitad de los registros de la CPU solo pueden contener tipos etiquetados y la otra mitad solo tipos no etiquetados. Esto no dejó suficientes registros para un backend de Python.
Después de que CMU canceló el proyecto (a favor de una implementación de Dylan utilizando parte de la base del compilador de CMUCL), un grupo de voluntarios se hizo cargo del mantenimiento. Para 1996, este grupo estaba haciendo lanzamientos regulares en su propia infraestructura.
Casi al mismo tiempo se completó un puerto a la arquitectura x86 de Intel, primero ejecutándose en FreeBSD , luego en Linux . El problema de la falta de registros fue resuelto por un nuevo recolector de basura conservador. Este nuevo recolector de basura acepta cualquier valor de cualquier tipo en los registros y trata cualquier cosa que pueda ser un puntero como un puntero con el propósito de no recolectar o mover su objetivo.
Compilador y otras unidades de ejecución de código
- CMUCL cuenta con un intérprete que se usa principalmente para REPL , pero se puede usar para cargar más rápidamente archivos Lisp que no necesitan compilación.
- Una máquina para interpretar el código de bytes compacto (que puede emitirse desde el compilador). Esto rara vez se usa ahora, pero fue popular en las primeras versiones de CMUCL porque los tamaños de las imágenes se redujeron drásticamente en un momento en el que el ancho de banda de descarga en Internet era bajo.
- Un compilador de código nativo llamado "Python" (que no debe confundirse con el lenguaje de programación Python ). Si el código fuente de Common Lisp se ha escrito con las declaraciones adecuadas y está organizado teniendo en cuenta la velocidad, el compilador de Python genera código que está casi libre de gastos generales en comparación con el código compilado a partir de lenguajes como C ++. Algunas ineficiencias, como las interfaces de llamada de función y la falta de matrices sin punteros de tipos de datos definidos por el usuario, están dictadas por el estándar Common Lisp y aún deben solucionarse (por ejemplo, insertando más y usando macros para construir construcciones que parezcan estructuras definidas pero en realidad están accediendo a campos en matrices especializadas preasignadas). El compilador de Python también presenta poderosas inferencias de tipos , lo que ayuda al programador a escribir código sin gastos generales al inferir tipos automáticamente o al emitir sugerencias sobre oportunidades de optimización perdidas.
Características
- Recolección de basura generacional y capacidad de multiprocesamiento en los puertos x86.
- Una interfaz de función externa que permite interactuar con el código C y las bibliotecas del sistema, incluidas las bibliotecas compartidas en la mayoría de las plataformas, y el acceso directo a las llamadas al sistema Unix .
- Soporte para comunicación entre procesos y llamadas a procedimientos remotos .
- Una implementación de CLOS , el Common Lisp Object System, que incluye múltiples métodos y un protocolo de metaobjetos.
- Un depurador gráfico de nivel de fuente que utiliza una interfaz Motif y un generador de perfiles de código .
- Una interfaz para el sistema de ventanas X11 ( CLX ) y una sofisticada biblioteca de widgets gráficos (Garnet).
- Flujos de entrada y salida extensibles por programador.
- Hemlock , un editor similar a Emacs implementado en Common Lisp.