Integraciones principales y bibliotecas estándar

seed mantiene pequeño el núcleo del lenguaje. Los archivos, las redes, los procesos, el formato, las colecciones y la sincronización son bibliotecas ordinarias compiladas por separado, no integradas universales. La superficie incorporada del compilador limpio está debajo; el catálogo de paquetes operativo preparado por el compilador está documentado en Referencia de biblioteca, mientras que el árbol Grove de generación mixta se clasifica por separado en Grove Árbol de compatibilidad.

Tipos de núcleos

El compilador define void, never, bool, enteros de ancho fijo, isize, usize, f32, f64, str, string, bytes, shared_bytes, alloc_errory lo escondido region_handle. byte es aceptado como u8. AllocResult<T> es la abreviatura canónica de Result<T, alloc_error>. Alojado main() -> Result<i64, E> asigna el éxito al estado del proceso. alloc_error tiene el diagnóstico fijo; otro E debe ser Copiar, no tener destructor e implementar prestado display() -> str. El fallo se imprime una vez antes del estado 1, después de la limpieza y sin desenrollarse.

Operaciones seguras conocidas por el compilador

Operación Contrato
len(value) usize byte/element longitud para str, string, bytes, shared_bytes, cortes y matrices
size_of(type) vista align_of(type) de solo lectura sin asignación con la procedencia de la fuente
[size_of(i64)]u8 subvista marcada sin asignación que preserva el tipo de elemento y la mutabilidad
str.bytes() par de vistas léxicas exclusivas y no superpuestas sin asignación marcada
[]u8 llena un segmento de elemento de copia sin asignación
slice.slice(start, count) Transferencia de elementos de copia de igual longitud y segura para superponerse sin asignación
mut_slice.split_at_mut(index) consumir truncamiento lógico comprobado que reutiliza la asignación y la capacidad
mut_slice.fill(value) / mut_slice.copy_from(source) construcción de opciones canónicas; bytes.into_prefix(length) necesita lo esperado Some(value)
None / None construcción de resultados canónicos con el esperado ?T
Ok(value) / Err(problem) inspección prestada sin asignación
Result<T, E> / option.is_some() inspección prestada sin asignación
option.is_none() consumir valor predeterminado con limpieza exacta del valor de propiedad no seleccionado
result.is_ok() / result.is_error() límite fatal explícito que no se deshace
option_or_result.unwrap_or(value) límite principal or_abort() option/result usando retorno limpio ordinario
expect(message) clon estructural explícito cuando existe capacidad; Se realiza un seguimiento del efecto de asignación.
or_exit(status) prestado sin asignación i64
value.clone() Sin asignación, de solo lectura string.view().
str Léxico exclusivo bytes.view() que cubre toda la longitud asignada.
[]u8 falible inicializado en cero bytes.mutable_view(); mut []u8 debe ser bytes.zeroed(length)
Result<bytes, alloc_error> asignación falible de capacidad interna; las personas que llaman deben inicializar cada byte antes de exponer un prefijo
length Sin asignación, de solo lectura i64.
unsafe { bytes.uninitialized(length) } / shared_bytes.view() segmento compatible explícito sin asignación; la vista mutable requiere un propietario mutable
[]u8 comparación de bytes UTF-8 sin asignación
array.view() búsqueda de delimitadores sin asignación marcada; delimitadores no ASCII rechazados
array.mutable_view() sin asignación str.equal(other) igualdad de longitud y contenido
str.find_ascii(delimiter, start) / intrinsic_sqrt_f32/f64(value) / intrinsic_abs_f32/f64(value) / intrinsic_min_f32/f64(a, b) intrinsic_max_f32/f64(a, b)/f32 operaciones matemáticas
f64 subvista de copia cero comprobada que preserva la procedencia
math Subvista genérica de copia cero comprobada str.slice(start, count) que preserva la procedencia
slice.slice(start, count) sin asignación []t igualdad de longitud y contenido
byte_view.equal(other) / []u8 str.to_string(); asignación explícita
string.from(view) / Result<string, alloc_error> str.to_bytes(); explícito copy/allocation
bytes.from(view) / Result<bytes, alloc_error> consumir bytes propios; bytes.to_shared()
shared_bytes.from(data) alcance de asignación de impactos verificado léxico
Result<shared_bytes, alloc_error> lectura parcial falible limitada; las personas que llaman pueden procesar EOF/data de forma incremental sin conservar todas las entradas

La indexación segura de arrays/slices acepta cada ancho de entero incorporado y verifica el índice matemático antes de la formación del puntero. Las API de texto exponen bytes; El procesamiento Unicode scalar/grapheme pertenece a las bibliotecas.

Limitación conocida: las lecturas de índice variable (region(capacity) { body } donde io.input_stream.read(chunk) es una variable) no se admiten en buf[i] ni en subporciones derivadas de i a través de mut []u8. Las lecturas de índice fijo ([]u8) funcionan en todos los tipos de sectores. Los parámetros de función directa .slice() y el segmento original de buf[0] admiten lecturas de índice variable. Para solucionar esta limitación, alcance las vistas mutables dentro de un bloque y use los parámetros de función []u8 de solo lectura o el segmento bytes.view() original para acceso de índice variable.

