seed Idioma — Requisitos do Produto

Esta página registra os requisitos do produto ativo para seed. Não é uma segunda página de gramática ou status de implementação. O comportamento da linguagem normativa reside em seed/docs/lang-spec.md; as reivindicações implementadas e os níveis-alvo estão em Status Atual.

Objetivo do produto

seed é uma linguagem de sistemas de tipo estaticamente para programas nativos que precisam:

O principal produto é o software de sistemas controlados: CLI ferramentas, serviços internos, binary/text processamento, bibliotecas nativas e trabalho independente nos níveis de destino explicitamente fechados pelas portas do compilador.

Não-objetivos

seed não exige nem promete:

Requisitos de idioma

Requisito Critério de aceitação atual Evidência
Tipos estáticos com inferência Todo programa aceito é digitado antes do MIR; interfaces públicas preservam tipos especificação de linguagem e .sdi testes
Propriedade previsível Cópia escalar; movimentação de recursos; clone é explícito; proprietários ao vivo limpam exatamente uma vez em saídas estruturadas Gates 10–11 e testes de propriedade
Empréstimo seguro sem sintaxe vitalícia As visualizações têm origem lexical/input/receiver e não podem sobreviver ao armazenamento de apoio ownership/provenance testes e interfaces de esquema
Falha de alocação explícita APIs de alocação segura retornam result<..., alloc_error> ou outro erro declarado option/result e testes de biblioteca
Acesso aos dados verificado Indexação segura, fatiamento, discriminantes e partições mutáveis validam seus contratos Gates 6, 16 e 19
Limite inseguro explícito Memória bruta, ponteiros, FFI, syscalls, uniões, atômicos, acesso volátil, espaços de endereço e montagem requerem unsafe contrato de segurança e testes negativos
Semântica de liberação determinística --release e --release-small preservam verificações seguras, a menos que LLVM prove que são redundantes Gate 13 testes de perfil
Simultaneidade estruturada O trabalho gerado drena nos limites lexicais; transferência e compartilhamento exigem recursos Gate 6 task/runtime testes
Falha comum recuperável Opções, resultados, postfix ?e os resultados da tarefa digitada preservam a propriedade e a limpeza Gate 6 e Gate 15 testes
UTF-8 fonte e texto Texto de origem e de propriedade rejeitado malformado UTF-8; o comprimento de bytes e os limites da biblioteca Unicode permanecem explícitos testes de carregador e texto

Modelo de memória

O modelo comum necessário é:

  1. Cópia de valores com capacidade de cópia.
  2. Os recursos próprios movem-se em atribuições, chamadas, devoluções, capturas e agregações construção.
  3. Emprestado str, []te mut []t as vistas mantêm a proveniência.
  4. .clone() é explícito e seus efeitos allocation/retain fazem parte do contrato público.
  5. A limpeza é executada uma vez na ordem reversa de inicialização bem-sucedida em estruturas saídas.
  6. linear t adiciona uma obrigação exatamente uma vez sem alterar a representação.
  7. As regiões fornecem alocação de colisão lexical verificada e rejeitam o escape seguro proprietários, visualizações e ponteiros.
  8. Pânico, armadilha e aborto não desenrolam nem executam destruidores lexicais.

Os detalhes operacionais atuais estão documentados em Ownership.

Requisitos do compilador

O compilador operacional é seed/compiler/llvm. Seu pipeline necessário é:

source → lexer/parser → semantic graph → typed HIR/CFG
       → ownership/provenance/effects/loans → cleanup planning/verification
       → MIR → target layout/ABI → verified low MIR → LLVM

O Linux x86-64 a substituição auto-hospedada é uma migração fechada ativa em roadmap-self-hosted.md. Até sua transição para SH20, seed/compiler/llvm continua sendo o compilador operacional e o oráculo semântico. Outras portas de plataforma auto-hospedadas são adiadas até depois da primeira Linux x86-64 transição.

Cada fonte e caminho de interface com origem excluída devem passar pela mesma digitação relevante, propriedade, procedência, efeitos, limpeza, ABI e verificações de perfil antes da geração do código.

O compilador deve fornecer:

Os compiladores substituídos OCaml, QBE, estilo TCC e assembly-stub são apenas históricos de compatibilidade e não atendem aos requisitos atuais do produto.

Requisitos de tempo de execução e destino

O suporte alvo deve ser descrito como uma matriz de capacidade, não como um booleano. Análise, LLVM, objeto, arquivo, biblioteca compartilhada, executável, execução hospedada, serviços de tempo de execução, FFI, agendador, artefatos de pacote e evidências de inicialização são rastreados separadamente.

A matriz canônica é seed/compiler/llvm/tests/GATE14_TARGET_MATRIX.tsv. Linux x86-64 é o principal destino hospedado fechado. Gate 14 é concluído após a evidência nativa macOS x86-64 necessária; macOS arm64 tem sua linha de host nativo verificada separadamente e não substitui o requisito de fechamento da Intel. WebAssembly/WASI atualmente é apenas objeto.

Perfis independentes e de kernel devem declarar seus serviços de tempo de execução disponíveis. Os efeitos de alocação, bloqueio, pânico, I/O, rede e agendamento só podem ser usados ​​quando o perfil selecionado os fornecer.

Requisitos da biblioteca

O núcleo da linguagem permanece pequeno. Arquivos, redes, análise, formatação, coleções, tarefas e wrappers de sistema são bibliotecas comuns com interfaces explícitas em vez de recursos internos ocultos.

O conjunto de repositórios operacionais está sob seed/compiler/llvm/libs e está documentado em Referência da Biblioteca. As bibliotecas devem:

A árvore grove/ de nível superior maior é um corpus de compatibilidade e portabilidade até que um pacote individual passe pelo compilador operacional e receba um contrato manifest/interface atual.

Requisitos de ferramentas

O inicializador de repositório e o compilador direto juntos devem suportar:

O executável seed --help permanece autoritativo para sinalizadores diretos do compilador. Referência de idioma documenta o inicializador do repositório.

Requisitos de desempenho e qualidade

As reivindicações de desempenho exigem evidências controladas. Os atuais portões de fechamento impõem:

O instantâneo atual entre idiomas está em Benchmarks. É um corpus medido localmente, não uma classificação para todo o idioma.

Lacunas atuais de produtos

As principais lacunas restantes do produto são:

Novos requisitos devem ser adicionados aqui somente quando descreverem a intenção do produto. A gramática pertence à especificação da linguagem, o status de implementação na status.mde trabalho planejado do compilador em seed/compiler/llvm/ROADMAP.md.