Programando em Clojure/Preparando o ambiente

Origem: Wikilivros, livros abertos por um mundo aberto.


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 Emacs[editar | editar código-fonte]

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 Emacs[editar | editar código-fonte]

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ão[editar | editar código-fonte]

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 Emacs[editar | editar código-fonte]

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.

Linux[editar | editar código-fonte]

Instalando o ELPA[editar | editar código-fonte]

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-mode[editar | editar código-fonte]

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 Clojure[editar | editar código-fonte]

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.

Windows[editar | editar código-fonte]

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ê.