Saltar a contenido

Tipos

Cada tipo que cruza la frontera tiene una regla, en ambos sentidos. Un tipo sin regla es un diagnóstico en tiempo de generación que señala el fichero, línea y columna exactos, nunca una sorpresa en ejecución.

Tipo V Tipo Python Notas
bool bool Cualquier objeto al entrar; True/False al salir
i8, i16, i32, int, i64, isize int Con comprobación de rango: fuera de rango lanza OverflowError
u8, u16, u32, u64, usize int Negativo o fuera de rango lanza OverflowError
f32, f64 float También acepta un int
rune int El punto de código
string str UTF-8
[]u8 bytes Cualquier objeto bytes-like al entrar, sin copiarlo
[]T list Cualquier secuencia al entrar (lista, tupla); una list al salir
[N]T list Exactamente N ítems al entrar; una list al salir
?T T o None none es None, en ambos sentidos
map[K]T, K escalar o string dict Claves escalares o str; un dict nuevo al salir
(A, B, …), como resultado tuple Un retorno multivalor
voidptr cualquier objeto Prestado; la referencia es tuya
vcraft.PyObj (resultado) cualquier objeto Propia; la referencia va al llamador
&T, con T un @[vc_class] T Referencia a instancia; acepta una subclase
un enum del proyecto ese enum.IntEnum Los miembros conservan nombre y valor
un struct plano del proyecto dict Los nombres de campo como claves
void, !void None
!T T, o lanza Ver Errores y pánicos

Anchura de los escalares

Un entero estrecho se comprueba al entrar: t_i8(128) lanza OverflowError, y también un campo asignado fuera de rango. Esa es la diferencia entre una regla de marshalling y un cast.

Los composites anidan

Un contenedor anida, en ambos sentidos, así que ?[]int, [][]int, map[string][]int y un campo de struct de cualquiera de ellos cruzan como list/dict/None anidados. Un contenedor devuelto se boxea elemento a elemento; un parámetro se lee con las mismas reglas.

Enums

Un enum de V que declara el proyecto pasa a ser un enum.IntEnum del mismo nombre, unido al módulo. Un valor vuelve como el miembro, y un entero que no es miembro lanza ValueError al entrar. Los valores de los miembros se leen de la fuente, así que un = n explícito se respeta.

Structs planos

Un struct que no es @[vc_class] pasa a ser un dict de sus campos. Un campo se boxea con su propia regla y se lee por nombre, así que una clave ausente es KeyError y un tipo de campo equivocado TypeError. Un campo sin regla, a cualquier profundidad, es un diagnóstico.

Referencias a instancias

Un &T donde T es un @[vc_class] pasa la instancia misma, no una copia: un parámetro entrega a la función V un puntero al estado vivo de la instancia, y un resultado se empareja de vuelta con la instancia a la que apunta. Ver Clases y propiedades.