Principais bibliotecas integradas e padrão

seed mantém o núcleo da linguagem pequeno. Arquivos, redes, processos, formatação, coleções e sincronização são bibliotecas comuns compiladas separadamente, e não integradas universais. A superfície integrada do compilador limpo está abaixo; o catálogo de pacotes operacionais do compilador está documentado em Library Reference, enquanto a árvore Grove de geração mista é classificada separadamente em Grove Compatibility Tree.

Tipos principais

O compilador define void, never, bool, inteiros de largura fixa, isize, usize, f32, f64, str, string, bytes, shared_bytes, alloc_error, e o oculto region_handle. byte é aceito como u8. AllocResult<T> é a abreviação canônica para Result<T, alloc_error>. Hospedado main() -> Result<i64, E> mapeia o sucesso para o status do processo. alloc_error possui diagnóstico fixo; outro E deve ser cópia, não ter destruidor e implementar emprestado display() -> str. A falha é impressa uma vez antes do status 1, após a limpeza e sem desenrolar.

Operações seguras conhecidas pelo compilador

Operação Contrato
len(value) usize byte/element comprimento para str, string, bytes, shared_bytes, fatias e matrizes
size_of(type) visualização align_of(type) somente leitura, livre de alocação e com a origem da origem
[size_of(i64)]u8 subvisão livre de alocação verificada, preservando o tipo e a mutabilidade do elemento
str.bytes() verificado par livre de alocação de visualizações lexicais exclusivas e não sobrepostas
[]u8 preenche uma fatia do elemento Copy sem alocação
slice.slice(start, count) Transferência de elemento de cópia de comprimento igual e segura sobreposição sem alocação
mut_slice.split_at_mut(index) consumindo truncamento lógico verificado que reutiliza a alocação e capacidade
mut_slice.fill(value) / mut_slice.copy_from(source) construção de opção canônica; bytes.into_prefix(length) necessidades esperadas Some(value)
None / None construção de resultado canônico com esperado ?T
Ok(value) / Err(problem) inspeção de empréstimo sem alocação
Result<T, E> / option.is_some() inspeção de empréstimo sem alocação
option.is_none() consumindo padrão com limpeza exata do valor de propriedade não selecionado
result.is_ok() / result.is_error() limite fatal não desenrolado explícito
option_or_result.unwrap_or(value) limite principal or_abort() option/result usando retorno limpo comum
expect(message) clone estrutural explícito quando existe capacidade; o efeito de alocação é rastreado
or_exit(status) emprestado sem alocação i64
value.clone() livre de alocação somente leitura string.view()
str lexical exclusivo bytes.view() cobrindo todo o comprimento alocado
[]u8 falível inicializado com zero bytes.mutable_view(); mut []u8 deve ser bytes.zeroed(length)
Result<bytes, alloc_error> alocação falível de capacidade interna; os chamadores devem inicializar cada byte antes de expor um prefixo
length livre de alocação somente leitura i64
unsafe { bytes.uninitialized(length) } / shared_bytes.view() fatia compatível sem alocação explícita; visão mutável requer um proprietário mutável
[]u8 comparação de bytes UTF-8 sem alocação
array.view() pesquisa de delimitador livre de alocação verificada; delimitadores não-ASCII rejeitados
array.mutable_view() igualdade de comprimento e conteúdo str.equal(other) livre de alocação
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 operações matemáticas
f64 subvisão de cópia zero verificada preservando a procedência
math subvisão genérica verificada de cópia zero str.slice(start, count) preservando a proveniência
slice.slice(start, count) igualdade de comprimento e conteúdo []t livre de alocação
byte_view.equal(other) / []u8 str.to_string(); alocação 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 próprios; bytes.to_shared()
shared_bytes.from(data) escopo de alocação de colisão verificado lexicalmente
Result<shared_bytes, alloc_error> leitura parcial falível limitada; os chamadores podem processar EOF/data incrementalmente sem reter todas as entradas

A indexação segura de arrays/slices aceita cada largura inteira integrada e verifica o índice matemático antes da formação do ponteiro. APIs de texto expõem bytes; O processamento Unicode scalar/grapheme pertence às bibliotecas.

Limitação conhecida: leituras de índice variável (region(capacity) { body } onde io.input_stream.read(chunk) é uma variável) não são suportadas em buf[i] ou em subfatias derivadas de i via mut []u8. As leituras de índice fixo ([]u8) funcionam em todos os tipos de fatia. Os parâmetros diretos da função .slice() e a fatia original de buf[0] suportam leituras de índice variável. Para contornar essa limitação, escopo de visualizações mutáveis ​​dentro de um bloco e use parâmetros de função []u8 somente leitura ou a fatia bytes.view() original para acesso de índice variável.

