Kodumaro :: MoonScript sobre LuaJIT

Publicado em 12 de Maio, 2016
As sombras da programação.
MoonScript

Há muito pouco tempo atrás um amigo meu me sugeriu dar atenção a MoonScript. Admito que eu via a linguagem com preconceito, mesmo assim resolvi dar uma olhada.

Resultado: todos os meus códigos em Lua acabaram migrados para MoonScript. 😋

A linguagem é extremamente enxuta, limpa e poderosa. Para lidar com oparadigma funcional, a sintaxe de MoonScript é bem mais concisa e que a de Lua. O mesmo vale para orientação a objetos. Não vou entrar em detalhes, se estiver curioso, leia o guia da linguagem.

LuaJIT

LuaJIT é uma implementação alternativa JIT de Lua, com suporte a FFI nativo.

Colocar MoonScript para trabalhar com LuaJIT não é trivial. É preciso uma série de pequenos hacks pra funcionar.

Vamos começar pelas dependências.

Dependências

MoonScript depende de quatro outros módulos para funcionar:

Instale alt-getopt normalmente no LUA_PATH de seu LuaJIT. Aqui para mim é /usr/share/lua/jit.

Para instalar LuaFileSystem, clone o repositório do GitHUB e não se esqueça de editar o arquivo config. As mudanças principais são:

PREFIX=/usr
LUA_LIBDIR=$(PREFIX)/lib/lua/jit
LUA_INC=$(PREFIX)/include/luajit-2.0

Isso considerando que seu LUA_CPATH esteja em /usr/lib/lua/jit.

Compile e instale normalmente.

Já LPeg merece uma atenção extra, já que ele não funciona com LuaJIT. No lugar, use LPegLJ.

Clone e instale LPegLJ no seu LUA_PATH, depois execute o seguinte comando:

cd $LUA_PATH
sudo ln -s lpeglj.lua lpeg.lua

Isso fará com que MoonScript pense tratar-se do LPeg original.

Instalando MoonScript

Com as três dependências instaladas, clone o projeto do GitHUB. Edite o Makefile, substituindo as ocorrências de lua5.1 e lua por luajit.

Remova as entradas local e global do Makefile.

Edite o hashbang dos arquivos bin/moon e bin/moonc, trocando lua por luajit.

Execute make compile

Copie os diretórios moon/ e moonscript/ para seu LUA_PATH.

Copie os arquivos bin/moon e bin/moonc para o diretório /usr/bin/ do sistema.

E pronto! Já deve estar funcionando! Qualquer dúvida, me avisem pra eurevisar o texto.