[English](README.md) | [Português](README.pt_BR.md) # Kof

Kof Logo

### Uma linguagem. Um compilador. Vários mundos. se pronuncia coffe **Menos código. Mais intenção. JVM, nativo, script e web. Tudo partindo da mesma linguagem.** --- ## Mascote

Mascote da Kof — uma civetta

O mascote da Kof é uma **civetta** — também conhecida como **gato do almiscar**, é um felino que come café. Nada mais adequado para uma linguagem que se pronuncia *coffe*. --- ## Disclaimer A linguagem Kof não possui qualquer relação com o jogo The King of Fighters ou com sua franquia. O nome Kof surgiu como uma referência à palavra "coffee" escrita propositalmente de forma incorreta. A escolha foi feita justamente na tentativa de criar um nome curto, único e facilmente identificável para a linguagem. Koflang e Kof4J não compactuam com a associação do nome à franquia The King of Fighters. Qualquer semelhança ou associação feita nesse sentido é incidental e não representa a origem, o propósito ou a identidade dos projetos. Nosso objetivo sempre foi criar uma identidade própria para a linguagem e seus componentes. --- > Algumas pessoas olham para um problema e escrevem uma biblioteca. > > Outras escrevem um framework. > > Algumas criam uma ferramenta. > > Eu aparentemente olhei para o ecossistema inteiro e pensei: > > **"Tá tudo complicado demais. Vou criar uma linguagem."** > > E, aparentemente, uma linguagem só também não era suficiente. Bem-vinda à **Kof**. --- # O que é Kof? Kof é uma linguagem de programação **geral e estaticamente tipada**, construída com uma ideia central: > **Uma única linguagem não deveria obrigar você a escolher um único mundo.** > 📖 **A especificação formal da linguagem** (gramática, sistema de tipos, > semântica, status de cada feature) está em > [`docs/language-reference/`](docs/language-reference/). A arquitetura do > compilador (implementação) está em > [`docs/architecture/compiler-architecture.md`](docs/architecture/compiler-architecture.md). A > distinção **linguagem ≠ compilador ≠ target** é o eixo desses documentos. Kof possui seu próprio compilador, lexer, parser, sistema de tipos, análise semântica e representação intermediária (Kof IR). A partir dessa IR, diferentes backends transformam o mesmo programa em diferentes formas de execução: ```text Linguagem Kof (definida pela especificação) │ Kof Compiler (uma implementação) │ Kof IR (máquina de pilha linear, 30 ops) │ ┌───────────────┼────────────────┐ │ │ │ JVM Backend Native Backend JS Backend │ │ │ ▼ ▼ ▼ JVM Native Binary ES Modules (.class) (ELF x86_64, (Node / riscv64/aarch64) browser) ``` **A linguagem não muda. O target muda.** JVM, Native e JS são *targets de compilação* da mesma Kof — não dialetos semanticamente diferentes. **KofScript** (`.ks`, REPL) é um *target de execução direta*: Kof puro consumindo o MESMO frontend e executado pelo interpretador da IR, sem compilar e sem fork de JVM — **não é JavaScript** (`let`/`const`/`async`/`fn` não existem). KofC é uma ferramenta separada (subconjunto C → ELF), não consome a IR Kof — ver [docs/architecture/compiler-architecture.md](docs/architecture/compiler-architecture.md) §7.) --- # Kof não é um transpiler Kof não funciona assim: ```text Kof → Java → javac → JVM ``` Funciona assim: ```text Kof → Kof Compiler → Kof IR → Backend → Target ``` O compilador possui sua própria implementação de: * lexer * parser * AST * resolução de símbolos * sistema de tipos * análise semântica * IR * diagnostics * geração de código Kof não depende de Java como linguagem intermediária. --- # Estado Atual Kof está em desenvolvimento ativo — **0.3.0-beta**. O compilador possui frontend próprio, type system, Kof IR e **três backends sobre a IR**, que produzem **seis targets**: JVM (V21 via ASM), Native x86_64 (ELF, sem libc), `native.risc`/`native.arm` (riscv64 real + aarch64 via tradutor ISA), KofJS (ES Modules) e Android (variante do JVM + empacotamento APK). **KofScript** (`.ks`, REPL) é um **target de execução direta**: Kof puro no MESMO frontend, executado pelo interpretador da IR (`KofInterpreter`) sem emitir bytecode nem fork de JVM. **KofC** (subconjunto C → nativo) é uma ferramenta separada, não consome a IR Kof — ver [docs/architecture/compiler-architecture.md](docs/architecture/compiler-architecture.md) §7. | Feature | JVM | Native | KofJS | |---------|-----|--------|-------| | println, variáveis, aritmética | ✅ | ✅ | ✅ | | if/else, if-expr, while, for, for-in, switch | ✅ | ✅ | ✅ | | functions (sem `fun`), lambdas com capturas | ✅ | ✅ | ✅ | | records, classes, herança, interfaces, virtual dispatch | ✅ | ✅ | ✅ | | generics (erasure), `Box` com primitivos | ✅ | ✅ | ✅ | | exceptions (throw "msg", try/catch/finally) | ✅ | ✅ | ✅ | | null safety `String?` + narrowing | ✅ | ✅ | ✅ | | pattern matching `case String s` + record destructuring | ✅ | ✅ | ✅ | | spawn/await (`Handle`, unboxing) | ✅ | ✅ (pthread) | ✅ sequencial | | strings (concat `+`, `==`, API completa) | ✅ | ✅ | ✅ | | arrays, `List`/`Map`/`Set` + map/filter/reduce | ✅ | ✅ | ✅ | | enums + switch exaustivo | ✅ | ✅ | ✅ | | JSON encode/decode (objetos/records/arrays, 3 targets) | ✅ | ✅ | ✅ | | kof.io (File, Path, Directory) | ✅ | ✅ | ✅ | | kof.time (`now`/`sleep`/`interval`), kof.cache | ✅ | ✅ | ✅ | | kof.web (`web.app()`, ws, sse, TLS) | ✅ | WEB002 | WEB001 | | kof.http client + retry/circuit | ✅ | HTTP002 | ✅ | | kof.security (passwords, crypto, jwt, secrets, auth) | ✅ | ✅ | ✅ | | kof.db / kof.orm (SQLite nativo, MySQL WIP, MongoDB) | ✅ | ✅ | DB001/ORM001 | | kof.config / kof.log | ✅ | ✅ | CONF001/LOG001 | | kof.ui (Color, Palette, Theme, widgets) | no-op | no-op | ✅ render | **Concorrência**: `spawn tarefa()` / `val r = spawn f(); await r` — virtual threads na JVM, `pthread_create` no Native (CONC001 fechado 31/08), sequencial no JS (CONC003). Ver [docs/language-reference/concurrency.md](docs/language-reference/concurrency.md). **Null safety**: `String?`/`Int?` + `if (x != null)` narrowing nos 3 targets (fix JVM 02/09). `Map.get` devolve `V?` para valores de referência. **Testes**: `test "nome" { }` + `assert(cond, "msg")` + `kof test` — 810 testes (793 kof-compiler + 8 kof-script + 5 kof-c-compiler + 4 kof-cli). Ver [learn/23-testing.md](learn/23-testing.md). **Depuração**: `kof debug ` — servidor DAP sobre stdio com JDWP cru (breakpoints por linha Kof, call stack com funções/linhas Kof, continue, disconnect). Ver [docs/debugging/debugging.md](docs/debugging/debugging.md). **Auditoria do ecossistema**: matriz de cobertura da stdlib (inventário, gaps G1-G12, prioridade e estratégia) em [docs/bugs-and-gaps/ecosystem-coverage.md](docs/bugs-and-gaps/ecosystem-coverage.md). Plano de evolução para plataforma completa: [docs/development/roadmap.md](docs/development/roadmap.md). --- # kof.ui — A plataforma de UI A fundação da UI do Kof: `Color` (RGBA 32-bit), `Palette` (cores nomeadas) e `Theme` (light/dark com cores semânticas) — mesma semântica em JVM, Native e JS. A renderização é **KofJS**: widgets → DOM real no webview nativo (`bin/kof-webview`, WebKitGTK embutido) ou no browser. Widgets: `Window` (título, bind, show/close, size, theme), `Label` (text, fontSize, bold, color), `Button` (texto + ação por lambda com capturas), `Input` (text), containers `Column`/`Row`, `View`+`Style` (background, padding, radius). ```kof class App { static Int count = 0 } main() { var w = Window("Contador") var label = Label("contagem: 0") w.bind(label) w.bind(Button("+1", () -> { App.count = App.count + 1 label.text = "contagem: " + App.count })) w.show() } ``` ```bash kof run contador.kf --target=js # abre a janela; fechar encerra o programa ``` Ver: [learn/35-kof-ui.md](learn/35-kof-ui.md) e [learn/37-kofjs.md](learn/37-kofjs.md). --- # Documentação — onde procurar o quê | Pasta | Para quem | O que contém | |-------|-----------|--------------| | [`docs/`](docs/) | arquitetos, mantenedores, decisões | **Documentação técnica e de projeto**: estado atual (`status.md`, `backend-parity.md`; snapshots em `history/`), arquitetura (`architecture/`), filosofia (`philosophy.md`), stdlib e áreas (`stdlib/` — inclui segurança, http, web, config, database, logging, observabilidade), concorrência (`language-reference/`), linguagem (`language-reference/`), depuração (`debugging/`), comparação (`comparison/`), runtime (`runtime/`), roadmap (`development/roadmap.md`), targets (`targets/`), UI (`ui/`), distribuição e licença (`distribution/`), decisões de design consolidadas (`decisions/`), ferramentas (`tooling/`), visões futuras (`development/future/`) e auditorias (`development/ecosystem-coverage.md`, `architecture/complexity-audit.md`) | | [`learn/`](learn/README.md) | humanos aprendendo Kof | **Trilha de aprendizado em capítulos numerados** (00 Introdução → 39 stdlib): linguagem, classes, funções, lambdas, UI, segurança — cada capítulo um guia prático; `learn/native/` para o alvo nativo | | [`training/`](training/README.md) | LLMs e ferramentas de IA | **Corpus estruturado otimizado para modelos de linguagem**: fatos por tópico (`language/`), idiomas (`idioms/`), padrões/anti-padrões (`patterns/`, `anti-patterns/`), exemplos compiláveis (`examples/`), referência (`reference/`), migração Java→Kof (`migration/`), tooling e releases | **Regra prática**: `docs/` diz *como o Kof é* (estado e arquitetura); `learn/` ensina *como usar o Kof* (passo a passo); `training/` alimenta *quem gera código Kof* (LLMs). --- # kof.web — Stack Web Nativa Aplicações web sem Spring, sem servlet container, sem annotations: ```kof record User(String name, Int age) main() { var app = web.app() app.use { if (header("x-auth") == "secret") { return null } return "{\"error\": \"unauthorized\"}" } app.get("/hello") { return "Hello from Kof" } app.get("/users/:id") { return "user " + param("id") + " q=" + query("name") } app.post("/user") { var user = json.decode(body()) return json.encode(user) } app.listen(8080) } ``` ```bash kof serve app.kf ``` Path params, query, headers, body, middleware, JSON tipado e servidor HTTP embutido no runtime do programa. Ver: [docs/stdlib/stdlib-web.md](docs/stdlib/stdlib-web.md). --- # kof.io — Filesystem Arquivos, diretórios e caminhos com uma API única em todos os targets: ```kof var path = Path("data/users.txt") path.parent().createDirectories() path.writeText("Mel\nKof\n") println(path.readText()) println(path.size()) ``` ```kof var dir = Directory("data") dir.createDirectories() for (var entry in dir.list()) { println(entry.name) } ``` Texto sempre UTF-8; bytes como `Int[]`; ausência como `String?` (`null`) e `size()` lança em vez de sentinela `-1`. Ver: [learn/34-file-system.md](learn/34-file-system.md) e [docs/stdlib/IO.md](docs/stdlib/IO.md). --- # Instalação Kof é uma **distribuição**: instale e receba compilador, CLI, runtime, stdlib, tooling, editor support e um OpenJDK embutido. **Nenhuma instalação externa de Java é necessária** — e não precisa saber a versão para instalar. 1. Baixe o pacote do **seu** sistema em [GitHub Releases](https://github.com/KofLang/Kof4j/releases/latest): `linux-x86_64.tar.gz` / `macos-arm64.tar.gz` / `windows-x86_64.zip`. 2. Extraia e adicione o `bin` ao `PATH`: ```bash # Linux tar -xzf kof-*-linux-x86_64.tar.gz export PATH="$PWD/$(ls -d kof-*-linux-x86_64 | head -1)/bin:$PATH" # macOS (Apple Silicon) tar -xzf kof-*-macos-arm64.tar.gz export PATH="$PWD/$(ls -d kof-*-macos-arm64 | head -1)/bin:$PATH" # Windows (PowerShell) Expand-Archive .\kof-*-windows-x86_64.zip $DIR = (Get-ChildItem -Directory -Filter "kof-*-windows-x86_64" | Select-Object -First 1).FullName $env:PATH = "$DIR\bin;$env:PATH" ``` 3. Confira: ```bash kof version # kof kof info # ambiente completo (JVM embutida, Tooling API 21, targets) ``` Ver: [docs/distribution/INSTALL.md](docs/distribution/INSTALL.md) (guia completo com cada sistema, checksum e solução de problemas) e [docs/distribution/ARCHITECTURE.md](docs/distribution/ARCHITECTURE.md). --- # CLI ```bash kof build [--target jvm|native|native.risc|native.arm|js|android] [--output ] [--release] kof run [--target jvm|native|native.risc|native.arm|js] [args...] kof serve [--port ] [--host ] kof check [--json] kof test [--target jvm|native|js] kof script | repl | c | fmt | config kof bench | profile | inspect | debug kof info | lsp | install | version ``` `kof fmt` (formatter idempotente) e `kof config gen` implementados — ver [docs/tooling/README.md](docs/tooling/README.md). --- --- # Compilando e instalando a partir do source **Requisitos:** **JDK 25** (Temurin recomendado — é o baseline de build do repo desde D-BASELINE 14/09; `--release 25`) e Maven 3.9+. Para o target `native`: `as`/`ld` (binutils). O target `js` não exige nada externo (GraalJS embarcado no jar). > **Três camadas de JDK, não confunda (D-BASELINE):** > - **Compilar este repo:** exige JDK **25** (`pom.xml` `release=25`; o código > do compilador usa unnamed patterns `_` = JEP 443, finalizado no 22 — o JDK > 21 NÃO compila os sources). > - **Rodar o CLI `kof`:** as classes são `release 25`, então o próprio CLI roda > em JDK **25**; `scripts/package.sh --jdk` embute o Temurin 25 para a > distribuição empacotada levar a própria JVM. > - **Seus programas Kof (o contrato da LINGUAGEM — congelado, regra 6):** > inalterado. O backend JVM continua emitindo bytecode **`V21`** > (`JvmBackend`) e o template Android continua `release 21` — um `.kf` seu > roda em **JVM 21+**. Subir a toolchain do repo NÃO sobe o runtime mínimo da > linguagem. ```bash # 1. Compilar tudo (compilador, runtime, CLI com GraalJS embarcado) mvn clean package -DskipTests # 2. Rodar a suíte completa (JVM + Native + KofJS E2E) mvn test # 3. Usar direto do source (dev build, java do sistema) mkdir -p lib cp kof-cli/target/kof-cli-$(cat VERSION).jar lib/kof.jar bin/kof version bin/kof info # 4. Instalar num prefixo (instalação local completa) bin/kof install ~/.kof export PATH="$HOME/.kof/bin:$PATH" kof version # 5. Empacotar a distribuição oficial (com OpenJDK 25 embutido) scripts/package.sh --jdk # gera dist/kof---.tar.gz ``` O `kof install ` copia o `kof.jar` para `/lib/` e gera o launcher `/bin/kof` (usa o JDK embutido de `/jdk/` quando presente; senão o `java` do sistema). O `scripts/package.sh --jdk` baixa o Temurin 25 do Adoptium e monta o layout completo de distribuição. Versionamento centralizado em `VERSION` — ver [docs/distribution/VERSIONING.md](docs/distribution/VERSIONING.md). **Windows:** use o **Git Bash** para `scripts/package.sh` — o `bash` genérico do PATH pode resolver para o WSL e gerar uma distribuição Linux (OBS-005). No Windows, o Python pode estar disponível apenas como o launcher `py` — o script o descobre automaticamente (`python3`/`python`/ `py -3`). --- # Arquitetura ```text Source (.kf) ↓ Lexer ↓ Parser ↓ AST ↓ Type System ↓ Semantic Analysis ↓ Kof IR (backend-agnostic) ├── JVM Backend (ASM) → .class ├── Native Backend (x86_64 / riscv64 / aarch64) → ELF └── JS Backend (GraalJS) → ES Modules ``` --- # Princípios 1. Menos código, mesma capacidade 2. Tipagem forte 3. Intenção acima de cerimônia 4. Um frontend, múltiplos backends 5. Direto para o target 6. Interoperabilidade 7. Sem mágica desnecessária 8. Ferramentas importam ## O "paradigma" da intenção Kof é **orientada à intenção** — o que não é um paradigma formal, e sim a orientação a objetos levada ao extremo: o código expressa *o que* quer, e a plataforma (linguagem + compilador + runtime + stdlib) decide *como*, por target e por convenção. ```text intenção → Kof → compilador → backend ``` Você escreve `spawn tarefa()` (não `Thread`), `app.get("/users/:id")` (não servlet container), `Window`/`Button("+1", () -> ...)` (não WebView/JavaFX), `json.decode(body)` (não parser manual), `Palette.red` (não `0xFF0000FF`). Se é essencial para qualquer programa, pertence à plataforma. Quando um target não consegue realizar a intenção, ele diz isso em compile-time com um código de gap (`CONC001`, `JSN002`, ...) — nunca silenciosamente. Detalhes: [docs/philosophy.md](docs/philosophy.md) · idiomas: [training/idioms/](training/idioms/) · anti-padrões: [training/anti-patterns/](training/anti-patterns/). --- # O que Kof NÃO é * Java com outra sintaxe. * Kotlin 2. * Julia para JVM. * Um transpiler. * Um gerador de Java. * Um interpretador fantasiado de compilador (o compilador é real: bytecode/ELF/ESM; o `KofInterpreter` é um target adicional de execução direta, não um disfarce). Kof é uma linguagem. Um compilador. Uma IR. Vários backends. --- # Licença Kof é software livre distribuído sob a licença **GNU General Public License v3.0**. Isso se aplica ao código-fonte do compilador, ferramentas e demais componentes do projeto. **Programas escritos em Kof NÃO são automaticamente GPLv3.** O autor do programa mantém o direito de escolher a licença do próprio software. Usar o compilador Kof não obriga ninguém a abrir seu código-fonte. Software proprietário escrito em Kof é permitido, desde que respeite as licenças das dependências que efetivamente incorporar. Para mais detalhes, consulte [docs/distribution/LICENSING.md](docs/distribution/LICENSING.md). --- **Kof** *Uma linguagem. Um compilador. Vários mundos.* *Menos cerimônia. Mais intenção.*