Pular para o conteúdo

Migração 3.x → 4.0

O que mudou, o que quebrou e como atualizar.

O que quebra#

`//` agora é comentário por padrão#

Esta é a única mudança que pode alterar o comportamento de código existente:

dataforge
x := a // b        # 3.x: divisão inteira · 4.0: COMENTÁRIO
x := 7 // 2        # 3.x e 4.0: divisão (dígito depois)
x := total // len(xs)  # 3.x e 4.0: divisão (chamada depois)

A correção é mecânica: troque por ~/ onde você quer divisão. O dataforge fmt já reimprime nessa grafia.

Três palavras deixaram de ser reservadas#

cluster, vault e range viraram funções chamáveis. Isso libera nomes, não quebra nada.

Três palavras novas foram reservadas#

record, enum e when. Se você usava alguma como nome de variável, precisa renomear.

bash
dataforge check src/     # aponta todos os casos

O que foi corrigido#

Comportamentos que estavam errados no 3.x e agora funcionam. Se seu código dependia do bug, ele muda:

O queAntesAgora
yield dentro de monitorera engolido pelo handleretorna da ação
monitor sem handleengolia o errodeixa o erro subir
2 ** 3 ** 264512 — associa à direita
-2 ** 24-4
f(1) com 2 paramsligava o resto a voiderro de aridade
adopt X.Inexistentedevolvia vault vazioImportError_
str(obj)ignorava toStringusa toString
defer com erronão rodavaroda em todo caminho
transações SQLiterollback não desfaziafunciona

O que é novo#

O roteiro de migração#

bash
# 1. rodar a análise estática — ela aponta quase tudo
dataforge check src/

# 2. formatar — normaliza ~/ e o resto
dataforge fmt src/

# 3. rodar os testes
dataforge test

# 4. rodar o linter, para o que sobrou
dataforge lint src/

Na prática, a maioria dos projetos precisa apenas do passo 1 e de trocar alguns // por ~/.

Aproveitando o novo#

Nada obriga a reescrever. Mas alguns padrões ficam bem mais curtos:

dataforge
# antes
out "Ola, " + nome + "! Voce tem " + str(idade) + " anos."
# agora
out $"Ola, {nome}! Voce tem {idade} anos."

# antes
given config isnt void and config["porta"] isnt void:
    porta := config["porta"]
otherwise:
    porta := 8080
# agora
porta := config?.porta ?? 8080

# antes
resultado := []
cycle n in nums:
    given n % 2 is 0:
        resultado.append(n * n)
# agora
resultado := [n * n cycle n in nums given n % 2 is 0]