Fundamentos e tipos: o mapa
Item por item das partes 1 e 2 da referência Deep Tech, cruzado com o DataForge: o que existe e onde está, o que tem outro nome, e o que não existe por decisão.
Esta página cruza as duas primeiras partes de uma referência de linguagem madura — fundamentos e sistema de tipos avançado — com o que o DataForge tem hoje. Cada linha aponta para onde está o exemplo que roda, e o que não existe está dito com o motivo.
1 · O caminho feliz#
| Item | No DataForge | Onde |
|---|---|---|
| instalação, toolchain | instalador POSIX, PowerShell, Docker, pip | Instalação |
| compilador | não existe: é interpretador de árvore, com compilação para fechamentos (1,5× a 1,8×) | Arquitetura |
| gerenciador de versões | não existe como dfup: a venv de ~/.dataforge e o pip fazem o papel | Instalação |
| primeiro projeto, estrutura | dataforge new com 9 modelos; forge.toml | Projetos |
| compilar e executar | dataforge run, --time, --debug | CLI |
| debug básico | dataforge debug no terminal; dataforge dap no editor, com watchpoint | Editor e depurador |
| LSP: autocomplete, ir-para, rename, diagnostics, code actions | todos, em lsp.py | LSP |
| integração com IDE e terminal | dataforge editor (VS Code e derivados), dataforge repl | Editor |
2 · Sintaxe e tipos básicos#
| Item | No DataForge | Onde |
|---|---|---|
| literais, identificadores, variáveis | x := 1 | Variáveis |
| constantes | steady PI := 3.14 | Variáveis |
| shadowing, escopo léxico | shadow x := 2; given publica o nome, cycle não | Variáveis |
| inteiros, ponto flutuante, booleanos | Integer, Float, Boolean — e Number para os dois primeiros | Tipos |
| caracteres | não existe tipo próprio: um caractere é um texto de tamanho 1 | Tipos |
| strings, bytes | String com $"{}"; Bytes e Arcane.Bytes | Textos |
| tuplas | (1, "a"), com Tuple<A, B> conferindo posição e tamanho | Tuplas |
| arrays, slices | Cluster com xs[1:3] e xs[::-1] | Coleções |
| structs, enums | record (imutável, igualdade estrutural) e enum com valor e método | Records e enums |
| maps, sets | Vault e Set, com conteúdo tipado | Coleções |
| Option/Maybe | void com ?? e ?.; e Talvez para quando void é ambíguo | Resultado e Talvez |
| Result | Arcane.Resultado: ok/falha com mapear, entao, todos | Resultado e Talvez |
| inferência de tipos | o analisador infere para acusar, não para exigir: a anotação é opcional | Anotações |
| conversões, casting seguro | cast x as Integer, str/int/float/bool; R.tentar para o que pode falhar | Tipos |
| operadores, precedência, expressões, blocos | 19 operadores; ~/ é divisão inteira | Operadores |
| pattern matching básico | match / point / default | Pattern matching |
3 · Controle de fluxo#
| Item | No DataForge | Onde |
|---|---|---|
if / else | given / orif / otherwise — e o ternário a given c otherwise b | Condicionais |
match / switch | match com point, when e default; exaustividade avisada | Pattern matching |
for / while / loop | cycle … from … to … step, cycle … in, persist, perform … persist | Laços |
break / continue / return | halt / skip / yield | Laços |
| guard clauses | guard cond otherwise: … | Condicionais |
| pattern matching avançado, desestruturação, guards | tipo, sequência, vault, record, enum; a, b := t; when | Pattern matching |
4 · Funções#
| Item | No DataForge | Onde |
|---|---|---|
| declaração, parâmetros, retorno | action nome(a, b) -> Tipo: com yield | Ações |
| argumentos nomeados, valores padrão | f(1, b := 5); action f(a, b := 2) | Ações |
| funções genéricas | action f<T>(x: T) -> T, com <T extends X> cobrado | Generics |
| alta ordem, closures, lambdas | ação como valor; lambda x: expr e lambda a, b => expr | Ações |
| recursão | teto de mil quadros; yield f(…) vira salto e não tem teto | Ações |
funções inline | não existe: o ganho vem da compilação para fechamentos, que já elimina o despacho | Arquitetura |
funções const e comptime | não existem: o que é resolvido antes de rodar é a prova do check sobre literais, e não a execução | Análise estática |
funções unsafe | não existe: não há ponteiro cru nem aritmética de endereço para isolar | — |
| assíncronas, callbacks | async action com await (concorrência de E/S de verdade); ação como valor | Concorrência |
5 · Módulos e ferramentas#
| Item | No DataForge | Onde |
|---|---|---|
| módulos, imports, exports, namespaces | adopt, adopt {a as b} from M, relay; apelido com as | Módulos |
| pacotes e gerenciador | dataforge add/install/remove/search/pack/publish, com semver e lockfile | Pacotes |
| manifesto, dependências, lockfile | forge.toml e forge.lock | Pacotes |
| workspaces | não existe: um forge.toml por projeto; o caminho relativo (adopt ./lib) cobre o monorepo simples | Módulos |
| testes unitários e de integração | crucible/trial, dataforge test, com cobertura e --minimo | Testes |
| benchmarks | bench no Crucible e Arcane.Bench | Testes |
| documentação automática | dataforge doc | CLI |
| formatador, linter, diagnósticos | dataforge fmt (idempotente), lint, check com 177 códigos | Formatação |
| profiling, debugging | dataforge profile (tempo próprio por ação), debug, dap | Complexidade |
6 · Paradigmas#
| Item | No DataForge | Onde |
|---|---|---|
| procedural, funcional, orientado a objetos | os três, sem escolher um: pipeline >>, blueprint, ação solta | Primeiros passos |
| traits, implementações | trait com padrão, extends, tipo e constante associados, contract | Traits |
| generics, composição | <T> nas cinco declarações; composição por trait e por campo | Generics |
| imutabilidade, funções puras | record, freeze, Tuple, steady; pureza é convenção, não imposição | Records |
| tratamento de erros, propagação | monitor/handle/ensure, trigger, propagate, retry, defer | Erros |
Result, Option | Arcane.Resultado e Talvez | Resultado e Talvez |
| erros customizados | a hierarquia é fixa (177 códigos): o que muda é a mensagem, ou o detalhe de um Resultado — um tipo de erro por caso faria handle virar adivinhação | Erros |
7 a 11 · O sistema de tipos avançado#
| Item | No DataForge | Onde |
|---|---|---|
| funções, structs, enums e traits genéricos | action f<T>, record R<T>, enum E<T>, trait T<X>, blueprint B<T> | Generics |
| restrições, bounds, type constraints | <T extends Number>, cobrado no check (generic-bound) e na execução | Generics |
| inferência genérica | o argumento decide; o parâmetro solto aceita tudo, por decisão | Generics |
| monomorfização, especialização | não existem: não há geração de código; o caminho para variar por tipo é overload | Sobrecarga |
| tipos dependentes, indexados | refinamento (where) e argumento numérico (Vetor<3>), que a regra enxerga | Generics |
| GADTs, provas formais | não existem: o where é verificado (literal no check, valor na fronteira), e não provado | Tipos nomeados |
| invariantes verificáveis | invariant em blueprint, expects/promises em ação, refinamento em tipo | Contratos |
| type-level programming, type functions | alias genérico (type Par<T> := Cluster<T>) e const generic | Generics |
| const generics | Vetor<3>: o argumento é um valor, ligado na regra do tipo | Generics |
| metadados de tipos, reflexão | Arcane.Tipos: espécie, base, regra, satisfaz, forma, campos | Reflexão |
| validação em tempo de compilação | o check prova sobre literais: tipo-refinado, tipo-uniao, tipo-opaco… | Tipos nomeados |
| union, intersection types | String \| Integer e Serial & Ordenavel, com nome ou direto na anotação | Tipos nomeados |
| opaque types, newtypes | opaque type Cpf := String where …: nominal, só nasce validado | Tipos nomeados |
| type aliases, tipos abstratos | type Id := Integer; abstract blueprint e trait para o abstrato | Tipos nomeados |
| encapsulamento de representação | o tipo opaco, com .valor como única porta de saída | Tipos nomeados |
| garantias de ABI, compatibilidade binária, type erasure | não se aplicam: não há binário nem layout fixo — a anotação é conferência em execução | Visão geral do sistema de tipos |
| associated types, constants, functions | type Item := Any e steady LIMITE := 3 no trait; ação estática no blueprint | Traits |
| implementações condicionais | não existem: o mais próximo é augment (acrescentar a um blueprint) e overload | Augment |
| trait inheritance, trait objects | trait B extends A; um parâmetro anotado com o trait é o trait object | Traits |
| dynamic dispatch, static dispatch, vtables | despacho dinâmico sempre, com cache de método por blueprint; não há vtable declarável | Traits |
Como ler esta tabela#
Três respostas diferentes aparecem aqui, e elas não são a mesma coisa:
| Resposta | Significa |
|---|---|
| o nome no DataForge | existe, e o vocabulário é outro — given por if, record por struct |
| não existe | foi decidido não ter, e o motivo está na linha: quase sempre porque a peça pertence a uma linguagem compilada |
| não se aplica | a pergunta não tem sentido aqui: ABI e layout binário não existem num interpretador de árvore |