CMU Common Lisp - CMU Common Lisp

CMUCL
Autor (es) original (is) Universidade Carnegie Mellon
Desenvolvedor (s) Vários
lançamento inicial Início de 1980 ; 41 anos atrás  ( 1980 )
Versão estável
21d / 8 de dezembro de 2018 ; 2 anos atrás  ( 08/12/2018 )
Repositório Edite isso no Wikidata
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 .cons .org / cmucl /

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

Veja também

Referências

links externos