Pular para o conteúdo

Comparada com outras linguagens

Python, JavaScript, Go e Rust lado a lado: sintaxe, tipos, concorrência, erros — e onde DataForge escolheu diferente.

DataForge roda sobre o CPython, e em execução se parece mais com Python do que com qualquer outra. Na escrita, as escolhas vieram de lugares diferentes — e esta tabela diz de onde, e o que ficou de fora.

DataForgePythonJavaScriptGoRust
atribuiçãox := 1x = 1let x = 1x := 1let x = 1
tiposopcionais, conferidos pelo check e em execuçãoopcionais, só por ferramentaTypeScript à parteestáticosestáticos, com dono
nulovoid, com ?? e ?.Nonenull/undefinednilOption
erromonitor/handle, e Resultado como valortry/excepttry/catchvalor de retornoResult
concorrênciathreads, laço, fibras, atores, STM, processosthreads + GIL, asynciolaço únicogoroutines + canaisthreads + async
divisão inteira~///Math.floor(a/b)/ em inteiros/ em inteiros
pipeline>> sift, >> morphiteradores
pacotesdataforge add, com lock e sha256pipnpmgo modcargo
dataforge
// o canal do Go, o ator do Erlang e o Resultado do Rust — na mesma linguagem
adopt Arcane.Laco as L
adopt Arcane.Concurrent as P
adopt Arcane.Resultado as Res

c := L.canal(1)
a := P.ator(lambda soma, v: soma + v, 0)
a.enviar(5)
assert a.parar() is 5
assert Res.ok(3).deu_certo()

O que ficou de fora, de propósito#

  • Compilação para código nativo. O interpretador compila a árvore para fechamentos do Python (1,5× a 1,8×); o teto dessa técnica é ~6,5×. Ir além exigiria sair do Python — e da dependência zero.
  • Operadores de bits. >>, | e & já têm dono (pipeline, união e interseção de tipos); as operações de bits são funções.
  • Macro que reescreve sintaxe.macro sobre a árvore, mas não uma que invente palavra nova.