Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Bindings de Linguagem

Bindings multi-linguagem expõem o PAEBIRU SDK em ecossistemas além de Rust, preservando garantias de segurança (PQC), privacidade (ZK) e resiliência (GALS).

Detalhes por linguagem em crates/bindings/<lang>/README.md. Esta página é a visão de referência consolidada.

Status por linguagem

LinguagemTecnologiaStatusDiretório
C / C++Opaque Handles (cbindgen)🟢 Estávelcrates/bindings/c/
C# / .NET 8P/Invoke + IDisposable🟢 Estávelcrates/bindings/csharp/
Dart / FlutterDart FFI (iOS/Android/Linux/macOS/Windows)🟢 Estávelcrates/bindings/dart/
Gocgo (feature zk opcional)🟢 Estávelcrates/bindings/go/
Java / Android / KotlinJNI + Gradle (AutoCloseable)🟢 Estávelcrates/bindings/java/
Lua 5.4mlua (vendored ou módulo)🟢 Estávelcrates/bindings/lua/
PHP 8.1+ext-php-rs🟢 Estávelcrates/bindings/php/
PythonPyO3 / Maturin (pip)🟢 Estávelcrates/bindings/py/
Rextendr (Tokio runtime local)🟢 Estávelcrates/bindings/r/
RubyMagnus / rb-sys (Bundler + Rake)🟢 Estávelcrates/bindings/ruby/
Swift / iOS / macOSUniFFI / XCFramework🟢 Estávelcrates/bindings/swift/
TypeScript / JSWASM via wasm-bindgen (npm/yarn)🟢 Estávelcrates/bindings/ts/
ZigZig build system + C ABI🟡 Experimental (Novo!)crates/bindings/zig/

Todos os 12 primeiros bindings são estáveis. Não há binding stub nesta lista ou em estado experimental fora dessa lista — releases seguem SDK_RELEASE_GUIDE.md.

Padrão arquitetônico — Opaque Handle & Zero-Copy

Todos os bindings (exceto WASM, que usa import/export direto) seguem o Opaque Handle Pattern e a estratégia Zero-Copy Cognitive para máxima performance:

  1. Opaque Handle: O lado Rust expõe um handle opaco (ponteiro sem campos visíveis). O cliente da linguagem-alvo passa o handle de volta para cada operação. Isto preserva a ownership de Rust e evita que erros de memória atravessem a FFI.
  2. Zero-Copy Cognitive: Para estados de alta frequência (Camada 9), o SDK evita a serialização JSON. As funções de consulta operam diretamente sobre o handle e retornam valores primitivos ou snapshots rápidos, minimizando alocações no heap da linguagem hospedeira.
  3. Gerenciamento de Memória: A liberação é explícita via função paebiru_free_* correspondente.
// Exemplo de consulta cirúrgica Zero-Copy
Layer9Handle* l9 = paebiru_l9_get_handle(ctx);
double temp = paebiru_l9_get_temperature(l9); // Sem alocação/cópia
bool aligned = paebiru_l9_is_aligned(l9);      // Consulta direta
paebiru_l9_free(l9);

Wrappers idiomáticos (IDisposable em C#, AutoCloseable em Java, finalizer em Python, with-statement etc.) envolvem o ciclo new → free para o usuário final.

API comum (13 linguagens)

Toda binding implementa, no mínimo:

OperaçãoEquivalente Rust
get_status()PaebiruClient::get_status()
get_metabolism()PaebiruClient::get_metabolism()
submit_compute_job(payload, suite?)PaebiruClient::submit_compute_job(...)
prove_range(value, bits) (feature zk)PaebiruZkClient::prove_range(...)
verify_proof(proof) (feature zk)PaebiruZkClient::verify_proof(...)

A API do Context (Ingest → Metabolize → Excrete) também é exposta em todos os bindings — permite escrever plasmídeos fora de Rust em linguagens com runtime WASM (TypeScript via WASM, Python via PyO3 + WASI, etc.).

Async em linguagens não-Rust

Todas as bindings que executam I/O (submit_compute_job, get_status) usam um runtime Tokio interno ao binding. Detalhes:

  • JS/TSasync/await nativo via WASM Promises.
  • Python — opção entre API sync (bloqueante) e API asyncio (via PyO3 0.21). Veja PYTHON_ASYNC_PATTERNS.md.
  • Swiftasync/await mapeado via UniFFI.
  • C# / Dart / Kotlin — Task/Future nativos.
  • C / Go / Lua / PHP / R / Ruby / Zig — APIs síncronas; runtime Tokio bloqueia internamente.

Racional completo em ASYNC_DESIGN_RATIONALE.md.

Compilação

# Todos os bindings (faz parte do alvo Make principal)
make build

# Binding específico
rtk cargo build -p paebiru-py --release            # Python
rtk cargo build -p paebiru-ts --release            # TypeScript/WASM
rtk cargo build -p paebiru-py --no-default-features  # macOS sem extension-module

Distribuição

BindingCanal
PythonPyPI (pip install paebiru)
TS/JSnpm / yarn (target browser + Node.js)
SwiftSwift Package Manager / XCFramework
JavaMaven Central (artefato Gradle)
.NETNuGet
Dartpub.dev
RubyRubyGems
LuaLuaRocks
PHPPECL (planejado); hoje via Composer + ext local
RCRAN (planejado); hoje via R CMD INSTALL
GoGo modules (go get github.com/silvanoneto/paebiru/.../go)
C / C++.h + lib*.{a,so,dylib} distribuídos com cada release
Zigbuild.zig + build.zig.zon integrando via C ABI

Veja SDK_RELEASE_GUIDE.md para o procedimento de release.

Cross-references