Programando em Clojure/Preparando o ambiente


Para começarmos a programar em Clojure, precisamos configurar primeiramente um ambiente de programação. Existem dezenas de formas diferentes para se instalar o Clojure, e dezenas de metodologias diferentes para se construir um ambiente de programação agradável. Neste livro, usaremos Emacs como um ambiente completo e integrado para o nosso trabalho.

Se você não tem experiência com Emacs, não se preocupe: serão dadas instruções tão exatas quanto for viável. Emacs exige um certo tempo para se acostumar, mas é, na opinião dos autores deste livro, o melhor ambiente de programação para Clojure: Através do Emacs é possível escrever, compilar e testar o código em alguns poucos comandos do teclado, sem ser necessário sequer usar o mouse.

Introdução ao EmacsEditar

Emacs é um editor de texto clássico, desenvolvido em sua versão original desde a década de 70, notável por sua extensibilidade e riqueza de funcionalidades. Como trade-off pelo seu grande poder, Emacs exige mais tempo e dedicação para se aprender do que, digamos, vim, mas acreditamos que a produtividade que se atinge ao longo do tempo vale o esforço.

Instalando o EmacsEditar

Se você usa Linux, há grandes chances de o Emacs já estar instalado. Tente rodar, no modo gráfico:

$ emacs

Se a saída do comando acima for algo como:

bash: emacs: command not found

Então há grandes chances do Emacs não estar instalado na sua máquina. Neste caso, se você tiver poderes de root, execute o comando de instalação de pacotes relativo à sua distribuição:

Debian, Ubuntu e derivados:

# aptitude install emacs

Slackware:

# slackpkg install emacs

Arch Linux:

# pacman -Sy emacs

Fedora:

# yum install emacs

A instalação deve estar completa quando o comando terminar de executar.

Uma primeira visãoEditar

Abra o emacs com o comando $ emacs. Você deverá ver uma tela parecida com a seguinte:

 

À pequena área de texto localizada na região inferior do programa damos o nome de Área de eco. Ela é usada para mostrar pequenas amostras de texto para inúmeros propósitos. Geralmente, é por ela que o Emacs nos faz perguntas que requerem uma resposta do usuário (por exemplo, se desejamos mesmo salvar um arquivo).

A área maior, que contém as mensagens de boas-vindas, é chamada de buffer. A edição de texto no Emacs acontece sempre dentro de buffers. No screenshot acima, o buffer se chama *GNU Emacs*, como visto na área de status do buffer. *GNU Emacs* é um buffer que abre automaticamente quando você inicia o Emacs (mas obviamente este comportamento é personalizável).

À cada buffer estão associados algumas informações individuais: qual arquivo que ele está editando; se este arquivo foi modificado ou não; e que modo maior e modos menores estão atuando sobre o arquivo. Um modo maior customiza o Emacs para a edição de um tipo particular de arquivo. No nosso caso, o modo maior que usaremos é o clojure-mode, que está associado à arquivos com extensão .clj (extensão usada para códigos-fonte em Clojure). Um modo menor é um conjunto de pequenas customizações, e é independente de outros modos menores ou maiores. Por exemplo, highlight-parentheses-mode é um modo menor que casa os parênteses de um código Lisp, colorindo-os com uma determinada cor.

É possível ter inúmeros buffers rodando sob o Emacs. Experimente abrir um arquivo digitando o seguinte comando:

C-x C-f (ou seja, segure a tecla Ctrl, aperte 'x', continue segurando a tecla Ctrl, aperte 'f')

O Emacs irá lhe perguntar qual arquivo visitar. Digite ~/teste.txt e aperte enter. Note que um novo buffer será aberto para a edição do arquivo que você acabou de abrir. Os outros buffers ainda estarão abertos, porém ocultos. Experimente navegar entre os buffers com C-x C-<- ou C-x C-->, onde <- e -> são as teclas direcionais do teclado.

No buffer teste.txt, digite qualquer texto, e tente salvar o arquivo com C-x C-s. O Emacs lhe perguntará se você deseja mesmo salvar o arquivo. Diga que sim (digite y).

