
un langage de programmation système privilégiant la vérifiabilité de la correction, le déterminisme et la performance
Langage systèmes à usage général et chaîne d'outils de production avec une surface de langage sécurisé livrée par défaut, une correction vérifiable, une exécution déterministe et un débogage basé sur le rejeu intégré.
fzy livre une CLI de production, fz, pour les workflows du compilateur et la validation déterministe. La correction, le déterminisme, le rejeu, les artefacts d'incident et les preuves de production font partie du workflow normal plutôt que d'une réflexion ultérieure. Pour un aperçu visuel rapide du langage, ouvrez la vitrine FZL fournie dans votre navigateur avec open fzl-showcase.html. Pour l'argumentation concise expliquant pourquoi vous pourriez le choisir, consultez WHYFZY.md.
La politique d'architecture du référentiel est typée en interne et JSON uniquement aux limites réelles.
INSTALL.mdUSAGE.mdWHYFZY.mdCODE.mddocs/production-workflow-v1.mddocs/gpu-v1.mddocs/system-safety-trust-model-v1.mddocs/unsafe-contract-authoring-v1.mddocs/language-stability-v1.mddocs/workspace-policy-v1.mddocs/operational-insights-v1.mdfzyllm : saint0x/fzyllmInstallation recommandée :
curl -fsSL https://raw.githubusercontent.com/saint0x/fzy/main/install.sh | sh
Cela installe fz dans ~/.local/bin, met à jour PATH si nécessaire, et vérifie l'installation avec fz version et fz env.
Solution de secours depuis les sources :
curl -fsSL https://raw.githubusercontent.com/saint0x/fzy/main/install.sh | sh -s -- --from-source
Vous voulez l'aperçu le plus rapide ? Ouvrez fzl-showcase.html avec open fzl-showcase.html, parcourez WHYFZY.md pour l'argument produit, puis utilisez l'exemple ci-dessous comme un sketch exécutable compact.
use core.log;
use core.path;
use core.process;
use core.time;
enum Mode {
Fast,
Safe,
}
trait Scorer {
fn score(endpoint: Url) -> i32;
}
struct HttpScorer {}
impl Scorer for HttpScorer {
fn score(endpoint: Url) -> i32 {
discard endpoint;
return 7;
}
}
struct Config<TEndpoint> {
retries: i32,
endpoint: TEndpoint,
mode: Mode,
}
fn weight(mode: Mode) -> i32 {
match mode {
Mode::Fast => return 3,
Mode::Safe => return 1,
_ => return 1,
}
}
async fn boost(v: i32) -> i32 {
checkpoint()
return v + 1
}
fn normalize<T: Scorer>(cfg: Config<Url>) -> i32 {
return weight(cfg.mode) + T.score(cfg.endpoint)
}
async fn run_once(cfg: Config<Url>) -> i32 {
let base = normalize<HttpScorer>(cfg)
return await boost(base)
}
fn main() -> i32 {
let cfg = Config { retries: 4, endpoint: url.parse("https://example.test"), mode: Mode::Fast }
let now = time.now()
let out_path = path.join("tmp", "score.log")
let mode = process.argv_or(1, "showcase")
let score = normalize<HttpScorer>(cfg)
log.info("snippet.run", out_path)
discard mode
discard run_once
if score + now > 0 then return score
return score
}
Pour une couverture plus large du langage, utilisez CODE.md, examples/ et la vitrine FZL compatible navigateur.
Les paquets du framework suivent les règles normales des paquets : déclarez-les dans fozzy.toml sous [deps], puis importez-les dans le code source avec use fzbounds;, use fzweb;, et des noms de paquets similaires. Les vérifications directes du code source telles que fz check src/services/mod.fzy --json valident désormais via le contexte du paquet propriétaire, donc les imports de dépendances et les modules frères se comportent de la même manière que dans les vérifications de projet complet.
fz : CLI du compilateur pour la construction, l'exécution, les tests, la vérification, la documentation, l'IR, le RPC, les en-têtes, les vérifications ABI, et plus encorefz fmt, fz doc gencrates/parser, crates/ast, crates/hir, crates/fircrates/verifiercrates/runtimecrates/drivertests/*.fozzy.jsonImplémenté et validé aujourd'hui :
alloc(...) / free(...)defer d'exécution dans le code normal et les îlots unsafe { ... }, donc un nettoyage déterministe est imposé plutôt que simplement documentéalloc(...) / free(...) conscients de la possession et des vérifications du cycle de vie visibles par le vérificateurfifo, random, coverage_guidedrpc_send, , , fzy est configuré pour soutenir ces revendications de production aujourd'hui :
alloc(...) / free(...) restent dans le code sûr lorsque le compilateur peut encore vérifier la possession, la provenance et l'exécution du nettoyagefzweb plus des primitives de sécurité qui maintiennent les flux session/cookie/auth dans la surface d'exécution prise en chargeVoir aussi :
docs/system-safety-trust-model-v1.mddocs/production-memory-model-v1.mddocs/production-workflow-v1.mdcargo check --workspace
cargo test --workspace
# Scaffold a project in the current directory or a target path
fz init [path] [--name package] [--template minimal|rust|ts] [--with run,fuzz,explore,memory,host|all] [--force]
# Build source/project
fz build [path] [--release] [--lib] [--threads N] [--backend llvm|cranelift] [--pgo-generate|--pgo-use file] [-l lib] [-L path] [-framework name] [--json]
# Run source/project or .fozzy scenario
fz run [path] [--det] [--strict-verify] [--seed N] [--record path] [--host-backends] [--backend llvm|cranelift] [--max-seconds N] [--exit-on-healthcheck URL] [--smoke-http URL] [-- <args>] [--json]
# Test source/project or .fozzy scenario
fz test [path] [--det] [--strict-verify] [--sched fifo|random|coverage_guided] [--seed N] [--record path] [--backend llvm|cranelift] [--filter substring] [--json]
# Verify/check/docs/tooling
fz fmt [path ...] [--check] [--json]
fz check [path] [--json]
fz verify [path] [--json]
fz lint [path] [--tier production|pedantic|compat] [--json]
fz dx-check [project] [--strict] [--json]
fz spec-check [--json]
fz emit-ir [path] [--json]
fz perf [--artifact artifacts/bench_core_rust_vs_fzy.json] [--json]
fz stability-dashboard [--json]
fz parity [path] [--seed N] [--json]
fz audit unsafe [path] [--workspace] [--json]
fz vendor [project] [--json]
fz abi-check <current.abi.json> --baseline <baseline.abi.json> [--json]
fz debug-check [path] [--json]
fz pgo merge [path] [--out file] [--json]
fz lsp diagnostics [path] [--json]
fz lsp definition <path> <symbol> [--json]
fz lsp hover <path> <symbol> [--json]
fz lsp rename <path> <from> <to> [--json]
fz lsp smoke [path] [--json]
fz lsp serve [--path <workspace>] [--json]
fz map suites [--root dir] [--scenario-root dir] [--profile pedantic|production|compat] [--json]
fz artifacts ls latest [--json]
fz report show latest [--format json|text] [--json]
fz usage [--json]
fz env [--json]
fz version [--json]
fz inspect stdlib <module> [--json]
fz schema [--json]
fz validate <scenario> [--json]
fz trace verify <trace> [--strict] [--json]
fz replay <trace> [--json]
fz shrink <trace> [--json]
fz ci <trace> [--json]
fz trace-native <trace.fozzy> [--out path] [--json]
# FFI / RPC / docs outputs
fz headers [path] [--out path] [--json]
fz rpc gen [path] [--out-dir dir] [--json]
fz doc gen [path] [--format json|html|markdown] [--out path] [--reference path] [--json]
L'intégration VS Code se trouve dans tooling/vscode et cible fz lsp serve.
Valeurs par défaut d'exécution et comportement exposé :
127.0.0.18787listen réussi.env ou FZ_DOTENV_PATH est chargé une fois avant les opérations env/HTTPlog.set_json(1)core.process, core.term, core.thread, core.log, core.text, core.io, core.path, et core.utilAvec fz test <file.fzy> --det --record artifacts/name.trace.json --json, le pilote émet :
*.trace.json : trace d'exécution déterministe*.timeline.json : décisions d'ordonnancement*.report.json : résumé, résultats et regroupement des échecs*.explore.json : candidats d'ordonnancement et priorités de scénario*.shrink.json : indices de réduction déterministe*.scenarios/ et *.scenarios.json : scénarios natifs du langage générés*.manifest.json : carte des artefacts incluant le chemin du scénario principalRépartition de la rédaction canonique :
core.process, core.term, core.text : argv et UX terminalcore.log : politique de journalisation et sortie structuréecore.io, core.path : découverte du système de fichiers et assemblage de cheminsproc.* : exécution de processus enfantsExemple :
use core.log;
use core.process;
use core.term;
use core.text;
fn main() -> i32 {
let mode = process.argv_or(1, "serve")
discard log.set_sink_name("stderr")
discard log.set_level_name("warn")
discard term.transcript_kv("mode", mode, 8)
if term.is_interactive() == 1 {
discard term.eprint_line(str.concat("interactive=", str.from_i32(term.is_interactive())))
}
discard term.print_line(text.indent("ready\nwaiting", " "))
return 0
}
EOF est explicite :
term.read_line() == "" et term.stdin_eof() == 0term.read_line() == "" et term.stdin_eof() == 1Pour un travail sérieux en CLI/exécution, utilisez à la fois le lanceur intégré au compilateur et le binaire construit lorsque le comportement exact du terminal est important.
cranelift et llvm--backend explicite, puis FZ_NATIVE_BACKEND, puis la valeur par défaut du profildev -> cranelift, release -> llvmfozzy.lock pour les dépendances de cheminfz vendor [project] --jsonfozzy.lock et vendor/fozzy-vendor.jsondocs/dependency-locking-v1.mdfz abi-check impose :
Les exportations additives sont autorisées.
docs/c-interop-production-v1.mdpubext c fn exportée nécessite #[ffi_panic(abort|error)]ext unsafe c fn pour les imports C non sécurisés et appelez-les uniquement à l'intérieur de unsafe { ... }fz build --lib émet des bibliothèques statiques/partagées plus un en-tête installable et un manifeste ABI
--backend llvm explicite est rejeté avec un indice de migrationunsafe fn et unsafe { ... }fz audit unsafe --workspace --json émet .fz/unsafe-map.workspace.json, .fz/unsafe-docs.workspace.json, .fz/unsafe-docs.workspace.md, et .fz/unsafe-docs.workspace.htmlreason, invariant, owner, scope, risk_class, et proof_ref sont générés par le compilateur et pilotés par la politiqueUtilisez cette séquence pour une confiance stricte :
# 1) Audit de déterminisme d'abord
fz doctor --deep --scenario tests/run.pass.fozzy.json --runs 5 --seed 42 --json
# 2) Tests déterministes stricts
fz test --det --strict-verify tests/run.pass.fozzy.json tests/memory.pass.fozzy.json --json
# 3) Enregistrer une trace réelle
fz run tests/run.pass.fozzy.json --det --record artifacts/trace.fozzy --json
# 4) Valider le pipeline de rejeu
fz trace verify artifacts/trace.fozzy --strict --json
fz replay artifacts/trace.fozzy --json
fz ci artifacts/trace.fozzy --json
# 5) Passage de confiance hébergé
fz run tests/host.pass.fozzy.json --host-backends --json
Porte de libération stricte :
./scripts/ship_release_gate.sh
Cela inclut des vérifications d'intégrité des revendications de documentation bloquant la publication via scripts/safety_claim_integrity_gate.py.
cat >/tmp/demo.fzy <<'FZY'
test "alpha" {}
test "beta" nondet {}
rpc Ping(req: PingReq) -> PingRes;
async fn worker() -> i32 {}
fn main() -> i32 {
timeout(1)
return 0
}
FZY
fz test /tmp/demo.fzy --det --sched random --seed 13 --record artifacts/demo.trace.json --json
Inspectez directement les artefacts de test natifs émis :
artifacts/demo.trace.native.trace.jsonartifacts/demo.trace.report.jsonartifacts/demo.trace.timeline.json lorsque les artefacts riches sont activésartifacts/demo.trace.manifest.jsonLes manifestes de test natifs sont des entrées de première classe trace verify / replay / ci pour les exécutions de test natif enregistrées. Ce ne sont pas des entrées de scénario et ne participent pas à la shrink de scénario.
Tous les exemples fournis suivent la convention narrative v1 DX :
src/main.fzy est uniquement dédié à l'orchestration et place fn main en derniersrc/tests/*mod.fzyProjets disponibles :
examples/agent_runtimeexamples/context_runtimeexamples/minimal_runtimeexamples/service_appexamples/fullstackexamples/robust_cliexamples/live_serverValidation et flux de projet :
fz dx-check examples/fullstack --strict --json
fz check examples/fullstack --json
fz build examples/fullstack --backend cranelift --json
fz build examples/fullstack --release --backend llvm --json
fz run examples/fullstack --backend cranelift --json
fz test examples/fullstack --det --seed 41 --backend llvm --json
fz headers examples/fullstack --json
fz abi-check examples/fullstack/include/fullstack.abi.json --baseline examples/fullstack/include/fullstack.abi.json --json
fz dx-check examples/robust_cli --strict --json
fz build examples/robust_cli --backend cranelift --json
fz run examples/robust_cli --backend llvm --json
fz test examples/robust_cli --det --seed 55 --backend cranelift --json
fz dx-check examples/live_server --strict --json
fz build examples/live_server --backend cranelift --json
fz run examples/live_server --backend llvm --json
fz test examples/live_server --det --seed 77 --backend cranelift --record artifacts/live_server.stats.trace.json --rich-artifacts --json
fz run tests/live.server.interhttp.fozzy.json --host-backends --json
Si vous contribuez à partir d'un checkout plutôt que d'installer une version publiée, utilisez cargo run -q -p fz -- <args> comme solution de secueil depuis les sources.
Tenez ces documents de livraison versionnés à jour pendant l'implémentation :
PLAN.mdFEATURES-TO-SHIP.mdrpc_recvrpc_deadlinerpc_canceltest analysésmodpubext c fn exportéesfz rpc gencore.crypto et core.security, incluant aléatoire sécurisé, hachage, HMAC, comparaison à temps constant et encodages sûrs pour URLfzweb pour le routage applicatif, cookies, sessions, téléchargements multipart, persistance, SSE, websockets et export OpenAPIfz run exécute directement la sortie native avec diffusion en direct du texte ou capture JSONpython3 scripts/direct_memory_architecture_gate.pypython3 scripts/direct_memory_perf_gate.pycore.gpu, avec exécution Metal en direct sur Apple plus des contrats d'adaptateur partagé spirv/nvptxcore.crypto et core.security couvrent l'aléatoire sécurisé, les digests, HMAC, les encodages sûrs pour URL, et les comparaisons à temps constant pour les flux auth/session de productionfzweb fournit des modules de framework regroupés par préoccupation ainsi que des routes intégrées pour la santé, la disponibilité, les métriques, l'inspection, la recherche, les cookies, les sessions, les téléchargements, les événements, les websockets, le CRUD d'éléments, OpenAPI et les ressources statiquesfozzy.toml