CMU Common Lisp - CMU Common Lisp
Autor (es) original (is) | Universidade Carnegie Mellon |
---|---|
Desenvolvedor (s) | Vários |
lançamento inicial | Início de 1980 |
Versão estável | 21d / 8 de dezembro de 2018
|
Repositório | |
Sistema operacional | Vários SOs compatíveis com POSIX |
Plataforma | Plataforma cruzada |
Disponível em | Lisp Comum |
Modelo | Compilador e tempo de execução |
Licença | Domínio público |
Local na rede Internet | www |
CMUCL é uma implementação Common Lisp gratuita , desenvolvida originalmente na Carnegie Mellon University .
CMUCL roda na maioria das plataformas do tipo Unix , incluindo Linux e BSD ; há uma versão experimental do Windows também. Steel Bank Common Lisp é derivado de CMUCL. O Scieneer Common Lisp é um derivado comercial da CMUCL.
História
A implementação mais antiga é anterior ao Common Lisp e fazia parte do Spice Lisp , por volta de 1980. Em 1985, Rob MacLachlan começou a reescrever o compilador para o que se tornaria o compilador Python e CMUCL foi portado para estações de trabalho Unix, como IBM PC RT, MIPS e SPARC . Os primeiros lançamentos do CMUCL não suportavam a arquitetura x86 da Intel devido à falta de registros. O CMUCL separa estritamente os tipos de dados marcados por tipo e imediatos e o coletor de lixo confiaria em saber que metade dos registradores da CPU só poderia conter tipos marcados e a outra metade apenas tipos não marcados. Isso não deixou registros suficientes para um back-end Python.
Depois que o CMU cancelou o projeto (em favor de uma implementação de Dylan usando parte da base de compiladores do CMUCL), a manutenção foi assumida por um grupo de voluntários. Em 1996, esse grupo estava fazendo lançamentos regulares em sua própria infraestrutura.
Mais ou menos na mesma época, uma porta para a arquitetura x86 da Intel foi concluída, primeiro rodando no FreeBSD , depois no Linux . O problema da falta de registros foi resolvido por um novo coletor de lixo conservador. Este novo coletor de lixo aceita qualquer valor de qualquer tipo nos registradores e trata qualquer coisa que possa ser um ponteiro como um ponteiro com o propósito de não coletar ou mover seu alvo.
Compilador e outras unidades de execução de código
- CMUCL possui um interpretador que é usado principalmente para o REPL , mas pode ser usado para carregamento mais rápido de arquivos Lisp que não precisam de compilação.
- Uma máquina para interpretar bytecode compacto (que pode ser emitido a partir do compilador). Isso raramente é usado agora, mas era popular nos primeiros lançamentos do CMUCL porque os tamanhos das imagens foram drasticamente reduzidos em um momento em que a largura de banda de download na Internet era baixa.
- Um compilador de código nativo chamado "Python" (não deve ser confundido com a linguagem de programação Python ). Se o código-fonte do Common Lisp tiver sido escrito com as declarações apropriadas e organizado com a velocidade em mente, o compilador Python gera código que é quase livre de sobrecarga em comparação com o código compilado de linguagens como C ++. Algumas ineficiências, como interfaces de chamada de função e falta de arrays sem ponteiros de tipos de dados definidos pelo usuário, são ditadas pelo padrão Common Lisp e ainda precisam ser contornadas (por exemplo, inlining mais e usando macros para construir construções que se parecem com o usuário- estruturas definidas, mas na verdade estão acessando campos em matrizes especializadas pré-alocadas). O compilador Python também oferece inferências de tipo poderosas , ajudando o programador a escrever código sem sobrecarga, inferindo tipos automaticamente ou dando dicas sobre oportunidades de otimização perdidas.
Características
- Recolha de lixo geracional e capacidade de multiprocessamento nas portas x86.
- Uma interface de função externa que permite a interface com o código C e as bibliotecas do sistema, incluindo bibliotecas compartilhadas na maioria das plataformas e acesso direto às chamadas do sistema Unix .
- Suporte para comunicação entre processos e chamadas de procedimento remoto .
- Uma implementação do CLOS , o Common Lisp Object System, que inclui multimétodos e um protocolo de metaobjeto.
- Um depurador gráfico de nível de origem usando uma interface Motif e um criador de perfil de código .
- Uma interface para o X11 Window System ( CLX ) e uma sofisticada biblioteca de widgets gráficos (Garnet).
- Fluxos de entrada e saída extensíveis pelo programador.
- Hemlock , um editor semelhante ao Emacs implementado em Common Lisp.