Pular para o conteúdo

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#

ItemNo DataForgeOnde
instalação, toolchaininstalador POSIX, PowerShell, Docker, pipInstalação
compiladornão existe: é interpretador de árvore, com compilação para fechamentos (1,5× a 1,8×)Arquitetura
gerenciador de versõesnão existe como dfup: a venv de ~/.dataforge e o pip fazem o papelInstalação
primeiro projeto, estruturadataforge new com 9 modelos; forge.tomlProjetos
compilar e executardataforge run, --time, --debugCLI
debug básicodataforge debug no terminal; dataforge dap no editor, com watchpointEditor e depurador
LSP: autocomplete, ir-para, rename, diagnostics, code actionstodos, em lsp.pyLSP
integração com IDE e terminaldataforge editor (VS Code e derivados), dataforge replEditor

2 · Sintaxe e tipos básicos#

ItemNo DataForgeOnde
literais, identificadores, variáveisx := 1Variáveis
constantessteady PI := 3.14Variáveis
shadowing, escopo léxicoshadow x := 2; given publica o nome, cycle nãoVariáveis
inteiros, ponto flutuante, booleanosInteger, Float, Boolean — e Number para os dois primeirosTipos
caracteresnão existe tipo próprio: um caractere é um texto de tamanho 1Tipos
strings, bytesString com $"{}"; Bytes e Arcane.BytesTextos
tuplas(1, "a"), com Tuple<A, B> conferindo posição e tamanhoTuplas
arrays, slicesCluster com xs[1:3] e xs[::-1]Coleções
structs, enumsrecord (imutável, igualdade estrutural) e enum com valor e métodoRecords e enums
maps, setsVault e Set, com conteúdo tipadoColeções
Option/Maybevoid com ?? e ?.; e Talvez para quando void é ambíguoResultado e Talvez
ResultArcane.Resultado: ok/falha com mapear, entao, todosResultado e Talvez
inferência de tiposo analisador infere para acusar, não para exigir: a anotação é opcionalAnotações
conversões, casting segurocast x as Integer, str/int/float/bool; R.tentar para o que pode falharTipos
operadores, precedência, expressões, blocos19 operadores; ~/ é divisão inteiraOperadores
pattern matching básicomatch / point / defaultPattern matching

3 · Controle de fluxo#

ItemNo DataForgeOnde
if / elsegiven / orif / otherwise — e o ternário a given c otherwise bCondicionais
match / switchmatch com point, when e default; exaustividade avisadaPattern matching
for / while / loopcycle … from … to … step, cycle … in, persist, perform … persistLaços
break / continue / returnhalt / skip / yieldLaços
guard clausesguard cond otherwise: …Condicionais
pattern matching avançado, desestruturação, guardstipo, sequência, vault, record, enum; a, b := t; whenPattern matching

4 · Funções#

ItemNo DataForgeOnde
declaração, parâmetros, retornoaction nome(a, b) -> Tipo: com yieldAções
argumentos nomeados, valores padrãof(1, b := 5); action f(a, b := 2)Ações
funções genéricasaction f<T>(x: T) -> T, com <T extends X> cobradoGenerics
alta ordem, closures, lambdasação como valor; lambda x: expr e lambda a, b => exprAções
recursãoteto de mil quadros; yield f(…) vira salto e não tem tetoAções
funções inlinenão existe: o ganho vem da compilação para fechamentos, que já elimina o despachoArquitetura
funções const e comptimenão existem: o que é resolvido antes de rodar é a prova do check sobre literais, e não a execuçãoAnálise estática
funções unsafenão existe: não há ponteiro cru nem aritmética de endereço para isolar
assíncronas, callbacksasync action com await (concorrência de E/S de verdade); ação como valorConcorrência

5 · Módulos e ferramentas#

