seed Idioma: requisitos del producto

Esta página registra los requisitos del producto activo para seed. No es una segunda página de gramática o estado de implementación. El comportamiento del lenguaje normativo vive en seed/docs/lang-spec.md; Los reclamos implementados y los niveles objetivo se encuentran en Estado actual.

Objetivo del producto

seed es un lenguaje de sistemas de tipado estático para programas nativos que necesitan:

El producto principal es el software de sistemas controlados: CLI herramientas, servicios internos, binary/text procesamiento, bibliotecas nativas y trabajo independiente en los niveles de destino cerrados explícitamente por las puertas del compilador.

No goles

seed no exige ni promete:

Requisitos de idioma

Requisito Criterio de aceptación actual evidencia
Tipos estáticos con inferencia. Cada programa aceptado se escribe antes de MIR; Las interfaces públicas preservan los tipos. especificación del lenguaje y .sdi pruebas
Propiedad predecible Copia de escalares; los recursos se mueven; clonar es explícito; los propietarios vivos limpian exactamente una vez en las salidas estructuradas Gates 10–11 y pruebas de propiedad
Préstamo seguro sin sintaxis de por vida Las vistas tienen procedencia lexical/input/receiver y no pueden sobrevivir al almacenamiento de respaldo ownership/provenance pruebas e interfaces de esquema
Fallo de asignación explícito Las API de asignación segura devuelven result<..., alloc_error> u otro error declarado option/result y pruebas de biblioteca
Acceso a datos comprobados La indexación, el corte, los discriminantes y las particiones mutables seguros validan sus contratos Gates 6, 16 y 19
Límite inseguro explícito La memoria sin procesar, los punteros, FFI, las llamadas al sistema, las uniones, los átomos, el acceso volátil, los espacios de direcciones y el ensamblaje requieren unsafe contrato de seguridad y pruebas negativas
Semántica de liberación determinista --release y --release-small conservan los controles seguros a menos que LLVM demuestre que son redundantes. Gate 13 pruebas de perfil
Concurrencia estructurada El trabajo generado se drena en los límites léxicos; transferir y compartir requieren capacidades Gate 6 task/runtime pruebas
Fallo ordinario recuperable Opciones, resultados, postfix. ?y los resultados de las tareas escritas preservan la propiedad y la limpieza Gate 6 y Gate 15 pruebas
UTF-8 fuente y texto El texto original y propio rechaza el formato incorrecto UTF-8; la longitud de bytes y los límites de la biblioteca Unicode permanecen explícitos pruebas de cargador y texto

Modelo de memoria

El modelo común requerido es:

  1. Copia de valores con capacidad de copia.
  2. Los recursos propios se mueven durante asignaciones, llamadas, devoluciones, capturas y agregados. construcción.
  3. prestado str, []t, y mut []t las vistas conservan la procedencia.
  4. .clone() es explícito y sus efectos allocation/retain son parte del contrato público.
  5. La limpieza se ejecuta una vez en orden inverso de inicialización exitosa en estructurado. salidas.
  6. linear t agrega una obligación exactamente una vez sin cambiar la representación.
  7. Las regiones proporcionan asignación de protuberancias léxicas verificadas y rechazan escapar de forma segura propietarios, vistas y sugerencias.
  8. El pánico, la trampa y el aborto no desenredan ni ejecutan destructores léxicos.

Los detalles operativos actuales están documentados en Ownership.

Requisitos del compilador

El compilador operativo es seed/compiler/llvm. Su canalización requerida es:

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

el Linux x86-64 El reemplazo autohospedado es una migración cerrada activa bajo roadmap-self-hosted.md. Hasta su transición SH20, seed/compiler/llvm sigue siendo el compilador operativo y el oráculo semántico. Otros puertos de plataforma autohospedados se posponen hasta después del primero Linux x86-64 transición.

Cada ruta de fuente y de interfaz eliminada de fuente debe pasar por la misma tipificación, propiedad, procedencia, efectos, limpieza, ABI y comprobaciones de perfil antes de la generación del código.

El compilador debe proporcionar:

Los compiladores OCaml, QBE, estilo TCC y de código auxiliar de ensamblaje reemplazados son solo historial de compatibilidad y no satisfacen los requisitos actuales del producto.

Requisitos de tiempo de ejecución y objetivo

El soporte objetivo debe describirse como una matriz de capacidad, no como un valor booleano. El análisis, LLVM, el objeto, el archivo, la biblioteca compartida, el ejecutable, la ejecución alojada, los servicios de tiempo de ejecución, el FFI, el programador, los artefactos del paquete y la evidencia de arranque se rastrean por separado.

La matriz canónica es seed/compiler/llvm/tests/GATE14_TARGET_MATRIX.tsv. Linux x86-64 es el principal objetivo alojado cerrado. Gate 14 está completo después del nativo requerido macOS x86-64 evidencia; macOS arm64 tiene su fila de host nativo verificada por separado y no sustituye el requisito de cierre de Intel. WebAssembly/WASI Actualmente es solo de objetos.

Los perfiles independientes y de kernel deben declarar sus servicios de ejecución disponibles. Los efectos de asignación, bloqueo, pánico, I/O, redes y programación solo se pueden utilizar cuando el perfil seleccionado los proporciona.

Requisitos de la biblioteca

El núcleo lingüístico sigue siendo pequeño. Los archivos, las redes, el análisis, el formateo, las colecciones, las tareas y los contenedores del sistema son bibliotecas ordinarias con interfaces explícitas en lugar de funciones integradas ocultas.

El conjunto de repositorio operativo se encuentra en seed/compiler/llvm/libs y está documentado en Referencia de biblioteca. Las bibliotecas deben:

El árbol grove/ de nivel superior más grande es un corpus de compatibilidad y portabilidad hasta que un paquete individual pasa el compilador operativo y recibe un contrato manifest/interface actual.

Requisitos de herramientas

El iniciador del repositorio y el compilador directo juntos deben admitir:

El ejecutable seed --help sigue teniendo autoridad para los indicadores del compilador directo. La referencia del idioma documenta el iniciador del repositorio.

Requisitos de rendimiento y calidad.

Las afirmaciones de desempeño requieren evidencia controlada. Las puertas de cierre actuales imponen:

La instantánea actual en varios idiomas se encuentra en Benchmarks. Es un corpus medido localmente, no una clasificación para todo el idioma.

Brechas de productos actuales

Las principales brechas de productos restantes son:

Aquí se deben agregar nuevos requisitos solo cuando describan la intención del producto. La gramática pertenece a la especificación del lenguaje, el estado de implementación en status.mdy trabajo de compilación planificado en seed/compiler/llvm/ROADMAP.md.