Pular para o conteúdo

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#

ItemNo DataForgeOnde
binary compatibilitya superfície é o contrato, e dataforge abi diz o que quebrouCompatibilidade
versioningo veredito de semver que a mudança exige — antes era escolhido a olhoCompatibilidade
symbol namingo relay decide o que é público; o mapa diz de onde vem cada nomeSímbolos
calling conventionsreais, mas só na fronteira com o C: ctypes aplica a ABI da plataformaFFI
struct layoutC.estrutura dá tamanho, alinhamento e deslocamento de verdade — inclusive o paddingChamar C
enum representationC.enumeracao: inteiro com nome, que é o que atravessaChamar C
platform-specific ABIvem do ctypes, que segue a do sistemaFFI
register / stack conventionsnão se aplica: não há registrador alcançável

73 · Linker#

ItemNo DataForgeOnde
symbol resolutionresolucao.py — onde mora o módulo de um adopt, e a única cópia dessa regra; o mapa é o relatório delaSímbolos
dynamic linkingC.carregar abre .so, .dylib e .dll em tempo de execução — é dlopen de verdadeFFI
"linkar" dependênciasforge_modules/, forge.lock e a resolução com semver do gerenciadorPacotes
detecção de cicloerro do check, com a cadeia inteira na mensagem — busca em largura, para achar o ciclo mais curtoCarga
static linking, relocations, sectionsnão se aplica: não há passo de ligação, e nada é relocado
ELF, PE/COFF, Mach-Oos binários do release são esses formatos — produzidos pelo PyInstaller, não pelo DataForgeDownload
linker scriptsnão se aplica

74 · Executáveis#

ItemNo DataForgeOnde
executableso release constrói para quatro plataformas e roda os exercícios pelo binário em cada umaDownload
static librarieso análogo é o pacote: dataforge pack produz um tarball reprodutível (mtime=0, uid/gid zerados), senão o sha256 mudaria a cada empacotamentoPacotes
dynamic librariesdo lado de consumo: Arcane.CFFI
entry pointsforge.toml declara a entrada; dataforge run sem arquivo a usaforge.toml
debug symbolso análogo é a informação de posição: linha, coluna e span em todo nó e todo erro — é ela que desenha a setaErros
strippingnã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, sectionsnão se aplica

75 · WebAssembly#

ItemNo DataForgeOnde
WASM target, WASI como saídanão existe — e a diferença entre compilar para e rodar em está escritaWebAssembly
rodar em WASMfunciona, pelo Pyodide: é rodar o CPython em WebAssemblyWebAssembly
host bindingso análogo existe: a ponte para o Python e o FFI com CPonte
threads no navegadornão, e o perfil navegador diz por quê (SharedArrayBuffer e isolamento de origem)Portabilidade
linear memory, imports/exports, SIMD, component modelnão se aplica sem módulo WASMWebAssembly

76 · Targets especializados#

AlvoResposta
serveré o alvo padrão, e onde tudo foi medido
desktop / CLIsim: quatro plataformas no release, com instalador gráfico no Windows
WebAssemblyrodando o CPython, não compilando — ver acima
serverlesso perfil funcao existe e diz o que não sobrevive: processo, thread longa, biblioteca nativa
mobilenã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 / kernelnão se aplica — ver o mapa de hardware
game enginesnã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 computingpela 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.