ItemNo DataForgeOnde
módulos, imports, exports, namespacesadopt, adopt {a as b} from M, relay; apelido com asMódulos
pacotes e gerenciadordataforge add/install/remove/search/pack/publish, com semver e lockfilePacotes
manifesto, dependências, lockfileforge.toml e forge.lockPacotes
workspacesnão existe: um forge.toml por projeto; o caminho relativo (adopt ./lib) cobre o monorepo simplesMódulos
testes unitários e de integraçãocrucible/trial, dataforge test, com cobertura e --minimoTestes
benchmarksbench no Crucible e Arcane.BenchTestes
documentação automáticadataforge docCLI
formatador, linter, diagnósticosdataforge fmt (idempotente), lint, check com 177 códigosFormatação
profiling, debuggingdataforge profile (tempo próprio por ação), debug, dapComplexidade

6 · Paradigmas#

ItemNo DataForgeOnde
procedural, funcional, orientado a objetosos três, sem escolher um: pipeline >>, blueprint, ação soltaPrimeiros passos
traits, implementaçõestrait com padrão, extends, tipo e constante associados, contractTraits
generics, composição<T> nas cinco declarações; composição por trait e por campoGenerics
imutabilidade, funções purasrecord, freeze, Tuple, steady; pureza é convenção, não imposiçãoRecords
tratamento de erros, propagaçãomonitor/handle/ensure, trigger, propagate, retry, deferErros
Result, OptionArcane.Resultado e TalvezResultado e Talvez
erros customizadosa 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çãoErros

7 a 11 · O sistema de tipos avançado#

ItemNo DataForgeOnde
funções, structs, enums e traits genéricosaction 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çãoGenerics
inferência genéricao argumento decide; o parâmetro solto aceita tudo, por decisãoGenerics
monomorfização, especializaçãonão existem: não há geração de código; o caminho para variar por tipo é overloadSobrecarga
tipos dependentes, indexadosrefinamento (where) e argumento numérico (Vetor<3>), que a regra enxergaGenerics
GADTs, provas formaisnão existem: o where é verificado (literal no check, valor na fronteira), e não provadoTipos nomeados
invariantes verificáveisinvariant em blueprint, expects/promises em ação, refinamento em tipoContratos
type-level programming, type functionsalias genérico (type Par<T> := Cluster<T>) e const genericGenerics
const genericsVetor<3>: o argumento é um valor, ligado na regra do tipoGenerics
metadados de tipos, reflexãoArcane.Tipos: espécie, base, regra, satisfaz, forma, camposReflexão
validação em tempo de compilaçãoo check prova sobre literais: tipo-refinado, tipo-uniao, tipo-opacoTipos nomeados
union, intersection typesString \| Integer e Serial & Ordenavel, com nome ou direto na anotaçãoTipos nomeados
opaque types, newtypesopaque type Cpf := String where …: nominal, só nasce validadoTipos nomeados
type aliases, tipos abstratostype Id := Integer; abstract blueprint e trait para o abstratoTipos nomeados
encapsulamento de representaçãoo tipo opaco, com .valor como única porta de saídaTipos nomeados
garantias de ABI, compatibilidade binária, type erasurenão se aplicam: não há binário nem layout fixo — a anotação é conferência em execuçãoVisão geral do sistema de tipos
associated types, constants, functionstype Item := Any e steady LIMITE := 3 no trait; ação estática no blueprintTraits
implementações condicionaisnão existem: o mais próximo é augment (acrescentar a um blueprint) e overloadAugment
trait inheritance, trait objectstrait B extends A; um parâmetro anotado com o trait é o trait objectTraits
dynamic dispatch, static dispatch, vtablesdespacho dinâmico sempre, com cache de método por blueprint; não há vtable declarávelTraits

Como ler esta tabela#

Três respostas diferentes aparecem aqui, e elas não são a mesma coisa:

RespostaSignifica
o nome no DataForgeexiste, e o vocabulário é outro — given por if, record por struct
não existefoi decidido não ter, e o motivo está na linha: quase sempre porque a peça pertence a uma linguagem compilada
não se aplicaa pergunta não tem sentido aqui: ABI e layout binário não existem num interpretador de árvore