DataForge é uma linguagem interpretada de propósito geral, com lexer, parser, analisador estático e interpretador próprios — escritos em Python, sem uma única dependência externa em tempo de execução.
passe o cursor sobre uma carta
Onde outras linguagens dizem if, for, class e try, o DataForge diz given, cycle, blueprint e monitor. Não é troca de nome: é a decisão de nomear a intenção. O resto — analisador, formatador, linter, runner de testes, gerador de documentação — veio junto, porque uma linguagem sem ferramenta é só uma gramática.
Análise estática com sugestão de correção, antes de a primeira linha rodar.
$ dataforge check pedido.dfpedido.df:9:5: erro: Action 'desconto' is missing argument(s): taxasugestão: Call it as desconto(p, taxa)pedido.df:10:5: erro: Record 'Pedido' has no field 'totall'sugestão: Did you mean 'total'?✗ 2 erro(s), 0 aviso(s)
Formatador idempotente e treze regras de higiene, com modo --check para a esteira.
$ dataforge fmt torto.dfformatado torto.df1 de 1 arquivo(s) reescritos- action soma(a,b):- x:=a+b+ action soma(a, b):+ x := a + b
Runner de testes, console interativo e gerador de documentação, tudo no mesmo binário.
$ dataforge test soma_test.df✗ soma_test.df (2/3)FALHOU test_falha_de_propositoExpected 5, got 42 passaram, 1 falharam em 1 arquivo(s) — 0.02s
Todo trecho aqui é um arquivo .df que roda: o código e a saída foram capturados da execução, não escritos à mão.
Referência da linguagemsteady TAXA := 0.1
action total(itens: Cluster) -> Float:
soma := 0.0
cycle item in itens:
soma += item
yield soma * (1 + TAXA)
carrinho := [29.9, 15.5, 62.0]
out $"total com taxa: {round(total(carrinho), 2)}"
given total(carrinho) bigger 100:
out "frete gratis"
otherwise:
out "frete cobrado"SAÍDA
total com taxa: 118.14 frete gratis
steady, action com tipos, cycle e given.
34 módulos, 1132 símbolos, nenhum pacote a instalar. Cada nome abaixo tem página própria na documentação, com a assinatura extraída do código-fonte.
Arcane.Math
Matemática, álgebra linear e estatística básica.
51 símbolos
Arcane.Text
Manipulação de texto, formatação, tabelas e conversão de caixa.
58 símbolos
Arcane.IO
Arquivos, diretórios, JSON, CSV e shell.
27 símbolos
Arcane.Regex
Expressões regulares e validadores brasileiros (CPF, CNPJ, telefone).
32 símbolos
Arcane.Collections
Estruturas de dados e algoritmos: pilha, fila, grafo, união-busca.
63 símbolos
Arcane.Functional
Utilitários funcionais: composição, lentes, Maybe/Either, transdutores.
56 símbolos
Arcane.Data
DataFrames, séries e transformações tabulares.
13 símbolos
Arcane.Analytics
Análise de dados: estatística, regressão, clustering e gráficos ASCII.
65 símbolos
Arcane.Database
Banco de dados SQLite: tabelas, consultas, migrações e importação.
39 símbolos
Arcane.Serialization
JSON, CSV, INI, TOML, XML e conversões entre eles.
26 símbolos
Arcane.Cortex
Aprendizado de máquina: regressão, árvore, floresta, k-NN, Naive Bayes, k-médias e PCA.
25 símbolos
Arcane.OS
Sistema operacional, ambiente, disco e processo atual.
42 símbolos
Arcane.Process
Execução de processos externos, com stdout, stderr e código de saída.
15 símbolos
Arcane.Time
Datas, horas, durações e cronometragem.
54 símbolos
Arcane.Http
Servidor HTTP: rotas, middleware, JSON, arquivos estáticos.
17 símbolos
Arcane.Web
Cliente HTTP, URL encoding e JSON.
11 símbolos
Arcane.Async
Promessas, filas, agendamento e execução concorrente.
46 símbolos
Divididos em 26 módulos, do primeiro out até escrever um interpretador. Cada um termina com um assert — e a suíte inteira roda a cada mudança na linguagem, então nenhum deles pode apodrecer.
378
testes
190
exercícios
42
exemplos
286
arquivos .df
números conferidos na última execução da suíte