Simultaneidade Estruturada
seed usa estruturado spawn, digitado normalmente task/synchronization bibliotecas e um tempo de execução hospedado M:N. Não tem async/await ou funções coloridas.
Gerar
fn compute(value: i64) {
spawn {
let answer = value + 1
}
}
O compilador descreve o corpo em um trabalhador interno e cria um ambiente de captura copy/move concreto. Cada borda que sai do escopo léxico proprietário aguarda seu grupo de tarefas antes da limpeza, portanto, uma tarefa não pode sobreviver acidentalmente ao estado stack/region capturado.
As capturas requerem send; o acesso simultâneo compartilhado requer adicionalmente sync. Manter o original ao enviar um recurso requer um clone explícito. O estado global mutável não pode ser capturado, diretamente ou através de um auxiliar. O postfix ? não pode cruzar o limite da tarefa enquanto os corpos da tarefa retornam void.
Biblioteca de tarefas
compiler/llvm/libs/task é um pacote genérico comum. Ele fornece:
- divisão de propriedade limitada
channel_sender<t>/channel_receiver<t>; - não bloqueador
try_send/try_recve bloqueio apoiado pelo agendadorsend/recv; - junções
task_sender<t>/task_handle<t>digitadas de uma só vez; - eventos e pares de cancelamento;
- grupos de espera, semáforos, barreiras, variáveis de condição e bloqueios.
Import/source-elide esse pacote antes de usar esses tipos. A linguagem em si não define chan<t>, send, recv, canais de encontro, spawn separado ou spawn for sintaxe.
Agendador
Linux-nativo x86-64/AArch64 forneça agendadores estruturados livres de libc. Bloquear o parque de operações da biblioteca de tarefas por meio do contrato de tempo de execução em vez de fixar um trabalhador. Os registros de tarefas carregam o contexto do alocador ativo; o trabalho vinculado à região é unido antes da liberação da região.
Windows x86-64 usa CreateThread com junções de grupos lexicais e biblioteca de tarefas channel/join execução, coberta pela execução obrigatória do Wine. O macOS x86-64 e braço64 runtime/link superfícies usam agendamento pthread; Intel nativo x86-64 a execução continua sendo Gate 14 item de fechamento, enquanto arm64 é explicitamente apenas de ligação cruzada.
Resultados da tarefa digitada
task_result_new<t, e>(), task_result_complete_ok/errore task_result_wait especializar os pontos finais lineares one-shot em result<t,e>. Sucesso e fracasso compõem sem async/await; o identificador permanece somente para movimentação, o bloqueio é explícito, as capturas ainda exigem sende os identificadores baseados em região não podem escapar de sua região. Esta é uma superfície de biblioteca, então spawn permanece pequeno e os custos das tarefas permanecem visíveis.