Historico de Versoes

Changelog Artcode

Resumo tecnico das versoes com foco em runtime, linguagem e tooling.

v0.5.0 Lançado 2026-05-27

ArtKit v0.1: componentes reativos sem virtual DOM, sistema de dependências em compile time, scheduler assíncrono, lifecycle hooks, Deque<T> no prelude, TTD delta snapshots, DAP mínimo e guia de migração. 53/53 itens do roadmap v0.5 — feature-complete.

1. Componentes Reativos — Bloco B

  • 6 novos tokens no lexer: component, view, state, prop, memo, ref.
  • AST: Stmt::ComponentBlock, Stmt::QualifiedBinding, enum BindingQualifier.
  • Parser: component Name { state x: T = expr; view { <template> } }.
  • Type checker: 4 regras de diagnóstico — prop imutável, memo possivelmente stale, state fora de escopo, ref em view.

2. ReactivityPass e Grafo de Dependências — Bloco D

  • Novo crate reactivity: DepGraph com nós Source/Derived/Sink e arestas tipadas.
  • ReactivityPass::analyse constrói DAG a partir de ComponentBlock.
  • Tarjan SCC para detecção de ciclos em memos — erro em compile time com mensagem clara.
  • Codegen: set_X(v) recomputa memos em ordem topológica e atualiza apenas os text nodes afetados.

3. Runtime UI: Scheduler e Lifecycle — Bloco E

  • JS_RUNTIME expandido: scheduler __schedule/__flush via queueMicrotask, tick(fn).
  • Lifecycle registry: on_mount, on_destroy, on_update.
  • Helpers DOM: dom.create, dom.text, dom.append, dom.set_attr, dom.set_text, dom.remove, dom.on, dom.off, dom.query.

4. ArtKit v0.1 — Bloco F

  • examples/artkit/counter.art — Counter com state count e evento on:click.
  • examples/artkit/todo.artTodoItem e TodoList com state e props.
  • art build --bundle examples/artkit/counter.art gera bundle autocontido.
  • Guia docs/guides/artkit_quickstart.md; CI smoke test artkit-smoke.

5. Stdlib, TTD e Tooling — Bloco G

  • Deque<T> no prelude: deque_new, deque_push_front, deque_push_back, deque_pop_front, deque_pop_back, deque_len.
  • TTD delta snapshots: Tracer::record_delta armazena apenas chaves alteradas.
  • DAP mínimo: art debug --dap emite eventos initialized/stopped/terminated para editores DAP.
  • art doc <path> gera HTML em docs/generated/<name>.html.
  • docs/guides/migration_v0.4_to_v0.5.md — breaking changes e guia de migração.

v0.4.0 Lançado 2026-05-27

Primeiro passo para o ArtKit: compilação para JavaScript com bundler completo, parser de templates ArtML com diagnósticos integrais, type checker estático, debug shell interativo, stdlib de strings, LSP completo e robustez (fuzzing, property tests, CI regression detector). 71/72 itens do roadmap v0.4 — feature-complete.

1. Codegen JavaScript + Bundler

  • Novo crate crates/codegen_js — transpila AST Artcode para JavaScript ES2022.
  • Mapeamentos: letconst, funcfunction, structclass, enum → tagged union, match → if-else com bindings, spawn actor → Web Worker, performant {} → IIFE, import → ES modules.
  • Comando art build <file.art> --target js --out dist/ --sourcemap.
  • Source maps V3 com VLQ encoding — erros em runtime apontam para o .art original no DevTools.
  • --bundle: resolve imports recursivamente, emite runtime preamble JS (println, str_*, len, etc.) + todos os módulos inline em arquivo único. Output autocontido para Node.js e browser.
  • CI verifica o bundle com node a cada push (node-smoke-test).

2. Stdlib de Strings

  • 8 novos builtins: str_split, str_join, str_contains, str_starts_with, str_replace, str_slice, str_to_int, str_to_float.
  • str_slice suporta índices negativos (contagem do fim).
  • str_to_int e str_to_float retornam Result<T, String> — sem panics.

