un linguaggio di programmazione di sistema che dà priorità alla correttezza verificabile, al determinismo e alle prestazioni
Linguaggio per sistemi di uso generale e toolchain di produzione con una superficie linguistica sicura di default, correttitudine verificabile, esecuzione deterministica e debugging basato su replay integrato.
fzy fornisce una CLI di produzione, fz, sia per i flussi di lavoro del compilatore che per la validazione deterministica. Correttitudine, determinismo, replay, artefatti di incidente ed evidenze di produzione fanno parte del normale flusso di lavoro, non sono un ripensamento. Per una rapida panoramica visiva del linguaggio, apri la vetrina FZL nel tuo browser con open fzl-showcase.html. Per la breve argomentazione sul perché potresti sceglierlo, vedi WHYFZY.md.
La politica di architettura del repository è tipizzata internamente e JSON solo ai confini reali.
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/fzyllmInstallazione consigliata:
curl -fsSL https://raw.githubusercontent.com/saint0x/fzy/main/install.sh | sh
Questo installa fz in ~/.local/bin, aggiorna PATH se necessario e verifica l'installazione con fz version e fz env.
Fallback dal sorgente:
curl -fsSL https://raw.githubusercontent.com/saint0x/fzy/main/install.sh | sh -s -- --from-source
Vuoi la panoramica più veloce? Apri fzl-showcase.html con open fzl-showcase.html, sfoglia WHYFZY.md per l'argomentazione del prodotto, poi usa l'esempio qui sotto come schizzo eseguibile compatto.
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
}
Per una copertura linguistica più ampia, usa CODE.md, examples/ e la vetrina FZL ottimizzata per browser.
I pacchetti framework seguono le normali regole dei pacchetti: dichiarali in fozzy.toml sotto [deps], poi importali nel sorgente con use fzbounds;, use fzweb; e nomi di pacchetto simili. I controlli diretti sul sorgente come fz check src/services/mod.fzy --json ora convalidano attraverso il contesto del pacchetto proprietario, quindi le importazioni delle dipendenze e i moduli fratelli si comportano allo stesso modo dei controlli sull'intero progetto.
fz: CLI del compilatore per build, esecuzione, test, verifica, documentazione, IR, RPC, header, controlli ABI e altrofz fmt, fz doc gencrates/parser, crates/ast, crates/hir, crates/fircrates/verifiercrates/runtimecrates/drivertests/*.fozzy.jsonImplementato e validato oggi:
alloc(...) / free(...)defer sia nel codice normale che nelle isole unsafe { ... }, quindi la pulizia deterministica è imposta anziché solo documentataalloc(...) / free(...) consapevoli della proprietà e controlli del ciclo di vita visibili al verificatorefifo, random, coverage_guidedrpc_send, rpc_recv, rpc_deadline, rpc_canceltest analizzatimodpubext c fn esportatefz rpc gencore.crypto e core.security, inclusi random sicuro, hashing, HMAC, confronto tempo costante e codifiche URL-safefzweb per routing applicazioni, cookie, sessioni, upload multipart, persistenza, SSE, websocket ed export OpenAPIfz run esegue direttamente l'output nativo con streaming di testo live o cattura JSONpython3 scripts/direct_memory_architecture_gate.pypython3 scripts/direct_memory_perf_gate.pycore.gpu, con esecuzione Metal live su Apple più contratti adattatore spirv/nvptx condivisifzy è configurato per supportare queste affermazioni di produzione oggi:
alloc(...) / free(...) rimangono in codice sicuro quando il compilatore può ancora verificare proprietà, provenienza ed esecuzione della puliziafzweb più primitive di sicurezza che mantengono i flussi sessione/cookie/auth all'interno della superficie runtime supportataVedi anche:
docs/system-safety-trust-model-v1.mddocs/production-memory-model-v1.mddocs/production-workflow-v1.mdcargo check --workspace
cargo test --workspace
# Scaffolda un progetto nella directory corrente o in un percorso di destinazione
fz init [path] [--name package] [--template minimal|rust|ts] [--with run,fuzz,explore,memory,host|all] [--force]
# Compila sorgente/progetto
fz build [path] [--release] [--lib] [--threads N] [--backend llvm|cranelift] [--pgo-generate|--pgo-use file] [-l lib] [-L path] [-framework name] [--json]
# Esegui sorgente/progetto o scenario .fozzy
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]
# Testa sorgente/progetto o scenario .fozzy
fz test [path] [--det] [--strict-verify] [--sched fifo|random|coverage_guided] [--seed N] [--record path] [--backend llvm|cranelift] [--filter substring] [--json]
# Verifica/controllo/documentazione/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]
# Output FFI / RPC / documentazione
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'integrazione con VS Code si trova in tooling/vscode e ha come target fz lsp serve.
Valori predefiniti del runtime e comportamento esposto:
127.0.0.18787listen riuscito.env o FZ_DOTENV_PATH viene caricato una volta prima delle operazioni env/HTTPlog.set_json(1)core.process, core.term, core.thread, core.log, core.text, core.io, core.path e core.utilcore.crypto e core.security coprono random sicuro, digest, HMAC, codifiche URL-safe e confronti a tempo costante per flussi di produzione auth/sessionefzweb fornisce moduli framework raggruppati per competenza più route integrate per health, readiness, metriche, inspect, search, cookie, sessioni, upload, eventi, websocket, CRUD di elementi, OpenAPI e asset staticiCon fz test <file.fzy> --det --record artifacts/name.trace.json --json, il driver emette:
*.trace.json: traccia di esecuzione deterministica*.timeline.json: decisioni dello scheduler*.report.json: riepilogo, risultati e raggruppamento dei fallimenti*.explore.json: candidati scheduler e priorità degli scenari*.shrink.json: suggerimenti di riduzione deterministica*.scenarios/ e *.scenarios.json: scenari nativi del linguaggio generati*.manifest.json: mappa degli artefatti inclusa il percorso dello scenario principaleSuddivisione di authoring canonica:
core.process, core.term, core.text: argv e UX terminalecore.log: politica di logging e output strutturatocore.io, core.path: scoperta del filesystem e assemblaggio percorsiproc.*: esecuzione di processi figliEsempio:
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 è esplicito:
term.read_line() == "" e term.stdin_eof() == 0term.read_line() == "" e term.stdin_eof() == 1Per lavoro CLI/runtime serio, usa sia il launcher integrato nel compilatore che il binario compilato quando il comportamento esatto del terminale è importante.
cranelift e llvm--backend esplicito, poi FZ_NATIVE_BACKEND, poi predefinito del profilodev -> cranelift, release -> llvmfozzy.lock per le dipendenze di percorsofz vendor [project] --jsonfozzy.lock e vendor/fozzy-vendor.jsondocs/dependency-locking-v1.mdfz abi-check impone:
Le esportazioni aggiuntive sono consentite.
docs/c-interop-production-v1.mdpubext c fn esportata richiede #[ffi_panic(abort|error)]ext unsafe c fn per import C non sicuri e chiamali solo all'interno di unsafe { ... }fz build --lib emette librerie statiche/condivise più un header installabile e un manifest ABI
--backend llvm esplicito viene rifiutato con un suggerimento di migrazioneunsafe fn e unsafe { ... }fz audit unsafe --workspace --json emette .fz/unsafe-map.workspace.json, .fz/unsafe-docs.workspace.json, .fz/unsafe-docs.workspace.md e .fz/unsafe-docs.workspace.htmlreason, invariant, owner, scope, risk_class e proof_ref sono generati dal compilatore e guidati da policyfozzy.tomlUsa questa sequenza per una fiducia rigorosa:
# 1) Audit del determinismo prima
fz doctor --deep --scenario tests/run.pass.fozzy.json --runs 5 --seed 42 --json
# 2) Test deterministici rigorosi
fz test --det --strict-verify tests/run.pass.fozzy.json tests/memory.pass.fozzy.json --json
# 3) Registra una traccia reale
fz run tests/run.pass.fozzy.json --det --record artifacts/trace.fozzy --json
# 4) Convalida la pipeline di replay
fz trace verify artifacts/trace.fozzy --strict --json
fz replay artifacts/trace.fozzy --json
fz ci artifacts/trace.fozzy --json
# 5) Passaggio di fiducia basato su host
fz run tests/host.pass.fozzy.json --host-backends --json
Porta di rilascio rigorosa:
./scripts/ship_release_gate.sh
Questo include controlli di integrità delle affermazioni nella documentazione bloccanti per il rilascio tramite 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
Ispeziona direttamente gli artefatti del test nativo emessi:
artifacts/demo.trace.native.trace.jsonartifacts/demo.trace.report.jsonartifacts/demo.trace.timeline.json quando gli artefatti ricchi sono abilitatiartifacts/demo.trace.manifest.jsonI manifest dei test nativi sono input di prima classe per trace verify / replay / ci per le esecuzioni di test nativi registrate. Non sono input di scenario e non partecipano alla shrink dello scenario.
Tutti gli esempi forniti seguono la convenzione narrativa DX v1:
src/main.fzy è solo orchestrativo e pone fn main per ultimosrc/tests/*mod.fzyProgetti disponibili:
examples/agent_runtimeexamples/context_runtimeexamples/minimal_runtimeexamples/service_appexamples/fullstackexamples/robust_cliexamples/live_serverValidazione e flussi di progetto:
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
Se stai contribuendo da un checkout invece di installare una build di rilascio, usa cargo run -q -p fz -- <args> come fallback solo sorgente.
Mantieni aggiornati questi documenti di consegna con versione durante l'implementazione:
PLAN.mdFEATURES-TO-SHIP.md