Guia 46 de 53
Tipos entre linguagens
Inteiros exatos, records copiados, objetos vivos, callbacks e conversão assíncrona.
Nesta página
Assinaturas extern usam tipos Zolo; corpos usam a linguagem escolhida. As tabelas descrevem funções inline. Imports de módulos nativos usam os tipos reais da declaração, que podem diferir desses defaults.
Tipos escalares¶
int é um inteiro assinado de 64 bits. Para um parâmetro nativo de 32 bits, use i32. Java e Kotlin usam literais 1L para long/Long; JavaScript e TypeScript usam 1n para bigint. Um number importado aceita um int Zolo apenas quando a conversão é exata e retorna float. Overflow gera erro. nil corresponde a void, Unit, (), None ou ausência de retorno conforme o provider. Java/Kotlin não possuem mapeamento inline de inteiros unsigned.
| Provider | Zolo int / i64 |
Zolo float / f64 |
Zolo str |
Zolo bool |
|---|---|---|---|---|
| C# | long |
double |
string |
bool |
| Python | int |
float |
str |
bool |
| JavaScript | bigint |
number |
string |
boolean |
| TypeScript | bigint |
number |
string |
boolean |
| Java | long |
double |
String |
boolean |
| Kotlin | Long |
Double |
String |
Boolean |
| C | int64_t |
double |
const char * |
bool |
| C++ | int64_t |
double |
std::string |
bool |
| Rust | i64 |
f64 |
String |
bool |
| Go | int64 |
float64 |
string |
bool |
Valores opcionais e coleções¶
T? representa um valor ou nil. Chaves de maps tipados nessa fronteira são strings: use #{str: T}. Coleções e DTOs copiados não compartilham mutações com o original; todos os elementos precisam de conversões suportadas. C requer adapters explícitos para coleções gerais; [str] usa zolo_strings. Strings C são terminadas em NUL e rejeitam NUL embutido; C++, Rust e Go o preservam. Não retenha views emprestadas após a chamada nem retorne ponteiros para buffers locais.
| Provider | T? |
[T] |
#{str: T} |
|---|---|---|---|
| C# | Valor/referência nullable | T[] |
Dictionary<string, T> |
| Python | Valor / None |
list; tuple results are copied too |
dict |
| JavaScript / TypeScript | Value or null |
Array nativo | Record com chaves string |
| Java | Boxed nullable primitive or nullable reference | Native array | Map<String, T>; primitive values are boxed |
| Kotlin | Native T? |
Array<T> |
Map<String, T> |
| C | Adapter explícito zolo_value |
[str] uses zolo_strings; other lists need an adapter |
Adapter explícito zolo_value |
| C++ | Adapter explícito zolo_value |
std::vector<T> |
std::map<std::string, T> |
| Rust | Option<T> |
Vec<T> |
std::collections::HashMap<String, T> |
| Go | *T |
[]T |
map[string]T |
Records e objetos vivos¶
Structs Zolo declarados viram DTOs copiados nos providers gerenciados, Rust e Go. Go gera campos exportados e tags zolo preservando os nomes originais. Structs Rust/Go importados precisam de campos públicos ou exportados. Classes importadas de C#, Python, JS/TS, Java/Kotlin e C++ preservam identidade nativa; construtores usam .new. Um DTO copiado e um objeto vivo são contratos diferentes. Objetos C++ não atravessam módulos compilados independentemente por conversão implícita.
Callbacks e async¶
Declare async e aguarde com await. C/C++/Rust/Go emprestam callbacks pela duração da chamada; não os armazene nem invoque de uma thread arbitrária. Providers gerenciados usam leases e o scheduler dono. Cancelamento é cooperativo e não interrompe trabalho nativo arbitrário à força. Java exige uma interface funcional explícita para callbacks com mais de dois parâmetros. Result<T,E> importado de Rust e (T,error) de Go expõem o sucesso e propagam falhas pelo canal de erros.
Adapters explícitos¶
Ponteiros, templates abertos, funções variádicas e ownership não suportado precisam de um wrapper concreto. Any em C/C++ usa zolo_value. Any inline em Rust/Go não fornece um layout nativo e é rejeitado. Alocações wire retornadas manualmente exigem allocator compatível e ZOLO_OWNED. A interface extern C# tipada preserva inteiros; a antiga dotnet.eval/.call usa transporte double para long/ulong e pode perder precisão.
Integrações com linguagens de programação · Dependências e locks
DOCS / OPINIÃO
Esta página deixou alguma pergunta?
Conte onde a explicação perdeu você. A documentação também faz parte da experiência da linguagem.