Pular para o conteúdo

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, record imutável, trait, herança, private/protected que valem de verdade, propriedades get/set, métodos estáticos, sobrecarga de operadores, final e abstract com 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 @Nome com pilha, argumentos nomeados e metadados legíveis por Arcane.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.

  • handle compara por herança: handle RuntimeError pega DivisionByZeroError.
  • 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 como Internal Error que nem monitor capturava.
  • e.campos, e.nota e e.dica legíveis pelo programa.
  • dataforge erros lista o catálogo; explain aceita 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#

ComandoFaz
run, repl, watchexecutar
check, lint, fmtanalisar e formatar
crucible, testtestar
big-o, custo, profile, benchmedir
erros, explainentender um erro
new, init, infocriar projeto
add, install, pack, publishpacotes
doc, stats, fix, editoro 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.2Kiln (framework web), Arcane.Excel sem dependência, extensão do VS Code
4.1OOP completa: visibilidade, propriedades, estáticos, operadores, abstratos, generics, decoradores
4.0Records, enums, pattern matching, generators, interpolação, ternário, ??, ?., analisador estático, gerenciador de pacotes, seis ferramentas de linha de comando
3.1Módulos, relay, detecção de ciclos, stack traces
3.0Blueprints, traits, herança, monitor/handle/ensure

Bugs corrigidos que valem registro#

Os que mudaram o comportamento da linguagem, e não só uma mensagem:

SintomaCausa
private do pai recusado ao próprio paia checagem olhava o blueprint da instância, não o de quem declarou o membro
[].min() incapturávelexceção do Python subia crua, sem virar erro da linguagem
handle KeyError: engolia tudoo nome virava variável em vez de filtro
// 200, application/json virava divisãocomentário começando com número era lido como operando
// 10 — o dobro virava divisãoo travessão não marcava prosa
campos mutáveis compartilhados entre instânciaso literal do padrão era avaliado uma vez, na declaração
closures num laço viam o último valoro 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 verbososó 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.server do Python.

O plano completo está no roadmap.