ABI, ligador e alvos: o mapa
Item por item das partes 18 e 19 da referência Deep Tech — ABI, linker, executáveis, WebAssembly e targets especializados.
Duas partes que parecem inteiramente "não se aplica" — e não são. O que transfere delas não é o binário: é o contrato e a restrição de ambiente, que existem em qualquer linguagem que se distribua.
72 · ABI#
| Item | No DataForge | Onde |
|---|---|---|
| binary compatibility | a superfície é o contrato, e dataforge abi diz o que quebrou | Compatibilidade |
| versioning | o veredito de semver que a mudança exige — antes era escolhido a olho | Compatibilidade |
| symbol naming | o relay decide o que é público; o mapa diz de onde vem cada nome | Símbolos |
| calling conventions | reais, mas só na fronteira com o C: ctypes aplica a ABI da plataforma | FFI |
| struct layout | C.estrutura dá tamanho, alinhamento e deslocamento de verdade — inclusive o padding | Chamar C |
| enum representation | C.enumeracao: inteiro com nome, que é o que atravessa | Chamar C |
| platform-specific ABI | vem do ctypes, que segue a do sistema | FFI |
| register / stack conventions | não se aplica: não há registrador alcançável | — |
73 · Linker#
| Item | No DataForge | Onde |
|---|---|---|
| symbol resolution | resolucao.py — onde mora o módulo de um adopt, e a única cópia dessa regra; o mapa é o relatório dela | Símbolos |
| dynamic linking | C.carregar abre .so, .dylib e .dll em tempo de execução — é dlopen de verdade | FFI |
| "linkar" dependências | forge_modules/, forge.lock e a resolução com semver do gerenciador | Pacotes |
| detecção de ciclo | erro do check, com a cadeia inteira na mensagem — busca em largura, para achar o ciclo mais curto | Carga |
| static linking, relocations, sections | não se aplica: não há passo de ligação, e nada é relocado | |
| ELF, PE/COFF, Mach-O | os binários do release são esses formatos — produzidos pelo PyInstaller, não pelo DataForge | Download |
| linker scripts | não se aplica |
74 · Executáveis#
| Item | No DataForge | Onde |
|---|---|---|
| executables | o release constrói para quatro plataformas e roda os exercícios pelo binário em cada uma | Download |
| static libraries | o análogo é o pacote: dataforge pack produz um tarball reprodutível (mtime=0, uid/gid zerados), senão o sha256 mudaria a cada empacotamento | Pacotes |
| dynamic libraries | do lado de consumo: Arcane.C | FFI |
| entry points | forge.toml declara a entrada; dataforge run sem arquivo a usa | forge.toml |
| debug symbols | o análogo é a informação de posição: linha, coluna e span em todo nó e todo erro — é ela que desenha a seta | Erros |
| stripping | não se aplica, e a razão é boa: tirar a informação de posição não economizaria nada que importe, e a mensagem de erro é metade do valor da linguagem | |
| object files, relocations, sections | não se aplica |
75 · WebAssembly#
| Item | No DataForge | Onde |
|---|---|---|
| WASM target, WASI como saída | não existe — e a diferença entre compilar para e rodar em está escrita | WebAssembly |
| rodar em WASM | funciona, pelo Pyodide: é rodar o CPython em WebAssembly | WebAssembly |
| host bindings | o análogo existe: a ponte para o Python e o FFI com C | Ponte |
| threads no navegador | não, e o perfil navegador diz por quê (SharedArrayBuffer e isolamento de origem) | Portabilidade |
| linear memory, imports/exports, SIMD, component model | não se aplica sem módulo WASM | WebAssembly |
76 · Targets especializados#
| Alvo | Resposta |
|---|---|
| server | é o alvo padrão, e onde tudo foi medido |
| desktop / CLI | sim: quatro plataformas no release, com instalador gráfico no Windows |
| WebAssembly | rodando o CPython, não compilando — ver acima |
| serverless | o perfil funcao existe e diz o que não sobrevive: processo, thread longa, biblioteca nativa |
| mobile | não há porta. Existe CPython em Android e iOS, e nada disso foi testado aqui — dizer "sim" sem ter rodado seria inventar |
| embedded / bare-metal / kernel | não se aplica — ver o mapa de hardware |
| game engines | não se aplica: o laço de renderização precisa de milissegundos previsíveis, e um interpretador de árvore com GC não os dá |
| HPC / scientific computing | pela ponte: adopt Python.numpy traz a conta vetorizada de verdade, e P.map_processos usa mais de um núcleo. O que o DataForge não faz é ser o laço numérico |
O resumo honesto#
Das duas partes, a 18 rendeu mais do que parecia: ABI não é sobre bytes, é sobre contrato — e o contrato existe aqui, quebra do mesmo jeito e agora tem ferramenta que o confere. A 19 rendeu o perfil de restrições, que responde a pergunta real ("roda no navegador?") sem prometer um backend que não existe.