Muitas vezes, você precisa ver como os iniciantes tentam o Common Lisp e depois reclamar que é impossível trabalhar normalmente com ele. Como regra, isso se deve ao fato de eles não entenderem como configurar um processo que fornece a mesma "resposta rápida" do ambiente de desenvolvimento, quando você alterou a função, a compilou e as alterações começaram a ser usadas imediatamente dentro do programa já em execução sem reiniciando-o.
Você pode entender como fica assistindo um vídeo no youtube que demonstra o desenvolvimento interativo no Common Lisp.
Hoje eu quero mostrar como configurar um ambiente de desenvolvimento para esse desenvolvimento. Em 2018, tornou-se muito simples, graças à melhoria constante do ajuste.
Peço desculpas antecipadamente pelos seguintes vídeos sendo gravados no Asciinema, e o Habrahabr não o suporta. Clique nas capturas de tela do console para assistir a vídeos.
Primeiro, instale o SBCL , Roswell e Emacs . Falarei sobre o exemplo de instalação de tudo no OSX e ficarei feliz se nos comentários você compartilhar sua experiência no Windows e Linux. Então eu posso complementar o artigo com exemplos para as três plataformas.
SBCL é uma das muitas implementações do Common Lisp. Do código aberto, o mais rápido. Se desejado, no SBCL, você pode executar o código a uma velocidade comparável ao código C ++, mas ao mesmo tempo tendo todas as vantagens do rápido desenvolvimento interativo.
Roswell é um utilitário para instalar e executar programas Common Lisp. Inclusive ela sabe como executar o Emacs pré-configurado, bem como coletar programas em binários.
Você provavelmente conhece o Emacs - um sistema operacional que também possui um editor de código. Você pode escrever no Common Lisp e em qualquer outro editor, mas hoje o Emacs tem a melhor integração e suporte para a edição semântica do código. Com ele você não precisa contar parênteses, ele faz tudo por você.
Então, se você usa o OSX, precisa fazer
brew install roswell emacs
Depois que a mistura mexer no disco e colocar tudo o que você precisa, basta executar no terminal:
ros run
Este comando fornecerá automaticamente a versão mais recente do SBCL e iniciará o Lisp repl, onde você poderá inserir o código:

Mas esse não é o caso, não é tão projetado. Então, vamos configurar o Emacs para desenvolvimento completo:
ros emacs
A equipe iniciará o Emacs no console e configurará o Quicklisp, o gerenciador de pacotes do Common Lisp.
Mas antes de continuarmos, vamos configurar o terminal, emacs e OSX para que funcionem bem juntos.
Primeiro, você precisa alterar algumas configurações no OSX e no iTerm
Faça o CapsLock funcionar como Control. No Emacs, em nenhum lugar sem ele:

Em seguida, desative todas as combinações associadas ao uso do controle e das setas nas imagens do MissionControl:

Em seguida, coloque o iTerm2 e alterne o comportamento Alt nas configurações de perfil de Normal para Esc +:

Depois disso, crie um arquivo com uma configuração mínima para o Emacs, ~/.emacs.d/init.el
:
(package-initialize) (require 'package) (add-to-list 'package-archives '("MELPA" . "http://melpa.milkbox.net/packages/") t) (defun install-package (package) (unless (package-installed-p package) (package-refresh-contents) (package-install package))) (install-package 'paredit) (install-package 'expand-region) (defun setup-lisp-mode () (require 'paredit) (paredit-mode) (define-key paredit-mode-map (kbd "Cw") 'paredit-backward-kill-word)) (add-hook 'lisp-mode-hook 'setup-lisp-mode) (add-hook 'emacs-lisp-mode-hook 'setup-lisp-mode)
Depois disso, execute o ros emacs novamente, pressione Alt-X
e insira o comando slime
. Como resultado, obtemos a linha de comando para inserir comandos lisp:

Agora você já pode codificar
Mas não digitaremos comandos na reprodução, é melhor iniciar o desenvolvimento de um microsserviço imediatamente. Se você precisa apenas de uma API, a maneira mais fácil é usar o Ningle . Se você precisar de uma estrutura mais avançada, como uma selva, poderá experimentar Radiance ou Caveman2 . Mas agora não faremos nada complicado, mas criaremos um simples cookie HTTP.
Abra o arquivo server.lisp
( Cx Cf server.lisp
) no Emacs e comece a escrever o código. Algo assim:

Como resultado, um servidor Web será iniciado dentro da sua instância, no qual você poderá adicionar rotas e redefinir visualizações em movimento.
Aqui está o código inteiro, para o preguiçoso:
No Lisp, as construções que estão entre colchetes são chamadas de "formas". Os formulários que estão no topo e não aninhados em nenhum outro são chamados de nível superior. Esses formulários podem ser compilados clicando em Cc Cc
quando o cursor estiver dentro desse formulário. Se você reativar o CapsLock
no ontrol
, essa combinação é muito conveniente para pressionar.
Após a compilação do formulário, uma nova versão da função entra em vigor imediatamente e a reinicialização do servidor não é necessária. Portanto, é muito conveniente depurar e corrigir erros. Além disso, você pode configurar o teste automático imediatamente após a compilação de parte do código, mas essa é uma história completamente diferente.
Se você estiver interessado em outros tópicos, escreva nos comentários, também tentarei fazer posts sobre eles.