3. TTD Debug Shell

  • art debug --replay trace.artlog script.art — abre shell interativo de time-travel debugging.
  • step / step-back — avança ou recua no tempo; continue — executa até o próximo breakpoint.
  • state — exibe todas as variáveis com valores (filtrando builtins); state-at <tick> — salta para tick específico.
  • mailbox — inspeciona mailboxes e status dos atores; breakpoint <line> — pausa na linha especificada.
  • Breakpoints são persistentes entre restarts do replay.

4. Parser ArtML

  • Templates declarativos embutidos na linguagem — sem pré-processador externo.
  • Sintaxe: <div class="x">, <input value={expr} />, <button on:click={handler}>, <Counter /> (componente PascalCase), <if cond={x}>, <for item in {items} key={id}>, <slot name="header">.
  • Nenhum token novo no lexer — < em posição prefix é inequivocamente início de template (Pratt parser).
  • Codegen: templates → IIFE com document.createElement, setAttribute, addEventListener, createTextNode, createDocumentFragment.
  • Diagnósticos completos: tag sem fechamento → error; <for> sem keywarning; on:click={expr_nao_callable}lint error: not callable; componente PascalCase sem import/struct → parse error: not imported or defined.
  • 26 testes (14 parser + 10 codegen + 2 typeck).

5. Type Checker Estático

  • Novo crate crates/typeck — verificação de tipos em compile time, integrado ao pipeline art build --target js.
  • Inferência local: let x = 42x: Int rastreado no escopo sem anotação explícita.
  • Verificação de chamadas: func f(x: Int) rejeita argumento String com diagnóstico claro antes do codegen.
  • Inferência paramétrica: func identity<T>(x: T) infere T = Int na chamada com inteiro; sem anotação manual.

6. LSP — Completion, Hover, Goto-Def e Rename

  • textDocument/completion — builtins (~50), variáveis em escopo, funções, structs e enums com kind LSP correto (function=3, struct=7, enum=13, variable=6).
  • textDocument/definition — goto-def para let, funções, structs, enums e imports, incluindo arquivos não abertos no editor.
  • textDocument/rename — renomeia símbolo em todos os arquivos do workspace.
  • Hover com assinatura real de função (func f(x: Int) -> String) e campos de struct/enum.
  • textDocument/semanticTokens/full — highlight semântico (tipos, funções, variáveis).
  • Arquitetura refatorada: process_request retorna Option<Value> tornando o servidor testável sem IDE. 6 smoke tests de harness JSON.
  • Guias de configuração em docs/guides/lsp_vscode.md e docs/guides/lsp_neovim.md.

7. Robustez — Fuzzing, Property Tests e Regression Detector

  • Novo fuzz target interpreter_valid — executa o interpreter apenas em programas sem erros de parse, complementando o parser_loops existente. Ambos rodam 60s por push no CI.
  • 9 property tests de round-trip parse(format(src)) == parse(src) incluindo idempotência do formatter.
  • 2 stress tests de arena: N atores com performant {} e 100 iterações de alloc/finalize sem panics.
  • Detector de regressão no CI (scripts/perf_regression.sh): mede executed_statements/s de fib(20) contra baseline; falha se a taxa cair abaixo de 50k stmt/s.

v0.3.0

Maturidade do interpretador, novas features de linguagem e qualidade de diagnósticos.

1. Novas features de linguagem

  • impl Type { } — syntax para agrupar métodos por tipo, equivalente ao func Type.method(self) existente. Totalmente retrocompatível.
  • Generics com constraints em runtimefunc foo<T: Numeric>(x: T) valida o tipo do argumento na chamada e emite diagnóstico claro em caso de violação. Suporta Numeric, Eq, Hash e Comparable.
  • ArtValue::type_name() — reflexão de tipo em runtime disponível para todos os valores.

2. Diagnósticos com localização

  • Erros de builtins agora reportam a linha e coluna exatas do call site — antes mostravam sempre (0:0).
  • call_span propagado automaticamente a partir do token de field-access (x.unwrap(), val.ok(), etc.).
  • 81 handlers de builtin atualizados.

3. REPL melhorado

  • Exibe => valor para expressões avaliadas, sem ruído de métricas por linha.
  • Saída [metrics] e [mem] movida para modo script apenas.