O Emacs suporta a visualização de vários buffers ao mesmo tempo: Digite C-x 2 para dividir a janela atual em dois. Navegue entre as janelas com C-x o ('o' vem da palavra other). Para remover uma divisão, o comando é C-x 0.

Além de comandos que começam com a tecla C (Control), são comuns também os comandos que começam com a tecla Meta (em vários computadores, essa tecla seria equivalente à tecla Alt). Quando isso ocorre, o comando é descrito como, por exemplo M-x, significando: Segure a tecla Meta (Alt), e aperte 'x'.

Isso é o suficiente para fazer um uso básico do emacs. Uma lista mais completa de comandos úteis pode ser encontrada em: http://lpn.rnbhq.org/tools/xemacs/emacs_ref.html (em inglês).

Preparando o EmacsEditar

Agora que estamos um pouco familiarizados com o Emacs, vamos criar nele um ambiente de programação para Clojure. Para isso, instalaremos um gerenciador de pacotes para o Emacs, um modo superior para edição de códigos em Clojure, e o próprio Clojure, com algumas bibliotecas.

LinuxEditar

Instalando o ELPAEditar

O ELPA (Emacs Lisp Package Manager) é, como o nome já diz, um gerenciador de pacotes para o Emacs. Para instalá-lo, copie o seguinte código no buffer *scratch* do Emacs:

(let ((buffer (url-retrieve-synchronously "http://tromey.com/elpa/package-install.el")))
(save-excursion
  (set-buffer buffer)
  (goto-char (point-min))
  (re-search-forward "^$" nil 'move)
  (eval-region (point) (point-max))
  (kill-buffer (current-buffer))))

Em seguida, execute o código com o comando C-j (Control + j). Se tudo der certo, as seguintes mensagens serão impressas no buffer *Messages*:

Loading /home/steiger/.emacs.d/elpa/package.el (source)...done
Saving file /home/steiger/.emacs...
Wrote /home/steiger/.emacs

Instalando Clojure-modeEditar

Clojure-mode é uma extensão do Emacs que funciona como um modo superior. (Falar mais sobre modo superior em Introdução ao Emacs)

Agora que já instalamos o ELPA, podemos obter o pacote Clojure-mode:

M-x package-list-packages

Ao executar o comando acima, lhe será exibido um novo buffer, chamado *Packages*. Procure nele pelo pacote clojure-mode, selecione com a tecla "i" e instale com a tecla "X".

Instalando ClojureEditar

Agora que temos o clojure-mode, utilizaremos ele para instalar o Clojure em si, as bibliotecas extras clojure-contrib, os programas de interação SLIME e swank-clojure:

M-x clojure-install

O Emacs lhe perguntará onde instalar o Clojure. Escolha o diretório que desejar, ou aperte <Enter> para instalar no diretório sugerido pelo clojure-install. A instalação pode ser um pouco demorada, então aproveite para tomar um café, ou fumar um cigarro, ou qualquer outra coisa que você goste de fazer :-)

Quando a instalação for concluída, teste abrir o REPL, um modo interativo de Clojure que nos permite digitar códigos interativamente. Digite, no Emacs: M-x slime. Depois, visite um arquivo qualquer com extensão .clj para testar o Clojure-mode: Digite C-x C-f, e quando lhe for requisitado o arquivo, digite algo como teste.clj. Se a barra de status do buffer mostrar Clojure como modo maior, tudo funcionou corretamente.

WindowsEditar

Apesar de ser possível realizar os passos acima em um ambiente Windows, pode haver dificuldades (é necessário, por exemplo, instalar o Git para Windows, que já vem por padrão em várias distribuições Linux). Sendo assim, recomendamos a instalação do Clojure Box, um pacote extra-oficial que funciona como um instalador All-in-One: ele lhe provê Emacs, algumas extensões para Emacs que são usadas com Clojure, o próprio Clojure e Clojure-contrib.

O Clojure Box pode ser obtido em: http://clojure.bighugh.com/

Lembre-se que é necessário ter privilégios de administrador para instalar o Clojure-box. Se você não é o administrador e não possui tais privilégios, peça para que o administrador do sistema instale para você.