CMU Common Lisp - CMU Common Lisp

CMUCL
Autor (es) original (es) Universidad de Carnegie mellon
Desarrollador (es) Varios
Versión inicial Principios de 1980 ; Hace 41 años  ( 1980 )
Lanzamiento estable
21d / 8 de diciembre de 2018 ; Hace 2 años  ( 08/12/2018 )
Repositorio Edita esto en Wikidata
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 .cons .org / cmucl /

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

Ver también

Referencias

enlaces externos