Obtendo Lua
Neste tutorial vamos cumprir um requisito básico para que você possa programar em Lua, que é obter Lua.
Mas o que significa obter Lua?
Se Lua é uma linguagem, como ela poderia ser obtida? Linguagens podem ser aprendidas, não obtidas. Certo?
Certo, mas Lua não é apenas uma linguagem, é também uma biblioteca. E a função da biblioteca Lua é converter o seu programa em código de máquina, para então poder ser executado.
O que é uma biblioteca?
Essa biblioteca é responsável por interpretar trechos de código Lua
dinamicamente, e então executar esses trechos. Ela foi feita para ser pequena
e fácil de embutir em outros programas, o que inclui o interpretador de linha
de comando lua
, principal ferramenta que usaremos ao longo dos
tutoriais para executar código Lua.
Tanto a biblioteca Lua como o interpretador de linha de
comando (o programa lua
, propriamente) são distribuídos em
conjunto no que chamamos de distribuição padrão de Lua. Essa
distribuição é software livre, sob os termos da licença MIT.
A distribuição padrão
A especificação da linguagem e sua implementação são coordenados por um pequeno grupo na universidade PUC-Rio, que também hospeda todo o projeto, sob o domínio lua.org.
Lá, pacotes contendo o código-fonte da biblioteca e do interpretador, junto com toda a documentação são disponibilizados.
Há dois caminhos para obter Lua. Um deles é baixar essa distribuição padrão e compilar o código-fonte de Lua para produzir os arquivos executáveis e bibliotecas de que necessita.
Caso não saiba ou não queira fazer isso, outro caminho é baixar distribuições binárias (isto é, pacotes que já foram compilados e estão prontos para você utilizar), em geral, realizadas por terceiros.
Qual versão de Lua utilizar?
Se prestar atenção a diversos projetos que usam Lua, verá que é bastante comum o suporte a mais de uma versão de Lua, geralmente abrangendo as versões 5.1, 5.2, 5.3 e 5.4.
Para o aprendizado, o mais indicado é que você se familiarize com a versão mais recente (ou a versão mais recente disponível para seu sistema, se optar por obter um pré-compilado).
Ainda assim, se você trabalhar com qualquer uma dessas quatro versões citadas, conseguirá tirar proveito dos tutoriais (e demais materiais) do Lu-a-Bá. Os procedimentos que veremos a seguir serão praticamente os mesmos para qualquer uma delas.
Obtendo pré-compilados
Especialmente entre um público menos especializado ou que está iniciando seus estudos, falar em compilação pode soar como algo difícil ou desafiador. Não é tão difícil como parece, mas se isso for uma barreira para que inicie seus estudos em Lua, não há por que se preocupar. Existem várias maneiras de obter versões pré-compiladas de Lua.
O que é compilação?
Entenda que pré-compilado, ou binário, quer dizer que alguém já fez esse trabalho de obter o código-fonte de Lua e o converteu em um conjunto de instruções binárias (bits) que podem ser executados na sua máquina.
Além disso, uma distribuição binária não é a mesma para todo mundo. Existem variações quanto ao sistema onde pode executar e até mesmo o hardware suportado (embora na maioria dos casos, binários pré-compilados sejam feitos para computadores convencionais, com arquitetura i386 ou amd64).
Quando os pré-compilados são fornecidos por algum sistema de pacotes do próprio sistema operacional, isso raramente é um problema, pois já é fornecido na versão correta para seu sistema/hardware. Portanto, já adianto que este é o modo mais prático de obtenção, quando disponível.
Isto é comum em distribuições de Linux, nas quais existem gerenciadores
como apt
, dnf
, yum
, apk
,
pacman
, xbps
e vários outros. Nos sistemas BSD o
mesmo se aplica, cada qual possui seu gerenciador de pacotes. No macOS,
pode-se usar o homebrew.
No Windows, algumas opções são utilizar o Cygwin, o qual possui um
gerenciador de pacotes próprio (apt-cyg
), o MSYS2, que também possui um
gerenciador próprio (uma versão adaptada do pacman
para Windows) ou usar o WSL, que virtualiza uma distribuição Linux.
Em qualquer um desses casos, ainda há o bônus de ter acesso a um
terminal aderente ao padrão POSIX.
Seja qual for o seu sistema, você deverá se familiarizar com o modo como ele gerencia instalações, e se ele de algum modo proporciona uma instalação automatizada de versões pré-compiladas de Lua.
Se estiver usando um sistema sem nenhuma possibilidade de gerenciamento de pacotes, ou se ele não tiver acesso a um pacote de instalação de Lua em seus repositórios, então outra opção é obter pacotes pré-compilados no subprojeto LuaBinaries.
O que é um repositório?
O LuaBinaries contempla distribuições binárias de executáveis e
bibliotecas compartilhadas para GNU/Linux (usando a biblioteca C
glibc), Windows e macOS. Pacotes com o sufixo _bin
possuem os executáveis, já os pacotes com o sufixo _lib
possuem
cabeçalhos e a biblioteca compartilhada, que servem para desenvolver
aplicações com Lua embutido.
Ao descompactar o pacote dos executáveis, você já terá acesso aos
programas executáveis (lua
e luac
). Para poder
executá-los a partir de qualquer local, deverá incluir o diretório onde eles
foram descompactados na variável de ambiente PATH
do
sistema.
O que são variáveis de ambiente?
O processo de instalação utilizando o LuaBinaries pode ser simples, mas você não terá uma atualização automática desses pacotes. Ou seja, quando novas versões forem disponibilizadas, você deverá repetir esse procedimento manualmente se quiser atualizar seu ambiente de desenvolvimento.
Vantagens de obter pré-compilados:
- Tende a ser mais fácil, especialmente para iniciantes;
- Em caso de obter via pacotes do sistema operacional, contará com atualizações automáticas e utilizará caminhos padrão do sistema.
Desvantagens de obter pré-compilados:
- Menor controle sobre os arquivos obtidos (afinal, foram gerados por terceiros), o que faz diferença quando precisa aplicar personalizações próprias ou quando há critérios mais rígidos de segurança;
- Você talvez não encontre pré-compilados para o seu sistema operacional, para seu processador ou para a versão de Lua que deseja usar. Isto é pouco comum, mas pode ocorrer para alguns processadores ou sistemas operacionais menos convencionais.
Certo, e se eu quiser compilar?
Compilar Lua é o “método canônico” para sua obtenção. Ou seja, você pode obter a distribuição padrão direto da fonte, extrair o código-fonte e compilar para gerar os executáveis e bibliotecas de que necessita para usar Lua.
Atenção: não saber o que é um processo de compilação poderá tornar o procedimento um pouco mais difícil ou confuso. Se você já obteve Lua pelo seu sistema operacional ou por empacotamentos binários de terceiros como LuaBinaries, não precisa realizar essa etapa.
Feito esse alerta, você verá que, como eu disse, o procedimento é bem simples. Alguns motivos:
- O projeto é relativamente pequeno, e não requer um grande poder computacional para compilar, geralmente levando pouco tempo;
- É inteiramente escrito em C89, isto é, pode ser compilado para qualquer plataforma para a qual existe um compilador aderente a este padrão (o que significa que são muitas, muitas mesmo);
- Sua única dependência é a própria biblioteca C.
Basicamente, você precisará obter o pacote na versão desejada, dispor de
um compilador C e do programa make
. Instruções estão disponíveis
no arquivo README.html.
Os pacotes são fornecidos no formato .tar.gz
, bastante comuns
em sistemas POSIX. Essencialmente são pacotes tar compactados com o
algoritmo gzip. Mesmo em sistemas não POSIX é possível
encontrar/instalar utilitários para manipulação desses formatos.
Tipicamente em distribuições Linux, sistemas BSD e no macOS você já terá utilitários capazes de manipular esses formatos. No Windows, pode-se obter um ambiente POSIX (o que inclui esses utilitários) usando o Cygwin, o MSYS2 ou o WSL.
Conforme orientado na página oficial de downloads, na seção building (para a versão 5.4.7, em um sistema do tipo POSIX), pode-se obter e compilar Lua por meio dos seguintes passos:
curl -R -O http://www.lua.org/ftp/lua-5.4.7.tar.gz
tar zxf lua-5.4.7.tar.gz
cd lua-5.4.7
make all test
Na primeira linha, baixamos o pacote .tar.gz
referente à
versão 5.4.7 de Lua. Para isso utilizamos o programa
curl
(se não o tiver instalado, poderá usar algum outro cliente
HTTP equivalente). Em seguida, na segunda linha desempacotamos e
descompactamos o arquivo, para extrair o código-fonte.
Na terceira linha nos dirigimos ao diretório recém-criado,
lua-5.4.7
, dentro do qual o código foi extraído. Por fim, na
quarta linha, executamos o script make
, que compila Lua e testa
os resultados para atestar que foi bem sucedido.
Até aqui o que fizemos foi gerar os arquivos necessários. Ainda falta o passo de instalação, que basicamente é copiar esses arquivos para diretórios de sistema (ou qualquer local da sua preferência). Isto será feito com o comando:
make install INSTALL_TOP=meu_diretorio
A opção INSTALL_TOP
é opcional. Caso seja suprimida, os
diretórios padrão do sistema serão usados como destino. Esses diretórios são
definidos no próprio arquivo Makefile
. Caso seja informada,
deverá ter como valor o diretório base da instalação, ou seja, um diretório
personalizado.
Caso tenha optado por usar diretório personalizado, nele serão criados os
subdiretórios bin
(para os executáveis), include
(para arquivos de cabeçalho), lib
(para a biblioteca Lua, e para
módulos C que venha a instalar depois), man
(para as páginas de
manual) e share
(para módulos Lua que venha a instalar
depois).
Além disso, você provavelmente vai querer se certificar de que a variável
de ambiente PATH
inclua o subdiretório bin
do local
escolhido, para que possa executar os comandos lua
e
luac
a partir de qualquer local.
Em sistemas que suportam páginas de manual no formato de
manpages, você também deverá atualizar a variável
MANPATH
para incluir o subdiretório man
. Isto
permitirá que consulte as páginas de manual referentes aos programas
lua
e luac
.
Quando você desejar obter novas versões de Lua, isto é, atualizar a sua instalação, esse procedimento manual deverá ser executado novamente, a não ser que seu sistema disponha de uma infraestrutura mais avançada de compilação, que permita automatizar esse processo.
Por exemplo, em sistemas BSD é bastante comum o conceito de
ports
, no qual existem “receitas” prontas para
instalação de um pacote, porém compilado na máquina local, em geral
permitindo que algumas opções de compilação (como o local de destino,
INSTALL_TOP
, mencionado aqui) sejam definidas.
Algumas distribuições de Linux (notadamente o Gentoo, por exemplo) também exploram esse conceito, que equilibra o gerenciamento de pacotes no sistema com a flexibilidade da compilação local.
Vantagens de compilar o código-fonte:
- Maior possibilidade de personalização dos arquivos gerados;
- Maior segurança, pois pode-se inspecionar o código-fonte antes de gerar os arquivos binários;
- Como alguns sistemas não suportam ligação dinâmica, compilar e ligar estaticamente os binários com módulos próprios é uma opção;
- Pode-se escolher precisamente a versão de Lua que se deseja utilizar.
Desvantagens de compilar o código-fonte:
- Para alguns usuários iniciantes pode exigir um pouco mais de estudo ou parecer confuso;
- Se não houver uma infraestrutura avançada de compilação, o procedimento manual precisará ser repetido para novas versões.
Usando Lua
Uma vez que você tenha instalado Lua no seu sistema, poderá testar os
resultados acionando o interpretador de linha de comando (apenas o comando
lua
, sem argumentos). Ao executá-lo, deverá ver um cabeçalho
como a seguir:
$ lua
Lua 5.4.7 Copyright (C) 1994-2024 Lua.org, PUC-Rio
>
Obs.: Neste exemplo estou assumindo que seu terminal
utilize o sinal $
como prompt de comandos. Em todo
caso, você pode ignorá-lo.
O que é um prompt de comando?
Ao executar o interpretador lua
você verá uma linha com a
versão e a nota de direitos autorais da PUC-Rio, e em seguida o prompt de
comando de Lua (note o sinal >
logo em seguida). Isto
quer dizer que o interpretador está pronto para receber novos comandos.
Vamos testar um primeiro comando. Experimente digitar, após o
prompt o comando os.exit()
, seguido da tecla
Enter
. Isto encerrará o interpretador Lua.
> os.exit()
$
Perceba que ao executar esse comando, o interpretador é encerrado, e
você volta para o prompt do sistema ($
, nesse caso).
Muito bem! Isso significa que agora você obteve Lua com sucesso e já pode começar a programar.
Resumo
Neste tutorial você aprendeu que Lua não apenas é uma linguagem, mas
também uma biblioteca, e que essa biblioteca está embutida nos programas
que fazem parte da distribuição padrão de Lua (ou seja, no interpretador
lua
e no compilador luac
).
Aprendeu também que existem diferentes versões de Lua ainda em uso corrente, sendo recomendado usar a mais recente, para novos projetos. E além disso, viu que existem essencialmente duas maneiras de obter essa distribuição:
- Usando gerenciadores de pacotes para obtenção de pré-compilados;
- Compilando manualmente o código-fonte de Lua para seu sistema.
Adendos
As seções a seguir tem relação com o conteúdo abordado, mas podem visar cenários mais específicos ou não interessar a uma parte do público, e por isso foram mantidas em separado:
Conteúdo relacionado
- Bibliografia – Uma introdução à programação em Lua
- Glossário – Distribuição padrão
- Glossário – Interpretador Lua
- Versões – Versões de Lua