[]u8 nota: bytes.view() retorna uma visualização do prefixo inicializado, que tem comprimento 0 para um buffer recém-criado. Escrever além do comprimento retornado causa uma armadilha fora dos limites. Para preparar um destino de gravação de n bytes, use byte_buffer (aumentar ou diminuir o prefixo inicializado; novos bytes são zero) ou byte_buffer.mutable_view() (anexar n bytes inicializados com zero); ambos são falíveis com byte_buffer.resize_zeroed(n) no crescimento e preservar a invariante do prefixo comprometido em todos os caminhos, incluindo falha de alocação. Para escrever em um buffer bruto, use byte_buffer.push_zeroed(n) cujo alloc_error cobre a alocação total ou o uso bytes.zeroed(n) métodos mutable_view()/byte_buffer/push/extend.

Substrato do compilador inseguro

As seguintes operações requerem um bloco reserve ou resize:

Família Operações
memória bruta digitada unsafe, unsafe fn, raw_try_alloc<t>, raw_null<t>, raw_is_null<t>, raw_read<t>, raw_write<t>
atômicos acquire/release ajudantes mais ordenados load/store/fetch-add/exchange/compare-exchange
encomendar compilador e cercas atômicas com ordens de memória validadas
dispositivos digitou read/write volátil e conversões de espaço de endereço
arquitetura intrínsecos de assembly brutos digitados
interoperabilidade ponteiros brutos, FFI, syscalls e uniões brutas

raw_free<t> relata contagem negativa, estouro de tamanho ou falha no alocador como raw_slice<t>. Raw read/write/free depende do chamador inseguro auditado para limites, inicialização, proveniência, sincronização e liberação exata.

Pacotes de biblioteca comuns

O compilador limpo prepara pacotes representativos em raw_try_alloc<t>:

Pacote Função
alloc_error indireção de propriedade segura falível para valores recursivos e grandes
compiler/llvm/libs construção falível de bytes crescentes, mutação, visualizações e consumo box conversão
byte_buffer wrapper output/file hospedado durante o tempo de execução ABI
bytes iterativo livre de alocação O (n) file Fibonacci com negative/overflow explícito fibonacci
i64 wrapper de rede hospedada
None entrada partial/read-all hospedada digitada, saída text/bytes/format write-all, buffer limitado e net/io para saída rápida
print portátil println/math raiz quadrada, valor absoluto, mínimo e máximo
f32 verificação de análise de número inteiro signed/unsigned e auxiliares padrão explícitos
f64 argumentos de processo livres de alocação, visualizações de ambiente e identidade de processo
parse pacote de serialização seguro representativo
process classificação escalar de fatia mutável e classificação estática serialize para valores somente de movimentação
sort auxiliares genéricos de janela reversa, rotação e largura fixa, sem alocação; fatias principais fornecem order_key/slice
fill UTF-8 validação, escalar Unicode verificado sem alocação iteration/counting, conversão de string própria e cursores de token delimitados por ASCII
copy_from milissegundos hospedados monotônicos mais relógio de parede Unix seconds/milliseconds
text vetor genérico falível com construtores capacity/filled e time reserve/push/update/pop, além de fila, conjunto e mapa
vec canais de divisão de propriedade, digitados one-shot e @mut junções, eventos, cancelamento, grupos de espera, semáforos, barreiras e bloqueios
task wrappers de sistemas seguros sobre espaços de endereço, MMIO, atômicos, páginas, DMA, init-once e mecanismos locais de CPU

O incremental do lançador build/run path prepara automaticamente esses pacotes principais do repositório quando um pacote comum usa uma importação simples, como Result<T, E> ou system; nenhuma instalação manual de interface ou FFI visível ao aplicativo é necessária. Quanto mais estreito use "vec" O subcomando não prepara primeiro um pacote vazio ausente. Os usuários diretos do compilador podem consumir uma fonte explícita ou use "fibonacci" pacote. Estes não são nomes de idiomas mágicos.

Formatação e saída

A linguagem implementa digitada phase-1/2 check interpolação. Uma string F produz efêmero .sdi sem alocação de heap. f"..." é a superfície digitada canônica para texto, fatia de bytes e saída de formato. Para saída rápida, format_args escreve em stdout e compiler/llvm/libs/io escreve com uma nova linha à direita. print(text) realiza materialização falível explícita. Width/fill/alignment, especificadores de base inteira e emprestados sem alocação println(text) a formatação de características é implementada. A Fase 2 adiciona libc-free .to_string()?/display formatação fixa, científica e geral, além de formatação emprestada display/debug características.

Aviso de compatibilidade

llvm-v1 e histórico Grove/runtime tabelas expõem muitos nomes, como f32, f64, str_cat, read_filee net_connect. Sua existência em um compilador arquivado não os torna integrados ao compilador limpo. Ao portar código legado, importe ou implemente um wrapper seguro atual e deixe seu vec_new contrato define propriedade, efeitos, ABI e disponibilidade.

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