Experiência com Clojure
(tryclojure.org)- Try Clojure é uma página de experiência de 5 minutos para avaliar imediatamente expressões em Clojure no navegador
- O conteúdo digitado no REPL à direita é executado em um read-eval-print loop
- Você pode digitar diretamente expressões de exemplo como
(+ 1 2)ou clicar em trechos de código para inseri-los automaticamente - Use
(help)para verificar os comandos e, quando estiver tudo pronto, digite(start)para iniciar a experiência - Esta página foi criada com Clojurescript, e as informações de produção incluem Elia Scotto, Michiel Borkent e a comunidade Clojure
Clojure executado diretamente no navegador
- Try Clojure foi projetado para proporcionar uma experiência curta com Clojure com a mensagem “Got 5 minutes?”
- No REPL à direita, a symbolic expression em Clojure inserida pelo usuário é avaliada
- O fluxo da experiência é simples
- Digite diretamente expressões como
(+ 1 2) - Clique em trechos de código para inseri-los automaticamente
- Use
(help)para verificar os comandos - Inicie com
(start)
- Digite diretamente expressões como
Informações de produção
- A página inclui uma citação de Rich Hickey: “If you want everything to be familiar, you'll never learn anything new.”
- Try Clojure foi criado com Clojurescript, e Elia Scotto é indicado como criador
- Também há agradecimentos a Michiel Borkent e à comunidade Clojure
1 comentários
Opiniões do Hacker News
Fico feliz que isso tenha voltado. Uma versão bem antiga me levou a experimentar Clojure, e essa escolha acabou sendo a decisão de maior impacto na minha carreira.
Até hoje uso Clojure quase todos os dias, no trabalho e em casa; às vezes Clojure padrão, às vezes o excelente Babashka como executor de tarefas no estilo Make ou substituto para scripts Zsh.
Go também é uma forte segunda opção quando preciso compilar para um único binário, mas Clojure é a linguagem em que me sinto mais à vontade graças ao fluxo de desenvolvimento baseado em REPL, que parece mais uma conversa com o programa do que o ciclo tradicional de escrever-compilar-executar.
Somando a isso o fato de rodar sobre a JVM, vira um conjunto de ferramentas que permite terminar o trabalho com prazer. Se você tem qualquer interesse em Lisp e programação funcional, recomendo muito experimentar; se usa VSCode, o plugin Calva ajuda bastante.
Mudar para uma linguagem menos expressiva foi doloroso e irritante para mim; lembro que, ao sair de Python para Java 5, o código para expressar a mesma coisa ficava de 3 a 5 vezes mais longo.
Talvez o ponto central seja usar linguagens menos expressivas apenas para escrever coisas pequenas, como scripts de shell, pequenas funções em C para desempenho ou interface com funções externas, ou pequenos utilitários em Go.
Se você está tendo o primeiro contato com Clojure e quer experimentar algo útil de imediato, recomendo muito o runtime Babashka para scripting: https://babashka.org
É divertido e acessível, além de ser uma das partes mais polidas do ecossistema Clojure.
Diferentemente do Clojure completo na JVM, ele tem tempo de inicialização muito rápido, o que o torna um bom ponto de entrada; iniciantes podem trabalhar de forma quase interativa com ferramentas de observação/recarregamento de arquivos que já conhecem, como o nodemon.
Mais adiante, vale migrar para uma configuração totalmente interativa usando uma conexão REPL no editor, mas esse fluxo pode ser pouco familiar para iniciantes e também trabalhoso de configurar.
Usei com HTMX para criar uma pequena UI que mostrava estatísticas de um app de trabalho, e a experiência foi muito boa.
O Babashka já inclui praticamente tudo de que você precisa para uma aplicação web básica e, com HTMX, dá para fazer carregamento dinâmico nas páginas sem lidar com um frontend em JavaScript.
Além disso, você pode subir um nREPL com
bb --nrepl-servere conectar um editor como o Calva para desenvolver scripts de forma interativa, então vale conferir se precisar de uma UI web simples.Um site em uma linha parecida é https://www.maria.cloud/
Ele é mais voltado a ensinar programação para iniciantes absolutos, mas acho que as operações básicas no estilo paredit e a avaliação por formulário ficam muito mais próximas do desenvolvimento guiado por REPL usado na prática.
Digitar diretamente em uma janela de terminal REPL tem uma ergonomia muito ruim; em geral, é mais realista usar algo como o Calva no VSCode ou o CIDER no Emacs para enviar o formulário sob o cursor a algum processo REPL.
O melhor motivo para aprender Clojure é Reagent, e acho que é de longe a melhor forma de usar React: https://reagent-project.github.io/
shadow-cljs facilita o uso de bibliotecas npm: https://github.com/thheller/shadow-cljs
Acabei ficando com uma configuração padrão de backend em Go e frontend em Reagent: https://github.com/nathants/aws-gocljs
Eu queria ver com mais clareza o que acontece por baixo e interoperar de forma mais simples com componentes React nativos
Parece que ele está acompanhando o suporte experimental ao React 18, mas o Reagent ficou para trás em relação ao fluxo mais moderno do React e talvez não consiga aproveitar todos os benefícios de otimização de desempenho
Ele ainda usa class components e não hooks, e também há a preocupação de que a conversão em tempo de execução do Hiccup possa prejudicar o desempenho
Dito isso, na maioria dos casos provavelmente não será um problema perceptível, e deve ficar tudo bem se você não estiver fazendo nada sofisticado. Sinto falta do modelo de UI-as-data do Hiccup, então talvez eu volte ao Reagent um dia
Para gerenciamento de estado, recomendo muito re-frame: https://day8.github.io/re-frame/
No início pode parecer intimidador, mas a documentação é excelente e, depois que você entende, o modelo fica muito claro
Também há alternativas como Helix(https://github.com/lilactown/helix) ou UIx(https://github.com/pitch-io/uix), além do refx(https://github.com/ferdinand-beyer/refx), que praticamente remove a dependência do Reagent
Ou você pode adicionar código de interoperabilidade ao UIx/Helix para acoplar o re-frame: https://github.com/pitch-io/uix/blob/master/docs/interop-wit...
Em 2024 não dá para enviar um arquivo HTML vazio, porque isso estraga a otimização para buscas; se não fosse por isso, eu gostaria de experimentar
Gostei muito do período em que usei Clojure e recomendo fortemente: https://eli.thegreenplace.net/2017/clojure-the-perfect-langu...
Clojure for the Brave and True, de Daniel Higginbotham, é um material realmente excelente para aprender Clojure, e recomendo muito
Dá para ler gratuitamente online: https://www.braveclojure.com/clojure-for-the-brave-and-true
O verdadeiro problema do livro não é Clojure, e sim que ele começa ensinando Emacs
Hoje deve haver muitos iniciantes vindo do VSCode, e para eles isso vira uma grande distração
Alguns anos atrás, um colega recomendou que eu lesse History of Clojure mesmo que eu não fosse tentar Clojure, mas acabei adiando: https://dl.acm.org/doi/pdf/10.1145/3386321
Então, depois de ver Rich Hickey - Greatest Hits https://changelog.com/posts/rich-hickeys-greatest-hits, li History of Clojure e comecei a aprender imediatamente
Clojure é uma das linguagens mais divertidas para construir coisas e também uma das mais bonitas
Não é tanto pela sintaxe em si, mas pela forma como ela permite expressar ideias por meio de bom design e composição, o que estimula a mente de um jeito muito agradável
Se você ainda está procurando aquela ferramenta brilhante que se encaixe perfeitamente e nada até agora fez sentido para você, vale a pena experimentar Clojure. Entre as linguagens que já vi, ela está entre as mais concisas e, ao mesmo tempo, poderosas
Fico curioso se aprender Clojure acrescenta algo além disso, ou se no geral é parecido
Fico curioso para saber se existe uma versão de Clojure que compile para algo como LLVM
Parece algo parecido com o que o Scala Native originalmente pretendia ser, mas, na prática, ele não se consolidou assim
Eu gosto de programação funcional, mas, em 2024, o ecossistema Java parece tão antiquado que fica difícil de aguentar
Pode ser visto em https://jank-lang.org/
Ainda não alcançou paridade completa de recursos com o Clojure na JVM, mas acompanho o desenvolvimento de perto
Na verdade, isso provavelmente não é um grande problema
Links relacionados:
Try Clojure – An interactive tutorial in the browser - https://news.ycombinator.com/item?id=30423856 - fevereiro de 2022, 93 comentários
Try Clojure in your browser - https://news.ycombinator.com/item?id=3366526 - dezembro de 2011, 26 comentários
Try Clojure - https://news.ycombinator.com/item?id=1359682 - maio de 2010, 60 comentários
Clojure está ganhando popularidade no México, e imagino que o Brasil tenha uma tendência parecida por causa do Nubank
É um lugar onde cientistas da computação querem trabalhar, e parece que trabalham principalmente com Clojure
Acho que eles contrataram alguns dos principais membros da linguagem e, se bem me lembro, em algum momento também adquiriram a empresa de José Valim, criador do Elixir
Ainda assim, ela parece continuar sendo uma empresa que usa principalmente Clojure
A segunda aquisição foi para obter a expertise da Platformatec em gestão de projetos (https://building.nubank.com.br/tech-perspectives-behind-nuba...); até onde sei, não há código Elixir rodando no Nubank
Há Python no “outro lado” dos pipelines de ETL, mas, nas áreas voltadas para o usuário, até onde sei, o backend é Clojure e os apps Android e iOS são TypeScript
Fico curioso para saber se Clojure na China também é um movimento significativo