01Targets

Uma linguagem. Vários mundos.

O mesmo frontend de linguagem alimenta todos os backends. O código não muda porque o target mudou.

JVM

Disponível

Integração com o ecossistema Java e execução na JVM.

Kof
 ↓
Kof Compiler
 ↓
Kof IR
 ↓
JVM Backend
 ↓
.class
 ↓
JVM

O backend JVM gera bytecode diretamente. Java é uma plataforma de interoperabilidade, não uma linguagem intermediária.

Native

Disponível

Binários nativos sem exigir que o programador gerencie memória manualmente.

Kof
 ↓
Kof IR
 ↓
Native Backend
 ↓
Executable

O backend nativo gera ELF x86-64 diretamente (syscalls próprias, sem libc obrigatória). O GC nativo ainda está em desenvolvimento.

Script

Planejado
Execução direta para scripts e automações, usando exatamente a mesma linguagem. O runtime dedicado ainda não foi implementado — hoje, kof run já cobre o fluxo compilando antes de executar.

Web — KofJS

Em desenvolvimento
Kof
 ↓
KofJS (alpha)
 ↓
ES Modules (ECMAScript 2022+)
Em alpha: o mesmo frontend e a mesma Kof IR geram ES Modules executados na engine JS embarcada (GraalJS — sem Node.js nem runtime externo). Classes, herança, List, JSON, exceções, kof.io e kof.time já funcionam; a plataforma web no browser é a próxima fase. Status detalhado em docs/targets/KOFJS.md no repositório.
02Posicionamento

Kof não é um transpiler.

Não existe uma etapa em que Kof vira Java e depois pede ajuda ao javac.

o que Kof não é
Kof → Java → javac → JVM
o que Kof é
Kof
 ↓
Compiler
 ↓
Kof IR
 ↓
Backend
 ↓
Target
03Memória

Você escreve código. O runtime cuida da memória.

O código Kof não deve mudar apenas porque foi compilado para Native. Nada de malloc, free, ponteiros ou lifetimes manuais.

user.kf
class User(
String name
)
main() {
var user = User("Mel")
println(user.name)
}

JVM

Disponível
Utiliza o garbage collector da JVM.

Native GC

Em desenvolvimento
Native terá gerenciamento de memória próprio. A abstração de memória pertence à plataforma, não ao usuário.