1 pontos por GN⁺ 2026-01-04 | 1 comentários | Compartilhar no WhatsApp
  • Linguagem de programação que combina a sintaxe do Clojure e desempenho nativo baseado em LLVM, oferecendo interoperabilidade fluida com C++
  • Mantém as características funcionais e orientadas a valores do Clojure, mas usa o LLVM como ambiente host em vez da JVM
  • Todas as estruturas de dados são persistentes e imutáveis (persistent & immutable), com integração direta à biblioteca padrão de C++
  • Atualmente em estágio alfa (Alpha), com documentação oficial e exemplos disponíveis no jank book
  • É uma tentativa de combinar o ecossistema do Clojure com o desempenho nativo de C++, com o significado de reduzir a fronteira entre linguagens funcionais e linguagens de sistema

Visão geral do jank

  • jank é uma linguagem hospedada em LLVM baseada na sintaxe e filosofia do Clojure
    • Em vez da JVM, é baseada em LLVM e oferece interoperabilidade com C++
    • Mantém as características funcionais, interativas e centradas em valores do Clojure
  • Tem como objetivo alta compatibilidade com Clojure e, assim como o Clojure interage com Java, o jank se integra ao C++
  • Está atualmente em versão alfa, e mais detalhes podem ser consultados na documentação oficial

Características da linguagem

  • Todas as estruturas de dados embutidas são persistentes e imutáveis (persistent & immutable)
    • Exemplo: (def george {:name "George Clooney"})
  • Efeitos colaterais (side effects) podem ser realizados explicitamente quando necessário
    • Exemplo: (defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
  • Possibilita integração direta com a biblioteca padrão de C++
    • Exemplo: (cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
  • Fornece várias funções centrais para processamento funcional de dados
    • Exemplo: (apply + (distinct [12 8 12 16 8 6])) ; => 42

Desenvolvimento e documentação

  • Documentação oficial: jank book
  • O projeto é baseado em LLVM 22 e compatível com os padrões mais recentes de C++
  • Suporta compilação AOT, profiling de GC e opções de build do CMake
  • Inclui configuração para ambiente Nix e builds automatizados em CI

Comunidade e patrocínio

Apresentações e introduções relacionadas

  • Vídeo da apresentação na Clojure Conj 2023
  • Apresentações da linguagem no The REPL Interview e no Compiler Spotlight
  • Vídeo YouTube: Language Introduction disponível

Resumo:
jank é uma linguagem que leva a filosofia funcional do Clojure para o ambiente nativo de LLVM e C++, buscando combinar a produtividade do Clojure com o desempenho do C++. Ainda está em estágio alfa, mas propõe uma nova experiência de desenvolvimento integrada tanto para desenvolvedores Clojure quanto para programadores de sistemas.

1 comentários

 
GN⁺ 2026-01-04
Comentários do Hacker News
  • Para conteúdo relacionado ao alpha do jank, seria bom consultar o livro oficial
    Ainda não está totalmente pronto para ser anunciado, mas fico feliz que as pessoas estejam demonstrando interesse
    Depois que eu integrar só mais alguns recursos do compilador, já vai estar pronto o suficiente para acompanhar o livro e experimentar o jank na prática

    • Tenho bastante interesse no jank e estou lendo o livro que foi linkado agora há pouco
      Notei alguns erros gramaticais e fiquei em dúvida se posso enviar um PR na seção book, ou se é melhor mandar feedback de outra forma para preservar o estilo do autor
    • Obrigado e parabéns a todos que participaram
  • jank é um dialeto de Clojure, e o próprio Clojure também é um dialeto de Lisp
    É focado em programação funcional, mas também oferece suporte a estado mutável e efeitos colaterais
    Todas as estruturas de dados são imutáveis por padrão e, como Clojure, ele oferece mecanismos seguros de alteração para facilitar o trabalho com concorrência
    Além disso, tem integração profunda com C++, permitindo definir novos tipos, funções e templates de C++ em tempo de execução
    Com compilação JIT usando Clang e LLVM, dá para acessar bibliotecas C/C++ com facilidade
    Para mais detalhes, veja o livro oficial

    • Quando eu usava C++ no passado, o processo de compilação era doloroso demais
      Gosto de Clojure, mas o fato de haver um alvo nativo é atraente
      Fiquei curioso sobre a velocidade de compilação/recompilação no jank
  • Fiquei curioso sobre o quanto o desenvolvimento do jank vai acompanhar de perto o Clojure
    O plano é manter o máximo possível igual, como o cljs, ou em algum momento ele pode divergir?
    No passado eu fiz uma linguagem cerca de 90% parecida com Clojure, mas como era difícil garantir compatibilidade total, nunca dei esse nome a ela
    O jank parece um drop-in replacement, o que parece bem legal

    • jank é Clojure, e a ideia é acompanhar o desenvolvimento do Clojure upstream
      Estamos colaborando com a equipe do Clojure e com desenvolvedores de outros dialetos e, para isso, liderando a cross-dialect clojure-test-suite
      Ela já dá suporte, ou está em processo de dar suporte, a Clojure JVM, ClojureScript, Clojure CLR, babashka, Basilisp e jank
      Ainda assim, também está previsto adicionar modos opcionais inspirados em Carp, mantendo a compatibilidade padrão
  • Por um momento, achei que não era jank, mas sim Jack Lang (o político francês)

    • Eu também entendi a mesma coisa
  • Livro para acompanhar: https://book.jank-lang.org/

  • Sigo o blog do jank há um ano e queria parabenizar pelo lançamento alpha
    Como usuário de Emacs, fiquei curioso sobre o estado do suporte a ferramentas de desenvolvimento como o CIDER
    Também encontrei um erro de digitação no link da seção Welcome — precisa corrigir “foreward” para “foreword”

    • O servidor nREPL está funcionando, mas ainda não foi integrado ao repositório do jank
      Dá para ver isso no try-jank
      O progresso está atrasado por causa de um bug no Clang, mas isso é uma prioridade alta
      O erro no link já foi corrigido
  • Fiquei curioso se o jank consegue se integrar a codebases em Rust

    • Dá, como em um projeto C++ comum
      É possível conectar via ABI C ou por mecanismos de interoperabilidade C++/Rust
    • Claro que sim
  • Gostaria de saber se há um sistema de tipos estático incluído

    • Como é um dialeto de Clojure, por padrão é uma linguagem de tipagem dinâmica
      Mas o desenvolvedor já mencionou planos de adicionar um sistema de tipos gradual¹
      A visão é permitir que algumas partes sejam totalmente dinâmicas e baseadas em GC, enquanto outras funcionem de forma mais controlada e otimizada
      ¹ Post de blog relacionado
    • Não existe tipagem estática no nível da linguagem inteira
      A interoperabilidade com C++ é estaticamente tipada, mas, ao voltar para o lado Clojure, tudo continua totalmente dinâmico e polimórfico
      Existe a intenção de explorar um modo opcional de tipagem estática como no Carp, mas não neste ano
    • Como ele implementa Clojure, presumo fortemente que não haja tipagem estática
  • No começo, achei que a notícia era sobre alguém chamado “Jank Lang” que tinha encontrado alpha de investimento