4. Saúde do código

  • interpreter.rs reduzido de 6.734 → 1.715 linhas por extração de 7 módulos coesos: builtins, actors, cycle_detection, gc, exec, eval.
  • 6 unwrap() encadeados no actor scheduler substituídos por expect() descritivo.
  • Panics em I/O (aot.rs, lsp.rs, main.rs) corrigidos.

5. Documentação reorganizada

  • docs/ reorganizada em language/, internals/, guides/ e rfcs/.
  • Numeração de RFCs duplicadas corrigida (0006, 0007, 0008).
  • Roadmap reescrito refletindo o estado real de v0.2 e metas de v0.3/v0.4.

v0.2.0

Versão consolidada com runtime multicamada, segurança de memória e infraestrutura de perfil.

1. Concorrência / Atores (RPC local)

O core do modelo de atores foi estabilizado com semântica clara para envio e recebimento de mensagens.

  • spawn cria ator isolado e retorna handle seguro.
  • actor_send(actor, payload): não-bloqueante, retorna true/false por limite de mailbox.
  • actor_receive() e actor_receive_envelope(): padrões de consumo sem polling ativo.
  • Agendamento cooperativo round-robin com yield implícito entre atores.
  • Resiliência ativada: backpressure + diagnóstico de limit/overflow.

2. Performant & Arenas

Consumo controlado de memória para workloads intensivos.

  • performant { ... } ativa a arena temporária de curta duração.
  • arena_new(size), arena_with(size, fn) e arena_release expõem ciclo de vida.
  • Escape analysis identifica atribuições que violam arena scope (retorno, var externa, store global).
  • Finalizers de arena promovem objetos para heap quando necessário, com métricas de finalizer_promotions_per_arena.

3. IPC + Serialização

Transmissão binária entre processos com tipos opacos e checagens contra corrupção.

  • Schema de mensagem binária para IPC (payload + meta) em idl_schema.
  • Capability tokens move-only: evita reuso indevido e uso após free.
  • Extensão de mailbox para actor_set_mailbox_limit e retorno de status sem crash.

4. FFI seguro

Gateway exposto para C/Rust/WASM, com clareza de ownership.

  • art_handle_create_i64, art_handle_retain, art_handle_release.
  • art_handle_string_to_cstr + cache/release para strings sem leaks.
  • art_syscall_unsafe continua existindo mas com doc explicando restrições de sandbox e safety.

5. Time-Travel + PGO

Depuração determinística + fluxo de build otimizado.

  • art run --record captura checkpoints/keyframes.
  • art run --replay reproduz exatamente o estado, útil para regressão e tuning.
  • art run --gen-profile gera dados PGO; art build --release --use-profile aplica otimizações.
  • Pipeline de comparação warmup vs PGO documentada em artifacts/perf.md.

6. Atualizações de documentação e qualidade

  • Todos exemplos sincronizados em website/examples.html (49 casos principais, com variantes de histórico no repositório).
  • Checklist v0.2.0 alinhada e marcada como concluída, incluindo testes cargo test --all.
  • Correções de robustez: actor_http_runtime e escapes de performant que causavam panics resolvidos.

Checklist rápida de validação

Antes de publicar uma release, valide localmente estes comandos para manter o changelog confiável.

release-check
cargo test --all
bash scripts/devcheck.sh
bash scripts/perf_compare.sh
art run --record examples/44_ttd_keyframes.artlog examples/44_ttd_keyframes.art

v0.1.x

Fundação da linguagem com sintaxe, semântica e tooling básico.

  • Structs, enums, pattern matching com guards.
  • Loops nativos, tuplas e tratamento de erro explícito com Result e Option.
  • LSP base: autocomplete, goto-definition e rename multi-arquivo.
  • Sintaxe shell e stream pipelines integrados.
  • Prelúdio e stdlib iniciais: println, len, type_of, map/set, math e IO sandboxed.

Como contribuir no changelog

workflow
1. Atualize CHANGELOG.md com secoes Added/Changed/Fixed/Docs
2. Referencie exemplos e docs impactados
3. Rode testes e scripts de smoke
4. Atualize esta pagina com os highlights da release