18 · Módulos
Rust com extern
Funções Rust tipadas, callbacks e dependências Cargo travadas.
Nesta página
Importe rust do plugin de mesmo nome. Uma função Zolo tipada vira um ponto de
entrada Rust compilado. Chame como qualquer outra função. Estes exemplos precisam
do CLI e do plugin Rust instalado.
Preserve inteiros exatos, importe uma função pública Rust e aguarde um future Rust.
use plugin rust::{rust}
extern rust fn exact(value: int) -> int {
value
}
extern rust fn upper(value: str) -> str {
value.to_uppercase()
}
extern rust async fn later(value: int) -> int {
async { value + 1 }.await
}
extern rust from "./rust_fixtures/math.rs" use {add}
print(exact(9007199254740993)) // expected: 9007199254740993
print(upper("hello Rust")) // expected: HELLO RUST
print(add(left: 20, right: 22)) // expected: 42
print(await later(41)) // expected: 42
Requer a CLI/host do Zolo — abra no playground ou rode localmente.
int corresponde a i64, float a f64, str a String,
bytes a Vec<u8>, arrays a Vec<T> e valores anuláveis a Option<T>.
Structs com campos públicos e mapas com chave string atravessam a ponte como dados
copiados. Objetos com identidade persistente, métodos com receiver, exports
genéricos e assinaturas unsafe precisam de um adaptador de função livre concreto.
Expressões nativas capturam variáveis Zolo visíveis. Informe o tipo esperado quando o código Zolo ao redor não permitir inferi-lo:
use plugin rust::{rust}
let value = 40
let answer: int = extern rust { value + 2 }
print(answer)
Para capturar uma variável Zolo em uma macro de formatação, use
extern rust { format!("{value}", value = value) }. Um nome mencionado apenas
dentro de uma string não cria uma captura. Parâmetros de uma função extern
tipada também aceitam a captura implícita de formatação do Rust.
Pacotes Cargo
Declare serde_json uma vez e use diretamente em uma função extern.
// Prepare with zolo install or opt into zolo run ... --install=auto.
use plugin rust::{rust}
extern rust deps {
"serde_json" = "1.0.145"
}
extern rust fn answer() -> int {
let value: serde_json::Value = serde_json::from_str(r#"{"answer":42}"#).unwrap();
value["answer"].as_i64().unwrap()
}
print(answer()) // expected: 42
Requer a CLI/host do Zolo — abra no playground ou rode localmente.
Selecione as features globalmente para o provider:
extern rust deps {
"serde" = {
version: "1.0.228",
features: ["derive"],
default_features: false,
}
}
Em um projeto, a declaração correspondente fica no manifesto:
[foreign.rust.dependencies]
serde = { version = "1.0.228", features = ["derive"], default_features = false }
Execute zolo install main.zolo antes de um projeto com instalação manual.
Cargo resolve o grafo e copia as fontes dos pacotes para um ambiente isolado.
A compilação usa seu Cargo.lock exato com --locked --offline. As políticas
comuns --offline e --frozen também se aplicam. Build scripts e proc macros
selecionados por uma dependência podem executar durante a compilação explícita;
a análise do editor os mantém desabilitados.
Callbacks, erros e distribuição
Um parâmetro fn(int) -> int vira uma closure Rust válida durante a chamada.
Ela pode voltar ao Zolo, incluindo chamadas Rust aninhadas. Não armazene o callback
emprestado nem o chame de outra thread nativa.
extern rust async fn compila uma função async real e a adapta para um Future
Zolo. O provider fornece um executor pequeno da biblioteca padrão; um reactor
Tokio ou outro contexto específico precisa de um wrapper explícito.
O cancelamento fecha a entrega de callbacks e resultados e não interrompe
instruções nativas arbitrárias. Panics com unwind e falhas Result<T, E> viram
erros Zolo com informações do fonte autoral.
A preparação precisa de rustc ou Cargo quando há pacotes.
Selecione com ZOLO_RUSTC e ZOLO_CARGO. As consultas nativas do editor usam
rust-analyzer via ZOLO_RUST_ANALYZER, preservam texto não salvo e não executam
inicializadores autorais. Os artefatos mantêm código de máquina e snapshots do
fonte; VM, native e LLVM executam com plugins dinâmicos, embutidos ou estáticos
após remover os fontes e o toolchain Rust.
Os artefatos pertencem ao OS e arquitetura de compilação. A execução hospedada
não está disponível em wasm-aot. A validação atual cobre Windows x64.
panic=abort, corrupção de memória nativa e encerramento explícito do processo
mantêm o comportamento nativo.
Veja também