Guía 46 de 53
Tipos entre lenguajes
Enteros exactos, records copiados, objetos vivos, callbacks y conversión asíncrona.
En esta página
Las firmas extern usan tipos Zolo; los cuerpos usan el lenguaje elegido. Las tablas describen funciones inline. Los imports de módulos nativos usan los tipos reales de la declaración, que pueden diferir de estos defaults.
Tipos escalares¶
int es un entero con signo de 64 bits. Para un parámetro nativo de 32 bits usa i32. Java y Kotlin usan literales 1L para long/Long; JavaScript y TypeScript usan 1n para bigint. Un number importado acepta int solo si la conversión es exacta y devuelve float. El desbordamiento genera error. nil corresponde a void, Unit, (), None o ausencia de retorno según el provider. Java/Kotlin no tienen mapeo inline de enteros 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 opcionales y colecciones¶
T? representa un valor o nil. Las claves de maps tipados en este límite son cadenas: usa #{str: T}. Las colecciones y DTOs copiados no comparten mutaciones con el original; todos los elementos necesitan conversiones admitidas. C requiere adaptadores explícitos para colecciones generales; [str] usa zolo_strings. Las cadenas C terminan en NUL y rechazan NUL incrustado; C++, Rust y Go lo conservan. No retengas views prestadas tras la llamada ni devuelvas punteros a buffers locales.
| Provider | T? |
[T] |
#{str: T} |
|---|---|---|---|
| C# | Valor/referencia nullable | T[] |
Dictionary<string, T> |
| Python | Valor / None |
list; tuple results are copied too |
dict |
| JavaScript / TypeScript | Value or null |
Array nativo | Record con claves 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 | Adaptador explícito zolo_value |
[str] uses zolo_strings; other lists need an adapter |
Adaptador explícito zolo_value |
| C++ | Adaptador 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 y objetos vivos¶
Los structs Zolo declarados se convierten en DTOs copiados en los providers gestionados, Rust y Go. Go genera campos exportados y tags zolo que conservan los nombres originales. Los structs Rust/Go importados necesitan campos públicos o exportados. Las clases importadas de C#, Python, JS/TS, Java/Kotlin y C++ conservan identidad nativa; los constructores usan .new. Un DTO copiado y un objeto vivo son contratos distintos. Los objetos C++ no cruzan módulos compilados independientemente por conversión implícita.
Callbacks y async¶
Declara async y espera con await. C/C++/Rust/Go prestan callbacks durante la llamada; no los almacenes ni invoques desde una thread arbitraria. Los providers gestionados usan leases y el scheduler dueño. La cancelación es cooperativa y no interrumpe trabajo nativo arbitrario por la fuerza. Java necesita una interfaz funcional explícita para callbacks con más de dos parámetros. Result<T,E> importado de Rust y (T,error) de Go exponen el éxito y propagan fallos por el canal de errores.
Adaptadores explícitos¶
Punteros, templates abiertos, funciones variádicas y propiedad no admitida necesitan un wrapper concreto. Any en C/C++ usa zolo_value. Any inline en Rust/Go no proporciona un layout nativo y se rechaza. Las asignaciones wire devueltas manualmente necesitan allocator compatible y ZOLO_OWNED. La interfaz extern C# tipada conserva enteros; la antigua dotnet.eval/.call transporta long/ulong como double y puede perder precisión.
Integraciones con lenguajes de programación · Dependencias y locks
DOCS / OPINIÓN
¿Esta página dejó alguna pregunta?
Cuéntanos dónde te perdió la explicación. La documentación también forma parte de la experiencia del lenguaje.