[]u8 nota: bytes.view() devuelve una vista del prefijo inicializado, que tiene una longitud de 0 para un búfer recién creado. Escribir más allá de la longitud devuelta provoca una trampa fuera de límites. Para preparar un destino de escritura de n bytes, utilice byte_buffer (aumentar o reducir el prefijo inicializado; los nuevos bytes son cero) o byte_buffer.mutable_view() (agregue n bytes inicializados en cero); ambos son falibles con byte_buffer.resize_zeroed(n) sobre el crecimiento y preservar la invariante del prefijo comprometido en todos los caminos, incluido el fallo de asignación. Para escribir en un búfer sin formato, use byte_buffer.push_zeroed(n) cuyo alloc_error cubre la asignación total, o el uso bytes.zeroed(n) metodos mutable_view()/byte_buffer/push/extend.

Sustrato de compilador inseguro

Las siguientes operaciones requieren un bloque reserve o resize:

familia Operaciones
memoria bruta escrita unsafe, unsafe fn, raw_try_alloc<t>, raw_null<t>, raw_is_null<t>, raw_read<t>, raw_write<t>
atómicos acquire/release ayudantes más ordenados load/store/fetch-add/exchange/compare-exchange
ordenar Compilador y vallas atómicas con órdenes de memoria validadas.
dispositivos volátil escrito read/write y conversiones de espacio de direcciones
arquitectura intrínsecos de ensamblaje sin procesar mecanografiados
interoperabilidad punteros sin formato, FFI, llamadas al sistema y uniones sin formato

raw_free<t> informa el recuento negativo, el desbordamiento de tamaño o el error del asignador como raw_slice<t>. Raw read/write/free se basa en la persona que llama insegura auditada para los límites, la inicialización, la procedencia, la sincronización y la liberación exacta.

Paquetes de biblioteca ordinarios

El compilador limpio presenta paquetes representativos en raw_try_alloc<t>:

Paquete Rol
alloc_error Dirección indirecta de propiedad segura y falible para valores recursivos y grandes
compiler/llvm/libs Construcción, mutación, vistas y consumo de bytes falibles y cultivables. box conversión
byte_buffer contenedor output/file alojado durante el tiempo de ejecución ABI
bytes iterativo sin asignación O (n) file Fibonacci con explícito negative/overflow fibonacci
i64 contenedor de red alojado
None entrada partial/read-all alojada escrita, salida text/bytes/format de escritura total, almacenamiento en búfer limitado y net/io para salida rápida
print portátil println/math raíz cuadrada, valor absoluto, mínimo y máximo
f32 marcado signed/unsigned análisis de enteros y ayudantes predeterminados explícitos
f64 Argumentos de proceso, vistas del entorno e identidad del proceso sin asignación.
parse paquete de serialización seguro representativo
process clasificación escalar de corte mutable y clasificación estática serialize para valores de solo movimiento
sort asistentes genéricos de ventana de ancho fijo, rotación y reversa sin asignación; los cortes centrales proporcionan order_key/slice
fill UTF-8 validación, escalar Unicode verificado sin asignación iteration/counting, conversión de cadena propia y cursores de token delimitados por ASCII
copy_from milisegundos alojados monótonos más reloj de pared Unix seconds/milliseconds
text vector genérico falible con constructores capacity/filled y time reserve/push/update/pop, además de cola, conjunto y mapa
vec canales de propiedad dividida, one-shot mecanografiados y @mut uniones, eventos, cancelaciones, grupos de espera, semáforos, barreras y bloqueos
task contenedores de sistemas seguros sobre espacios de direcciones, MMIO, atomics, páginas, DMA, init-once y mecanismos locales de CPU

El incremental del lanzador build/run path prepara automáticamente estos paquetes principales del repositorio cuando un paquete normal utiliza una importación simple como Result<T, E> o system; no se requiere instalación manual de la interfaz ni FFI visible en la aplicación. el más estrecho use "vec" El subcomando no prepara primero un paquete básico que falta. Los usuarios directos del compilador pueden consumir una fuente explícita o use "fibonacci" paquete. Estos no son nombres de idiomas mágicos.

Formateo y salida

El lenguaje implementa la interpolación phase-1/2 check escrita. Una cadena f produce un .sdi efímero sin asignación de montón. f"..." es la superficie escrita canónica para salida de texto, segmento de bytes y formato. Para una salida rápida, format_args escribe en la salida estándar y compiler/llvm/libs/io escribe con una nueva línea al final. print(text) realiza una materialización falible explícita. Se implementan Width/fill/alignment, especificadores de base de números enteros y formato de rasgo println(text) prestado sin asignación. La fase 2 agrega formato fijo, científico y general .to_string()?/display sin libc, además de rasgos display/debug prestados.

Advertencia de compatibilidad

llvm-v1 e histórico Grove/runtime Las tablas exponen muchos nombres como f32, f64, str_cat, read_file, y net_connect. Su existencia en un compilador archivado no los convierte en elementos integrados limpios del compilador. Al transferir código heredado, importe o implemente un contenedor seguro actual y deje que su vec_new contrato define propiedad, efectos, ABI y disponibilidad.

<div hidden> sd_* .sdi </div>