FFI: chamar C
Quando uma biblioteca nativa é o único caminho — e o que custa atravessar a fronteira.
Arcane.C chama funções de bibliotecas nativas — a libc, a libm, um .so/.dylib/.dll qualquer — sem compilar nada: roda sobre o ctypes da biblioteca padrão do Python. É a porta para o que só existe em C: um driver, uma biblioteca de áudio, o código legado da empresa.
adopt Arcane.C as C
libm := C.matematica()
raiz := libm.funcao("sqrt", ["f64"], "f64")
assert raiz(2.0) bigger 1.414 and raiz(2.0) smaller 1.415| Precisa de | Use | Não FFI |
|---|---|---|
| uma biblioteca Python (numpy, pandas) | — | `adopt Python.numpy` |
| um programa de linha de comando | — | Arcane.Process |
| ler um formato binário | — | `Arcane.Estrutura` |
| uma função que só existe em C | `Arcane.C` |
Por onde seguir#
Chamar C
carregar, declarar a assinatura, chamar
Os tipos do C
qual tipo daqui para qual de lá, e o long que muda de tamanho
Textos e char*
codificação, NULL e quem libera
Erros e errno
o -1, o NULL e o ENOENT
Ponteiros e memória crua
alocar, andar e liberar
Callbacks
o C chamando uma ação DataForge
Achar a biblioteca
Linux, macOS e Windows
Segurança na fronteira
o que corrompe memória, e como evitar
Custo de uma chamada
quando vale atravessar, e quando não
FFI: o mapa
tudo o que existe, e o que não