Pular para o conteúdo

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.

45-extern-rust.zolo
Playground
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.

45-extern-rust-cargo.zolo
Playground
// 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.

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enpt-br