Back-End

14 dez, 2016

O Clojure REPL mais rápido do mundo

Publicidade

Uma queixa comum em relação a Clojure REPLs é o seu tempo de inicialização. Embora essa queixa seja muitas vezes algo como infundada (e relacionada a tooling), Clojure JAR ainda leva cerca de 1 segundo para iniciar em um novo hardware. Planck – através de ClojureScript bootstrap e devido à pequena latência exibida por VMs JavaScript – conseguiu melhorar o tempo que leva para bootstrap um Clojure (Script) REPL. Uma promessa de “boy band” em ter um desempenho ainda mais rápido. Leia!

Motivação

Não muito tempo atrás, Craig Andera mencionou no Twitter que ele tinha conseguido compilar um aplicativo ClojureScript para um executável nativo autônomo, usando uma ferramenta chamada Nexe:

Sendo um grande fã de Mike Fikes da Planck, sua inicialização instantânea e capacidades de script, fiquei intrigado para validar a ideia de que poderíamos ter algo semelhante para a plataforma Node.js. Quer queiramos ou não, o NPM do Node.js é hoje o maior e mais rápido ecossistema de pacotes em crescimento. A interoperabilidade perfeita com o NPM desempenha um papel importante na extensão do alcance do ClojureScript para ainda mais longe. E, como acontece, isso é possível hoje.

Apresentando Lumo

Lumo é um rápido e autônomo ClojureScript REPL que roda no Node.js e no V8. Graças aos snapshots de inicialização personalizados do V8, o Lumo inicia-se instantaneamente, tornando-o o Clojure REPL mais rápido na atualidade[1]. Aqui está uma comparação de resumo dos tempos de inicialização de Clojure, Planck e Lumo.

img-1O Lumo emprega alguns truques para ser extremamente rápido. Alguns deles (cache, cache de análise preguiçosa e macros AOT-compiladas) foram diretamente inspirados pelo Planck. Outros, como o recurso de inicialização instantânea do V8, que não está presente no JavaScriptCore, serão o foco dos próximo artigos.

Ah, e eu já mencionei que o Lumo é uma plataforma cruzada? Aqui está uma captura de tela dele sendo alegremente executado com sucesso no Windows:

img-2

Espiando o futuro

O Lumo não está completo em nenhum sentido. A versão inicial tem um conjunto substancial de recursos (enquanto trabalhamos na criação de um site de documentação, você pode obter uma noção dele, executando lumo-h ou lumo –help), mas muitos mais são esperados para chegar em um futuro próximo. Entre eles estão as adições ergonômicas, como o salto de cursor, impressão bonita e saída colorida, bem como wrappers ClojureScript idiomáticos para as APIs do Node, como executar chamadas de I/O, processos de geração de filhos e muito mais.

Resumindo

O Lumo é gratuito e open source. Eu acho que ele pode servir a inúmeras finalidades, muitas das quais eu sou incapaz de prever. Eu também acho que isso é uma coisa boa. Se você quiser experimentá-lo, existem binários autônomos para Mac, Windows e Linux aqui. Certifique-se de me deixar saber o que você acha!

Estou curioso para saber como você vai usar Lumo. Obrigado por sua leitura!

Agradeço a Mike Fikes por ler o rascunho deste texto.

[1] Ou melhor, aquele com a inicialização mais rápida. O Lumo roda ClojureScript bootstrapped, e compilar ClojureScript em JavaScript é geralmente mais lento do que compilar ClojureScript na JVM.

***

António Nuno Monteiro faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://anmonteiro.com/2016/11/the-fastest-clojure-repl-in-the-world/.