8

O nascimento da Kaa — quando uma ideia vira linguagem

Quem estuda ciência da computação, num passado infantil, provavelmente já sonhou em construir máquinas incríveis com recursos limitados — igual ao Batman ou ao Homem de Ferro, escapando de enrascadas pela força do engenho.

No meu caso, foi exatamente assim. Sempre busquei domar a natureza com ciência. Um exemplo que carrego com orgulho: no ensino fundamental, criei uma pequena linha de produção semiautomática de trabalhos escolares — e com a renda gerada, contribuía com as despesas de casa. Era um sistema simples, mas funcional.

Essa memória voltou com força quando fui aprovado na UFMS para o Tecnólogo em Inteligência Artificial. Eu já cursava Sistemas de Informação no IFMA, mas decidi mudar de rota — e de estado. Fiz o Enem com esse objetivo.

Ao receber a aprovação, veio a lembrança da infância: minha avó dizia que tudo o que eu fazia desde os 5 anos era "robô". Ela não estava errada. O que muda hoje é que os robôs ficaram maiores — e mais interessantes.

A base computacional como projeto pessoal

Com essa transição de vida, decidi que era hora de construir minha própria base computacional. Vivemos num tempo em que o paradigma homem-máquina permite que, por meio da simbiose com IA, possamos construir coisas muito mais sofisticadas do que antes. Por que não usar isso a favor de um projeto ambicioso?

O primeiro passo foi mergulhar em Crafting Interpreters, de Robert Nystrom — uma obra completa sobre como construir uma linguagem de programação do zero, desde o lexer até uma máquina virtual. É um daqueles livros raros que não te ensina só o como, te ensina o porquê. Cada capítulo me fazia parar para ir codar.

Em seguida, fui explorar o que a comunidade de entusiastas já havia produzido: linguagens experimentais, DSLs, projetos acadêmicos. E um detalhe curioso me marcou: muitos conceitos usados hoje em linguagens de programação têm raízes na própria IA. Isso mudou minha forma de enxergar o problema.

Foi nessa pesquisa que a ideia ganhou forma. Decidi criar a Kaa.

O que é a Kaa?

A ideia central é simples: ser uma linguagem para o meu uso cotidiano. Mas como desde criança eu projetava máquinas de estado — sistemas onde cada estado define um comportamento e transições determinam o que acontece a seguir —, quis que a Kaa refletisse esse modo de pensar.

A linguagem não tem sistema de classes. Ela opera com funções e um sistema de compartilhá-las por closures como sistemas vivos separados que trabalham em conjunto. A orientação a objetos da Kaa gira em torno do conceito de S-bots: agentes autônomos que podem ser compostos e encadeados. Cada script pode ser alocado dentro de outro, formando uma árvore de execução.

Daí o nome: Kaa significa "mata, floresta, bosque" em Nheengatu, língua indígena brasileira — e uma floresta é, afinal, uma estrutura de árvores interligadas.

CampoValor
NomeKaa
Origem do nomeNheengatu (floresta)
ParadigmaFuncional + S-bots
EstruturaÁrvore de scripts
Extensão.kaa
BasePython

Kaa v2.0 — sistema de tipos leve

A versão 2.0 representou o primeiro salto importante. A Kaa evoluiu de uma linguagem puramente dinâmica para um modelo com tipagem leve e validação em tempo de execução.

Declaração de variáveis com tipo:

FlagTipo
-iinteiro
-ffloat
-sstring
-Ttrue
-Ffalse
-objobjeto
var -i x = 10;
var -f preco = 4.99;
var -s nome = "Saulo";
var -i idade;
input "Digite sua idade: " >> idade;
print "Nome: ", nome, " Idade: ", idade;

Um dos pontos mais interessantes: a linguagem tenta converter valores automaticamente, mas falha de forma explícita quando não é possível — segurança sem perder flexibilidade.

Coerção de tipos acontece em três momentos: declaração, atribuição e entrada via input.

Pipeline de execução:

código .kaa → scanner → tokens → parser → AST → interpretador

Os S-bots na prática — OOP sem classes

A inspiração veio diretamente daqueles micro-bots do ensino fundamental. A grande dificuldade sempre foi a interconexão entre eles. Com a Kaa, isso virou um sistema formal: dois arquivos .kaa separados conversam por meio do comando add e da diretiva expor.

// Arquivo inimigo.kaa — define o S-bot
fun inimigo(nome, vida, especie) {
  var -obj self = {
    "nome": nome,
    "vida": vida,
    "vivo": -T,
    "especie": especie,
  };

  fun perde_vida(dano) {
    self.vida = self.vida - dano;
  }

  fun morto(morto) {
    if(morto == -F) {
      print "O OGRO ", self.nome, " ESTA VIVO!!";
    } else {
      print "O OGRO ", self.nome, " MORREU!!";
    }
  }

  self.perde_vida = perde_vida;
  self.morto = morto;
  return self;
}

expor all;
// Arquivo ogro.kaa — usa o S-bot importado
add "./inimigo.kaa" all;

var -T control;
var -obj ogro1 = inimigo("jose", 110, "ogro");
var -obj ogro2 = inimigo("joao", 100, "ogro");

