Pular para o conteúdo

Mais que uma sintaxe diferente

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.

Testes passando
1012
Exercícios verificados
216
Dependências no runtime
nenhuma

DataForge é uma linguagem completa: analisada, verificada e interpretada por código próprio.

passe o cursor sobre uma carta

Nenhuma linguagem dizia o que a gente queria dizer então escrevemos a nossa.

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.

Verificar

Análise estática com sugestão de correção, antes de a primeira linha rodar.

dataforge check
$ dataforge check pedido.df
 
pedido.df:9:5: erro: Action 'desconto' is missing argument(s): taxa
sugestã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)

Padronizar

Formatador idempotente e treze regras de higiene, com modo --check para a esteira.

dataforge fmt
$ dataforge fmt torto.df
formatado torto.df
1 de 1 arquivo(s) reescritos
 
- action soma(a,b):
- x:=a+b
+ action soma(a, b):
+ x := a + b

Provar

Runner de testes, console interativo e gerador de documentação, tudo no mesmo binário.

dataforge test
$ dataforge test soma_test.df
 
✗ soma_test.df (2/3)
FALHOU test_falha_de_proposito
Expected 5, got 4
 
2 passaram, 1 falharam em 1 arquivo(s) — 0.02s

Escreva com o vocabulário da intenção.

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 linguagem
steady 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.

A biblioteca Arcane vem junto, e é feita com a biblioteca padrão do Python.

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.

216 exercícios que rodam

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