Versões
O que mudou, quando, e por quê.
DataForge segue versionamento semântico: MAIOR.MENOR.CORREÇÃO. Enquanto a linguagem está em 1.x, mudança que quebra código existente sobe o número do meio — e vem com o caminho de migração.
1.0.0 — o lançamento#
A primeira versão pública reúne tudo o que foi construído. O que ela traz:
A linguagem#
- 81 palavras reservadas, lexer com INDENT/DEDENT, parser recursivo descendente, AST tipada, analisador estático e interpretador de árvore — todos próprios, em Python puro, sem dependência de runtime.
- Orientação a objetos completa:
blueprint,recordimutável,trait, herança,private/protectedque valem de verdade, propriedadesget/set, métodos estáticos, sobrecarga de operadores,finaleabstractcom contrato conferido na declaração. - Pattern matching estrutural com
match/point/when/default, sobre literais, sequências, vaults, records e membros de enum. - Generators preguiçosos (
stream action+emit), inclusive infinitos. - Pipelines
>> sift / morph / distill, compreensões, spread, desestruturação, interpolação$"{x}",??e?.. - Decoradores
@Nomecom pilha, argumentos nomeados e metadados legíveis porArcane.Meta. - Generics
<T>aceitos pelo analisador — documentam a relação entre entrada e saída.
Erros: 177 códigos#
De 10 para 177, em 15 famílias. As classes e o catálogo nascem da mesma tabela — antes eram duas listas escritas à mão, e elas divergiam.
handlecompara por herança:handle RuntimeErrorpegaDivisionByZeroError.handle KeyError:agora filtra. Antes virava nome de variável e o bloco engolia qualquer erro em silêncio — com 177 tipos isso deixa de ser detalhe.- Exceção do Python vira erro da linguagem.
[].min()subia comoInternal Errorque nemmonitorcapturava. e.campos,e.notaee.dicalegíveis pelo programa.dataforge erroslista o catálogo;explainaceita o código ou o nome da classe.
Crucible — o framework de testes#
Dez palavras contextuais, 59 matchers, dublês, teste por propriedade com contraexemplo encolhido, benchmark com p95 e quatro formatos de relatório. Ver Crucible.
Forge — cinco bancos de dados#
PostgreSQL, MySQL, MariaDB, MongoDB, Redis e SQLite — cada driver falando o protocolo por socket, sem dependência. Mais construtor de consultas que nunca põe valor no texto do SQL, e ORM com relações que custam duas consultas em vez de N+1. Ver banco de dados.
Kiln — o framework web#
Dez palavras próprias, roteamento, middleware, sessão, templates com escape automático. Ver Kiln.
Análise de complexidade#
dataforge big-o diz a classe de cada ação e o porquê, distinguindo divisão e conquista de recursão exponencial. Ver Big-O.
Ferramentas#
| Comando | Faz |
|---|---|
run, repl, watch | executar |
check, lint, fmt | analisar e formatar |
crucible, test | testar |
big-o, custo, profile, bench | medir |
erros, explain | entender um erro |
new, init, info | criar projeto |
add, install, pack, publish | pacotes |
doc, stats, fix, editor | o resto |
Ecossistema#
- 22 módulos
Arcane.*na biblioteca padrão, com 753 símbolos - 20 pacotes no registro, escritos em DataForge
- Extensão do VS Code com 103 snippets, Big-O no editor, custo de import e painel de bancos
- 200 exercícios e 42 exemplos, todos rodando
- 891 testes automatizados
O caminho até aqui#
As versões de desenvolvimento, e o que cada uma acrescentou:
| O que entrou | |
|---|---|
| 4.2 | Kiln (framework web), Arcane.Excel sem dependência, extensão do VS Code |
| 4.1 | OOP completa: visibilidade, propriedades, estáticos, operadores, abstratos, generics, decoradores |
| 4.0 | Records, enums, pattern matching, generators, interpolação, ternário, ??, ?., analisador estático, gerenciador de pacotes, seis ferramentas de linha de comando |
| 3.1 | Módulos, relay, detecção de ciclos, stack traces |
| 3.0 | Blueprints, traits, herança, monitor/handle/ensure |
Bugs corrigidos que valem registro#
Os que mudaram o comportamento da linguagem, e não só uma mensagem:
| Sintoma | Causa |
|---|---|
private do pai recusado ao próprio pai | a checagem olhava o blueprint da instância, não o de quem declarou o membro |
[].min() incapturável | exceção do Python subia crua, sem virar erro da linguagem |
handle KeyError: engolia tudo | o nome virava variável em vez de filtro |
// 200, application/json virava divisão | comentário começando com número era lido como operando |
// 10 — o dobro virava divisão | o travessão não marcava prosa |
| campos mutáveis compartilhados entre instâncias | o literal do padrão era avaliado uma vez, na declaração |
| closures num laço viam o último valor | o escopo era reaproveitado mesmo quando o corpo o capturava |
profile somava 207% | recursão contada duas vezes; agora mede tempo próprio |
-v nunca ligava o modo verboso | só flags com -- eram reconhecidas; -v caía entre os alvos |
erros de sintaxe diziam <stdin> | o nome do arquivo não chegava ao lexer e ao parser |
Cada um tem teste de regressão. A suíte só cresce.
O que ainda não existe#
Declarado, para não haver surpresa:
- LSP e depurador — a extensão do VS Code analisa e roda, mas não há autocompletar sensível a contexto nem ponto de parada.
- Bytecode — é interpretador de árvore. Rápido o suficiente para o que a linguagem faz, e não para computação numérica pesada.
- Sincronização entre threads — sem mutex; a coordenação é por
channel. - Exaustividade no `match` — ele não avisa se um membro de enum ficou de fora.
- `<T extends Comparable>` — generics documentam, não restringem.
- WebSocket e HTTP/2 no Kiln — ele roda sobre o
http.serverdo Python.
O plano completo está no roadmap.