while(control == -T) {
  ogro1.perde_vida(10);
  if(ogro1.vida == 0) {
    ogro1.morto(-T);
    destroy_arena(ogro1);
  }
}

O padrão expor all / add "./arquivo.kaa" all é o equivalente a um import modular — mas pensado como sementes de uma floresta: cada S-bot é independente, mas pode crescer dentro de outro.

Trocando o interpretador — a decisão radical

Depois de estruturar os S-bots como módulos vivos, o próximo passo foi uma decisão radical: jogar fora o interpretador de árvore (tree-walk).

A versão inicial funcionava como a maioria dos interpretadores didáticos: percorria diretamente a AST nó a nó a cada execução. É elegante de entender, mas tem um custo alto — cada operação redescobre o caminho. É como ler um livro inteiro para achar uma página toda vez que você precisa dela.

A solução foi construir uma Máquina Virtual de Bytecode própria. Em vez de caminhar pela árvore, o compilador interno da Kaa agora traduz o código-fonte em instruções simples e sequenciais — semelhante ao que a JVM faz com Java ou o CPython faz com .pyc. A VM lê essas instruções em linha reta, muito mais rápido.

O motor JIT — quando a Kaa parou de pedir licença

Toda linguagem interpretada carrega um peso original: ela precisa de um intermediário. A Kaa rodava sobre o Python, que já é ele mesmo interpretado. Era como contratar um tradutor que precisa de outro tradutor.

A resposta foi o JIT por Peephole Optimization. A ideia não é reescrever tudo em C — é mais cirúrgica do que isso. O otimizador observa o bytecode gerado e identifica padrões: sequências de instruções que aparecem repetidas dentro de laços, incrementos de contadores, comparações binárias previsíveis.

Quando reconhece um desses padrões, ele funde aquele bloco inteiro numa única superinstrução — uma operação atômica executada em nível mais baixo. É o conceito de Macro-Op Fusion, o mesmo princípio que processadores modernos usam internamente para fundir pares de instruções de assembly em pipeline. A Kaa trouxe isso para o nível da VM.

Conclusão — um sonho que compila

A Kaa não nasceu de uma necessidade de mercado. Não surgiu de uma demanda corporativa. Ela nasceu da mesma coisa que me fez montar aquela linha de produção de trabalhos escolares no ensino fundamental: a vontade irresistível de construir uma máquina que pensa do jeito que eu penso.

Toda linguagem de programação é, no fundo, uma filosofia materializada em código. O C acredita que o programador deve controlar tudo. O Python acredita que legibilidade é lei. O Rust acredita que segurança de memória não pode ser opcional. A Kaa acredita que um sistema deve funcionar como uma floresta: troncos rígidos, tipados, confiáveis — e galhos que se adaptam, se compõem, crescem e morrem sem derrubar a árvore inteira.

Esse projeto é uma mistura honesta de tudo que fui acumulando: a obsessão com tipagem que aprendi no C, a leveza de scripts que o Python me ensinou, a modularidade que o JavaScript me forçou a entender. E a filosofia de que um objeto não precisa de uma classe para ter identidade — que veio da minha própria cabeça, validada pelos S-bots que antes viviam em planilhas e arquivos .bat numa tarde de escola.

Ler o Crafting Interpreters foi como encontrar o manual técnico de uma máquina que eu já tinha construído no escuro. E agora, pela primeira vez, tenho o mapa formal de tudo isso.

A floresta ainda está crescendo.

Carregando publicação patrocinada...
2
1

Ainda não pensei em disponibilizar em código aberto gratuito. O projeto tem vantagens de redução e preservação de memória de forma nativa, o que é bom para criação de IA.

Como vivemos num cenário de nova revolução industrial, estou pensando em trabalhar até a versão alpha 5 e lançar por 5 reais, toda versão da linguagem teria esse valor.

Quem comprar, seria dono daquela versão e poderá brincar a vontade. Estou pensando também em uma rede onde os programadores de Kaa pudessem vender seus scripts de forma acessível e que garantissem qualidade.

1
1

Se você crê que open source é gratuito, está enganado.

Open Source, significa que o usuário têm bônus de ver e modificar o que têm debaixo do capô do carro.

Se ele ganhou ou comprou o carro é outra coisa.

Eu não quero criar uma fundação igual Python , mas não quero fazer igual o Nubank que tem uma linguagem própria que só eles podem usar.

1

Interessante o projeto.

Gostei da forma como ele aloca a tipagem e interliga os módulos.

Não ficou muito claro como é feita as declarações. Mas acho que acabei lindo rápido.

0
-2
1
1

Acredito que a tipagem abreviada dificultaria em codebases grandes, mas acho que entende a ideia de a declaração parecer uma linha de cli.

Mas cara, parabéns, ficou bem legal. Otima iniciativa!

1

Isso, a ideia é ser parecida com todas as linguagens que gosto.

Tanto no método input que usa ">>" e a tipagem abreviada, me inspirei no shellscript.

Estou focando em abrir uma comunidade, como um colega me aconselhou.