@greenpandastudios/aug-cli 0.20.1 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/docs/assets/benchmarks/execution.svg +774 -637
- package/docs/assets/benchmarks/http.svg +278 -249
- package/docs/assets/benchmarks/improvements.svg +66 -66
- package/docs/assets/benchmarks/kernels-mobile.svg +1 -0
- package/docs/assets/benchmarks/kernels.svg +1 -0
- package/docs/assets/benchmarks/memory.svg +153 -153
- package/docs/benchmark-results.json +227089 -90363
- package/docs/compatibility.md +6 -6
- package/docs/contributing-benchmarks.md +36 -6
- package/docs/dev-containers.md +8 -15
- package/docs/dgx-consumers.json +122 -0
- package/docs/dgx-gyms.json +784 -0
- package/docs/dgx-kernels.json +1170 -0
- package/docs/dgx-performance.json +227849 -0
- package/docs/dgx-spark.md +64 -0
- package/docs/diagnostics.md +1 -1
- package/docs/docker.md +16 -17
- package/docs/example-projects.json +32 -0
- package/docs/examples/approved-design/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
- package/docs/examples/approved-design/domain/app.md +4 -4
- package/docs/examples/approved-design/main.md +2 -2
- package/docs/examples/calls-benchmark/index.md +36 -0
- package/docs/examples/calls-benchmark/main.md +78 -0
- package/docs/examples/calls-benchmark/operations.md +60 -0
- package/docs/examples/developer-workflow/calculator.md +5 -5
- package/docs/examples/developer-workflow/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
- package/docs/examples/developer-workflow/logging/console.md +2 -2
- package/docs/examples/developer-workflow/logging/logger.md +2 -2
- package/docs/examples/developer-workflow/main.md +2 -2
- package/docs/examples/errors-benchmark/index.md +36 -0
- package/docs/examples/errors-benchmark/main.md +92 -0
- package/docs/examples/errors-benchmark/operations.md +65 -0
- package/docs/examples/float-benchmark/index.md +35 -0
- package/docs/examples/float-benchmark/main.md +75 -0
- package/docs/examples/generic-di/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
- package/docs/examples/generic-di/main.md +2 -2
- package/docs/examples/generic-di/types.md +3 -3
- package/docs/examples/hello/app/greeter.md +3 -3
- package/docs/examples/hello/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
- package/docs/examples/hello/logging/console.md +2 -2
- package/docs/examples/hello/logging/logger.md +2 -2
- package/docs/examples/hello/main.md +2 -2
- package/docs/examples/index.md +18 -1
- package/docs/examples/interceptors/app.md +5 -5
- package/docs/examples/interceptors/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
- package/docs/examples/interceptors/interceptors.md +2 -2
- package/docs/examples/interceptors/logging.md +3 -3
- package/docs/examples/interceptors/main.md +2 -2
- package/docs/examples/list-benchmark/index.md +35 -0
- package/docs/examples/list-benchmark/main.md +78 -0
- package/docs/examples/map-churn-benchmark/index.md +35 -0
- package/docs/examples/map-churn-benchmark/main.md +106 -0
- package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/api.md +104 -0
- package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.md +54 -0
- package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/native.abi-json.md +48 -0
- package/docs/examples/native-blake3/hashing.md +93 -0
- package/docs/examples/native-blake3/index.md +38 -0
- package/docs/examples/native-blake3/main.md +73 -0
- package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/api.md +406 -0
- package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.md +51 -0
- package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.md +63 -0
- package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/native.abi-json.md +161 -0
- package/docs/examples/native-pytorch/index.md +38 -0
- package/docs/examples/native-pytorch/main.md +73 -0
- package/docs/examples/native-pytorch/tensors.md +123 -0
- package/docs/examples/native-sqlite/database.md +116 -0
- package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/api.md +284 -0
- package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.md +51 -0
- package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.md +75 -0
- package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/native.abi-json.md +119 -0
- package/docs/examples/native-sqlite/index.md +38 -0
- package/docs/examples/native-sqlite/main.md +73 -0
- package/docs/examples/native-zlib/compression.md +99 -0
- package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/api.md +153 -0
- package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.md +54 -0
- package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/native.abi-json.md +76 -0
- package/docs/examples/native-zlib/index.md +38 -0
- package/docs/examples/native-zlib/main.md +78 -0
- package/docs/examples/new-syntax/console.md +2 -2
- package/docs/examples/new-syntax/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
- package/docs/examples/new-syntax/greeter.md +3 -3
- package/docs/examples/new-syntax/logger.md +2 -2
- package/docs/examples/new-syntax/main.md +2 -2
- package/docs/examples/ownership-transfer/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
- package/docs/examples/ownership-transfer/main.md +2 -2
- package/docs/examples/ownership-transfer/resource.md +2 -2
- package/docs/examples/packages-math/aug-package-json.md +1 -1
- package/docs/examples/records-benchmark/data.md +55 -0
- package/docs/examples/records-benchmark/index.md +36 -0
- package/docs/examples/records-benchmark/main.md +85 -0
- package/docs/examples/strings-benchmark/index.md +35 -0
- package/docs/examples/strings-benchmark/main.md +76 -0
- package/docs/examples/tasks-benchmark/index.md +36 -0
- package/docs/examples/tasks-benchmark/main.md +89 -0
- package/docs/examples/tasks-benchmark/operations.md +58 -0
- package/docs/getting-started.md +3 -3
- package/docs/grammar.md +2 -2
- package/docs/gym-results.json +784 -0
- package/docs/implementation-map.md +6 -0
- package/docs/index.md +1 -1
- package/docs/kernel-results.json +1170 -0
- package/docs/language-conformance.md +6 -0
- package/docs/language-constructs.md +9 -1
- package/docs/learn/index.md +1 -1
- package/docs/maintaining-docs.md +1 -1
- package/docs/native-implementation.md +276 -0
- package/docs/native-interop-llvm-plan.md +342 -0
- package/docs/native-package-examples.md +684 -0
- package/docs/native-packages.md +179 -0
- package/docs/packages.md +2 -2
- package/docs/performance.md +50 -29
- package/docs/production-readiness.md +11 -1
- package/docs/public/downloads/approved-design.zip +0 -0
- package/docs/public/downloads/calls-benchmark.zip +0 -0
- package/docs/public/downloads/developer-workflow.zip +0 -0
- package/docs/public/downloads/errors-benchmark.zip +0 -0
- package/docs/public/downloads/float-benchmark.zip +0 -0
- package/docs/public/downloads/generic-di.zip +0 -0
- package/docs/public/downloads/hello.zip +0 -0
- package/docs/public/downloads/interceptors.zip +0 -0
- package/docs/public/downloads/json-benchmark.zip +0 -0
- package/docs/public/downloads/list-benchmark.zip +0 -0
- package/docs/public/downloads/map-churn-benchmark.zip +0 -0
- package/docs/public/downloads/native-blake3.zip +0 -0
- package/docs/public/downloads/native-pytorch.zip +0 -0
- package/docs/public/downloads/native-sqlite.zip +0 -0
- package/docs/public/downloads/native-zlib.zip +0 -0
- package/docs/public/downloads/new-syntax.zip +0 -0
- package/docs/public/downloads/oidc-login.zip +0 -0
- package/docs/public/downloads/ownership-transfer.zip +0 -0
- package/docs/public/downloads/packages-app.zip +0 -0
- package/docs/public/downloads/packages-math.zip +0 -0
- package/docs/public/downloads/records-benchmark.zip +0 -0
- package/docs/public/downloads/strings-benchmark.zip +0 -0
- package/docs/public/downloads/tasks-benchmark.zip +0 -0
- package/docs/qualification-results.md +66 -0
- package/docs/reference.md +24 -0
- package/docs/releasing.md +81 -6
- package/docs/research/libtorch-native-qualification.md +115 -0
- package/docs/research/native-interop-llvm.md +197 -0
- package/docs/research/qualification-methods.md +15 -0
- package/docs/roadmap.md +1 -0
- package/docs/safety-gyms.md +41 -0
- package/docs/tooling.md +16 -15
- package/docs/web-library-gaps.md +1 -1
- package/docs/web.md +4 -0
- package/examples/approved-design/.aug-spec/manifest.json +3 -3
- package/examples/approved-design/domain/app.aug.md +4 -4
- package/examples/approved-design/main.aug.md +2 -2
- package/examples/developer-workflow/.aug-spec/manifest.json +3 -3
- package/examples/developer-workflow/calculator.aug.md +5 -5
- package/examples/developer-workflow/logging/console.aug.md +2 -2
- package/examples/developer-workflow/logging/logger.aug.md +2 -2
- package/examples/developer-workflow/main.aug.md +2 -2
- package/examples/generic-di/.aug-spec/manifest.json +3 -3
- package/examples/generic-di/main.aug.md +2 -2
- package/examples/generic-di/types.aug.md +3 -3
- package/examples/hello/.aug-spec/manifest.json +3 -3
- package/examples/hello/app/greeter.aug.md +3 -3
- package/examples/hello/logging/console.aug.md +2 -2
- package/examples/hello/logging/logger.aug.md +2 -2
- package/examples/hello/main.aug.md +2 -2
- package/examples/interceptors/.aug-spec/manifest.json +3 -3
- package/examples/interceptors/app.aug.md +5 -5
- package/examples/interceptors/interceptors.aug.md +2 -2
- package/examples/interceptors/logging.aug.md +3 -3
- package/examples/interceptors/main.aug.md +2 -2
- package/examples/native-blake3/.aug-spec/manifest.json +16 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.1/native.abi.json +29 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/api.aug +14 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/api.aug.md +34 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.aug +4 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.aug.md +8 -0
- package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/native.abi.json +29 -0
- package/examples/native-blake3/AGENTS.md +5 -0
- package/examples/native-blake3/aug.lock.json +253 -0
- package/examples/native-blake3/hashing.aug +11 -0
- package/examples/native-blake3/hashing.aug.md +25 -0
- package/examples/native-blake3/main.aug +8 -0
- package/examples/native-blake3/main.aug.md +13 -0
- package/examples/native-pytorch/.aug-spec/manifest.json +18 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.1/native.abi.json +142 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.3/native.abi.json +142 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/api.aug +101 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/api.aug.md +160 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.aug +3 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.aug.md +8 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.aug +6 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.aug.md +13 -0
- package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/native.abi.json +142 -0
- package/examples/native-pytorch/AGENTS.md +5 -0
- package/examples/native-pytorch/aug.lock.json +309 -0
- package/examples/native-pytorch/main.aug +8 -0
- package/examples/native-pytorch/main.aug.md +13 -0
- package/examples/native-pytorch/tensors.aug +23 -0
- package/examples/native-pytorch/tensors.aug.md +35 -0
- package/examples/native-sqlite/.aug-spec/manifest.json +18 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.2/native.abi.json +100 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/api.aug +48 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/api.aug.md +91 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.aug +3 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.aug.md +8 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.aug +8 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.aug.md +22 -0
- package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/native.abi.json +100 -0
- package/examples/native-sqlite/AGENTS.md +5 -0
- package/examples/native-sqlite/aug.lock.json +236 -0
- package/examples/native-sqlite/database.aug +15 -0
- package/examples/native-sqlite/database.aug.md +27 -0
- package/examples/native-sqlite/main.aug +8 -0
- package/examples/native-sqlite/main.aug.md +13 -0
- package/examples/native-zlib/.aug-spec/manifest.json +16 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.1/native.abi.json +57 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/api.aug +29 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/api.aug.md +54 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.aug +4 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.aug.md +8 -0
- package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/native.abi.json +57 -0
- package/examples/native-zlib/AGENTS.md +5 -0
- package/examples/native-zlib/aug.lock.json +236 -0
- package/examples/native-zlib/compression.aug +15 -0
- package/examples/native-zlib/compression.aug.md +27 -0
- package/examples/native-zlib/main.aug +10 -0
- package/examples/native-zlib/main.aug.md +13 -0
- package/examples/new-syntax/.aug-spec/manifest.json +3 -3
- package/examples/new-syntax/console.aug.md +2 -2
- package/examples/new-syntax/greeter.aug.md +3 -3
- package/examples/new-syntax/logger.aug.md +2 -2
- package/examples/new-syntax/main.aug.md +2 -2
- package/examples/oidc-login/aug.lock.json +6 -6
- package/examples/ownership-transfer/.aug-spec/manifest.json +3 -3
- package/examples/ownership-transfer/main.aug.md +2 -2
- package/examples/ownership-transfer/resource.aug.md +2 -2
- package/examples/packages/math/aug-package.json +1 -1
- package/native/compiler-packs.json +43 -0
- package/package.json +3 -2
- package/runtime/aug_http.c +48 -21
- package/runtime/aug_http_ir.c +30 -0
- package/runtime/aug_http_ir.h +18 -0
- package/runtime/aug_ir.c +209 -0
- package/runtime/aug_ir.h +89 -0
- package/runtime/aug_json.c +6 -1
- package/runtime/aug_runtime.c +82 -16
- package/runtime/aug_runtime.h +16 -2
- package/runtime/aug_tasks.c +38 -7
- package/runtime/aug_values.c +12 -6
- package/scripts/bootstrap-native.mjs +4 -1
- package/src/ast.js +1 -1
- package/src/checker.js +110 -28
- package/src/cli.js +92 -14
- package/src/codegen.js +31 -6
- package/src/compiler-packs.js +66 -0
- package/src/config.js +2 -2
- package/src/editor.js +15 -6
- package/src/formatter.js +4 -2
- package/src/git-http.js +137 -0
- package/src/git-packages.js +9 -1
- package/src/help.js +10 -2
- package/src/ir-types.js +5 -0
- package/src/ir-verify.js +277 -0
- package/src/ir.js +962 -0
- package/src/llvm-debug.js +101 -0
- package/src/llvm-native.js +152 -0
- package/src/llvm-platform.js +20 -0
- package/src/llvm.js +781 -0
- package/src/native-artifacts.js +207 -0
- package/src/native-bindings.js +189 -0
- package/src/native-contracts.js +295 -0
- package/src/native-declarations.js +68 -0
- package/src/native-facts.js +63 -0
- package/src/package-locking.js +43 -0
- package/src/package-manager.js +23 -8
- package/src/parser.js +20 -2
- package/src/project.js +2 -2
- package/src/runtime-abi.js +23 -0
- package/src/runtime-adapters.js +18 -0
- package/src/schemas.js +24 -17
- package/src/semantic.js +8 -3
- package/src/snippets.js +1 -0
- package/src/spec.js +49 -8
- /package/examples/approved-design/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
- /package/examples/approved-design/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
- /package/examples/developer-workflow/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
- /package/examples/developer-workflow/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
- /package/examples/generic-di/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
- /package/examples/generic-di/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
- /package/examples/hello/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
- /package/examples/hello/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
- /package/examples/interceptors/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
- /package/examples/interceptors/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
- /package/examples/new-syntax/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
- /package/examples/new-syntax/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
- /package/examples/ownership-transfer/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
- /package/examples/ownership-transfer/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Native libraries as August packages
|
|
2
|
+
|
|
3
|
+
Native locks keep a compiler selection for each host under `native.compilers`.
|
|
4
|
+
A project can record macOS ARM64 and both GNU/Linux hosts without one build
|
|
5
|
+
replacing another host's compiler or runtime pin. A frozen build requires the
|
|
6
|
+
entry for its current host. Run `aug build --backend llvm` once on each new host
|
|
7
|
+
before using `--frozen` there; cross-compilation is not supported.
|
|
8
|
+
|
|
9
|
+
The LLVM preview lets an August package wrap a C ABI without exposing native
|
|
10
|
+
pointers to application code. A package supplies August declarations, a checked
|
|
11
|
+
binding descriptor, and prebuilt libraries. The compiler checks their labels,
|
|
12
|
+
types, errors, and ownership before generating LLVM IR and a native executable.
|
|
13
|
+
|
|
14
|
+
This is development work for `0.21.0`, not a capability of the published
|
|
15
|
+
`0.20.1` CLI. Public release installation is being qualified. The first target is
|
|
16
|
+
macOS 14 or later on Apple Silicon. LLVM is the default for ordinary projects
|
|
17
|
+
and native packages. The C migration reference requires `--backend c` or
|
|
18
|
+
`backend: c` in `main.yaml`; native ABI packages require LLVM.
|
|
19
|
+
|
|
20
|
+
Linux x86-64 and ARM64 support is being qualified on Debian 12 and Ubuntu,
|
|
21
|
+
with glibc 2.36 or later. Both architectures pass LLVM regression and installed
|
|
22
|
+
CLI checks with measured library candidates. Their library artifacts are public;
|
|
23
|
+
clean public-download consumer checks have passed independently on both architectures.
|
|
24
|
+
Compiler publication remains a release gate.
|
|
25
|
+
Musl and cross compilation are unsupported. A package declares its libc floor
|
|
26
|
+
and C++ ABI in addition to its OS and architecture; August rejects an incompatible
|
|
27
|
+
host before compiling the application.
|
|
28
|
+
|
|
29
|
+
## Import a library
|
|
30
|
+
|
|
31
|
+
The [PyTorch](https://github.com/GreenPandaStudios/aug-pytorch),
|
|
32
|
+
[SQLite](https://github.com/GreenPandaStudios/aug-sqlite),
|
|
33
|
+
[zlib](https://github.com/GreenPandaStudios/aug-zlib), and
|
|
34
|
+
[BLAKE3](https://github.com/GreenPandaStudios/aug-blake3) repositories publish
|
|
35
|
+
source and native preview archives for all three platforms: PyTorch `v0.1.4` and
|
|
36
|
+
the other three packages `v0.1.3`. Their imports have passed using the packaged CLI,
|
|
37
|
+
public downloads, and fresh caches on macOS ARM64 and both GNU/Linux architectures.
|
|
38
|
+
The matching compiler release is still pending. The consumer gates passed in CI;
|
|
39
|
+
subsequent compiler revisions must pass it again before publication.
|
|
40
|
+
|
|
41
|
+
After the matching compiler preview is published, use the normal
|
|
42
|
+
package commands. This example adds CPU LibTorch under a short name:
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
aug add https://github.com/GreenPandaStudios/aug-pytorch#v0.1.4 --as pytorch
|
|
46
|
+
aug run
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The following program is an example for that preview:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
import Tensor and TensorError and tensor and add and sum from pytorch
|
|
53
|
+
|
|
54
|
+
try:
|
|
55
|
+
own Tensor left = tensor(values=[1.0, 2.0, 3.0])
|
|
56
|
+
own Tensor right = tensor(values=[4.0, 5.0, 6.0])
|
|
57
|
+
own Tensor result = add(left, right)
|
|
58
|
+
print(value=sum(tensor=result)) // 21
|
|
59
|
+
catch TensorError error:
|
|
60
|
+
print(value=error.message)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`own` makes each tensor's lifetime explicit. Leaving its scope releases the
|
|
64
|
+
native tensor, including when a call fails. Reading a tensor lends it for the
|
|
65
|
+
duration of the call. Passing it to an owned input transfers responsibility to
|
|
66
|
+
the callee. Replacing an owned field releases its previous value immediately.
|
|
67
|
+
|
|
68
|
+
SQLite, zlib, and Rust BLAKE3 use the same package path. The
|
|
69
|
+
[package examples](native-package-examples.md) show their operations; the
|
|
70
|
+
[implementation record](native-implementation.md) separates verified behavior
|
|
71
|
+
from release and platform work still in progress.
|
|
72
|
+
|
|
73
|
+
Read the complete projects with their compiled explanations:
|
|
74
|
+
[PyTorch](examples/native-pytorch/index.md),
|
|
75
|
+
[SQLite](examples/native-sqlite/index.md),
|
|
76
|
+
[zlib](examples/native-zlib/index.md), and
|
|
77
|
+
[Rust BLAKE3](examples/native-blake3/index.md). Each includes a same-file test and
|
|
78
|
+
a downloadable project. Native dependency pages link to the exact binding
|
|
79
|
+
descriptor, so ownership and native boundaries stay visible beside the code.
|
|
80
|
+
|
|
81
|
+
## Check and generate bindings
|
|
82
|
+
|
|
83
|
+
Binding maintainers can use the preview's `aug bind header` command. Supply a
|
|
84
|
+
reviewed `native.abi.json` ownership contract and the adapter's C header. The
|
|
85
|
+
command uses your explicitly selected Clang; it does not install a toolchain or
|
|
86
|
+
run a package recipe.
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
aug bind header native/include/aug_zlib.h \
|
|
90
|
+
--contract native.abi.json \
|
|
91
|
+
--target aarch64-apple-darwin \
|
|
92
|
+
--clang /path/to/pinned/clang \
|
|
93
|
+
--output .aug-build/checked-bindings
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
For GNU/Linux, select `x86_64-unknown-linux-gnu` or
|
|
97
|
+
`aarch64-unknown-linux-gnu` in the corresponding maintainer environment. Extra
|
|
98
|
+
Clang include, macro and sysroot flags follow `--`. Consumers still need no
|
|
99
|
+
Clang. Keep the maintainer compiler version pinned in your build recipe.
|
|
100
|
+
|
|
101
|
+
The command checks physical function types, fixed-width integers, byte booleans,
|
|
102
|
+
buffer lengths, output pointers, release signatures and the ABI error record's
|
|
103
|
+
size, alignment and field offsets. It rejects unsigned results declared as
|
|
104
|
+
August signed integers. Resource input pointers must match their release
|
|
105
|
+
function, and mutable loans cannot use const pointers. It writes generated
|
|
106
|
+
`src` declarations, the descriptor and `header-check.json` only after every
|
|
107
|
+
check passes. Existing output directories are preserved.
|
|
108
|
+
|
|
109
|
+
Review the generated imports and declarations, then copy them into the package
|
|
110
|
+
beside its handwritten error types and safe API. The command does not invent an
|
|
111
|
+
error class or public wrapper. Include the checked report in native build
|
|
112
|
+
provenance and repeat the check whenever headers, compiler flags or descriptors
|
|
113
|
+
change. The report records compiler, target, header digests and signatures.
|
|
114
|
+
|
|
115
|
+
Ownership, allocator pairing, retention and thread behavior remain promises
|
|
116
|
+
made by the binding author. A matching header cannot establish those promises;
|
|
117
|
+
independent adapter tests must check them. C++ and Rust packages provide C
|
|
118
|
+
adapter headers for this command. Templates, callbacks, variadic calls and
|
|
119
|
+
aggregate values are outside the initial binding profile.
|
|
120
|
+
|
|
121
|
+
## Installation and deployment
|
|
122
|
+
|
|
123
|
+
`aug.lock.json` records the source revision, binding digest, selected native
|
|
124
|
+
archive, compiler pack, and runtime identity. Archive downloads are bounded and
|
|
125
|
+
SHA-256 checked. Extraction rejects links, traversal, duplicate paths, and
|
|
126
|
+
unexpected files. Cached files are checked again before use. Package installation
|
|
127
|
+
does not execute native recipes or npm lifecycle scripts.
|
|
128
|
+
|
|
129
|
+
A failed download or extraction leaves no accepted artifact cache. Disk-full
|
|
130
|
+
errors include the CLI's space-recovery guidance; they do not leave a partially
|
|
131
|
+
installed library selected by a lockfile.
|
|
132
|
+
|
|
133
|
+
Consumers need Node 24 and a supported OS, but do not install LLVM or Clang for
|
|
134
|
+
this profile. August downloads its own pinned LLVM tools and runtime. A missing
|
|
135
|
+
or incompatible artifact produces a diagnostic; it never starts a source build.
|
|
136
|
+
Use `aug run --offline --frozen` after an online installation to require the
|
|
137
|
+
recorded artifacts without downloading replacements.
|
|
138
|
+
|
|
139
|
+
Public GitHub source downloads use HTTPS and do not require Git. If GitHub's
|
|
140
|
+
shared API rate limit stops installation, retry later or set `AUG_GITHUB_TOKEN`
|
|
141
|
+
to authenticate API reads. August sends this token only to `api.github.com`,
|
|
142
|
+
rejects redirects, and never writes it to source caches or lockfiles.
|
|
143
|
+
|
|
144
|
+
Keep the executable together with its adjacent `lib` and `share` directories.
|
|
145
|
+
The libraries load relative to the executable. `share/august-native` preserves
|
|
146
|
+
the selected packages' notices, provenance, and file manifests.
|
|
147
|
+
|
|
148
|
+
## Author a binding
|
|
149
|
+
|
|
150
|
+
Declare an opaque resource with `extern C resource Handle` in an ordinary module.
|
|
151
|
+
Hover, `aug context` and the compiled specification show the native provider,
|
|
152
|
+
supported targets, loan duration and release operation. The compiler checks the
|
|
153
|
+
binding signature and ownership at August call sites. Input retention, thread
|
|
154
|
+
behavior and exception containment are promises made by the native author; these
|
|
155
|
+
tools do not prove the foreign implementation follows them. Context identifies
|
|
156
|
+
native dependencies reached through resolved standalone calls and does not claim
|
|
157
|
+
complete member-dispatch coverage.
|
|
158
|
+
Its `native.abi.json` entry names a leaf release function. Extern declarations
|
|
159
|
+
and descriptor entries must agree; application code imports safe August wrappers
|
|
160
|
+
through `export.aug`. Calls to extern functions remain inside `unsafe`.
|
|
161
|
+
|
|
162
|
+
The initial ABI uses fixed-width scalars, pointer-and-length inputs, copied
|
|
163
|
+
buffers, opaque handles, and checked status errors. C++ wrappers catch exceptions
|
|
164
|
+
and Rust exports contain panics before returning through C. Sharing LLVM does
|
|
165
|
+
not make C++, Rust, and August layouts compatible.
|
|
166
|
+
|
|
167
|
+
Binding maintainers build and test native artifacts with the recorded toolchain.
|
|
168
|
+
Consumers receive those verified artifacts. Callback registration, retained
|
|
169
|
+
loans, foreign threads, native struct layout, GPU tensors, and exporting August
|
|
170
|
+
libraries have not been qualified. See the
|
|
171
|
+
[architecture and backlog](native-interop-llvm-plan.md).
|
|
172
|
+
|
|
173
|
+
Linux maintainers build on Debian 12 so newer hosts do not raise the artifact's
|
|
174
|
+
glibc requirement. The compiler checks the declared minimum; maintainer builds
|
|
175
|
+
inspect each binary's actual symbol-version requirements and dependency closure.
|
|
176
|
+
C++ adapters keep their qualified C++ runtime with the artifact. Source builds
|
|
177
|
+
use Clang, platform headers and Linux relocation tools explicitly, while Rust
|
|
178
|
+
adapters also use their pinned Rust/Cargo toolchain. Consumer installation has
|
|
179
|
+
no automatic source-build fallback.
|
package/docs/packages.md
CHANGED
|
@@ -13,7 +13,7 @@ cd hello-august
|
|
|
13
13
|
aug run
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
The pending 0.21.0 release needs Node.js 24 or later and npm on macOS 14+ ARM64 or GNU/Linux x64/ARM64 with glibc 2.36+. August downloads a verified LLVM/runtime pack; native package consumers do not install a compiler or SDK. GitHub repository imports use the CLI's HTTPS transport without Git. Other Git servers require a local Git client. [Docker](docker.md) and [Dev Containers](dev-containers.md) provide a Linux workspace. The published 0.20.1 CLI still requires a C11 compiler.
|
|
17
17
|
|
|
18
18
|
`aug run` finds `main.aug`, installs source dependencies declared by imports or `main.yaml`, checks the code, prepares the native libraries it needs, and compiles and starts the executable. Later runs reuse those dependencies. `aug check` and `aug spec` read the installed snapshot without fetching packages. Use `aug install` before those commands in a fresh project.
|
|
19
19
|
|
|
@@ -127,4 +127,4 @@ Install [AugScript](https://marketplace.visualstudio.com/items?itemName=augscrip
|
|
|
127
127
|
|
|
128
128
|
The CLI tarball requires its matching core stdlib package. npm normally obtains it automatically. For an archive installation, install the matching CLI and stdlib tarballs together; optional web and crypto packages are regular source libraries.
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
Verified LLVM packs and native artifacts use `~/.cache/augscript/native-artifacts`, keyed by their archive hashes. `AUG_NATIVE_ARTIFACT_CACHE` selects another cache. Source, compiler, runtime, and platform selections remain in `aug.lock.json`. The C migration reference uses the older `AUG_NATIVE_HOME` source-build cache. The [native package guide](native-packages.md) covers ownership, platform requirements, and publishing; [release process](releasing.md) covers the compiler distribution.
|
package/docs/performance.md
CHANGED
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
This page publishes measurements for specific August programs alongside C, Node, and Python versions. Read the graphs for a quick comparison, inspect each program below, and use the reproduction commands to measure work that resembles your application.
|
|
4
4
|
|
|
5
|
-
The recorded suite
|
|
5
|
+
The recorded suite uses the August 0.21.0 candidate and LLVM 23.1.2 native output. A result for one workload and host does not establish a general speed advantage or production readiness. [Readiness](production-readiness.md) covers reliability and deployment evidence separately.
|
|
6
|
+
|
|
7
|
+
The [extended qualification](qualification-results.md) adds eight C comparisons for numeric, collection and application work. The [safety gyms](safety-gyms.md) exercise results, rejected operations, cleanup and memory checks separately. Each measured program has a downloadable project and a code/spec view in the [gallery](examples/index.md#measured-programs).
|
|
8
|
+
|
|
9
|
+
The [DGX Spark results](dgx-spark.md) record a second physical ARM64 host, including all benchmark programs, safety gyms and real public native imports. Read each host's measurements separately.
|
|
6
10
|
|
|
7
11
|
## Read the graphs
|
|
8
12
|
|
|
9
13
|
Execution and memory bars use **lower is better**. HTTP throughput uses **higher is better**. Read the workload name and units before comparing: a 20,000-entry map and a two-million-step CPU loop do different amounts of work. The execution panels have separate linear scales; compare implementations within a panel. Tables provide exact values and remain readable on a phone.
|
|
10
14
|
|
|
11
|
-
All results below were recorded on
|
|
15
|
+
All results below were recorded on October 2, 2026 (UTC): Apple M5, macOS Darwin 25.6.0, ARM64, LLVM 23.1.2 for August, Apple Clang 21 for the C reference, Node 24.18.0, and CPython 3.12.14. August and C use `-O2` without LTO. [Raw samples, checksums, build timings and environment](benchmark-results.json) include the LLVM tool and runtime identities.
|
|
12
16
|
|
|
13
17
|
## Execution time
|
|
14
18
|
|
|
@@ -18,15 +22,15 @@ All results below were recorded on September 29, 2026: Apple M5, macOS Darwin 25
|
|
|
18
22
|
|
|
19
23
|
| Workload | August | C | Node | Python |
|
|
20
24
|
| --- | ---: | ---: | ---: | ---: |
|
|
21
|
-
| Startup | 1.
|
|
22
|
-
| CPU · 2 million iterations | 7.
|
|
23
|
-
| Map + Set · 20,000 entries | 2.
|
|
24
|
-
| Map + Set · 200,000 entries |
|
|
25
|
-
| JSON · 5,000 round trips |
|
|
25
|
+
| Startup | 1.43 ms | 1.19 ms | 19.31 ms | 16.18 ms |
|
|
26
|
+
| CPU · 2 million iterations | 7.74 ms | 8.38 ms | 30.64 ms | 252.62 ms |
|
|
27
|
+
| Map + Set · 20,000 entries | 2.71 ms | 1.64 ms | 22.58 ms | 18.81 ms |
|
|
28
|
+
| Map + Set · 200,000 entries | 16.81 ms | 6.31 ms | 37.96 ms | 40.36 ms |
|
|
29
|
+
| JSON · 5,000 round trips | 7.23 ms | 1.94 ms | 21.16 ms | 31.84 ms |
|
|
26
30
|
|
|
27
31
|
[benchmark-execution-end]: #
|
|
28
32
|
|
|
29
|
-
Times include a fresh process's startup and exclude compilation: 3 warmups and
|
|
33
|
+
Times include a fresh process's startup and exclude compilation: 3 warmups and 60 measured runs for each implementation, with the execution order rotated. The measurement client runs outside the compiler process, and every executable must produce the expected checksum. Node and Python start a new interpreter each time; these are batch timings, not warmed server-loop or steady-state JIT timings. The startup row helps make that cost visible; subtracting medians would not establish a new measured result.
|
|
30
34
|
|
|
31
35
|
The programs below are the actual benchmark sources. The suite checks their printed results against the C, Node and Python references on every run.
|
|
32
36
|
|
|
@@ -34,7 +38,7 @@ The C reference is tailored to these inputs: it preallocates integer tables and
|
|
|
34
38
|
|
|
35
39
|
[benchmark-summary-start]: #
|
|
36
40
|
|
|
37
|
-
The CPU program takes **7.
|
|
41
|
+
The CPU program takes **7.74 ms** in August and **8.38 ms** in C on this host. The large-collection program takes **16.81 ms** in August. These are measurements of the shown programs, not guarantees for other applications. JSON batch time includes interpreter startup for Node and Python; it does not establish a universal JSON-throughput advantage.
|
|
38
42
|
|
|
39
43
|
[benchmark-summary-end]: #
|
|
40
44
|
|
|
@@ -47,6 +51,7 @@ Save this as `main.aug`. Its result is `7`; the measurement includes starting an
|
|
|
47
51
|
**main.aug**
|
|
48
52
|
|
|
49
53
|
```aug project=benchmark-startup file=main.aug
|
|
54
|
+
// aug-spec: "main.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
50
55
|
print(value=7)
|
|
51
56
|
```
|
|
52
57
|
|
|
@@ -62,6 +67,7 @@ This loop performs two million dependent integer steps. Its result must be `8196
|
|
|
62
67
|
**main.aug**
|
|
63
68
|
|
|
64
69
|
```aug project=benchmark-cpu file=main.aug
|
|
70
|
+
// aug-spec: "main.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
65
71
|
// A loop-carried dependency prevents removal of the computation.
|
|
66
72
|
int state = 123
|
|
67
73
|
int index = 0
|
|
@@ -84,6 +90,7 @@ This creates a Map and Set, inserts 20,000 values, checks membership, and sums v
|
|
|
84
90
|
**main.aug**
|
|
85
91
|
|
|
86
92
|
```aug project=benchmark-collections file=main.aug
|
|
93
|
+
// aug-spec: "main.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
87
94
|
own Map<int, int> values = {}
|
|
88
95
|
own Set<int> unique = {}
|
|
89
96
|
int index = 0
|
|
@@ -111,13 +118,15 @@ These two files belong in one folder. The program parses JSON, reads a typed rec
|
|
|
111
118
|
**data.aug**
|
|
112
119
|
|
|
113
120
|
```aug project=benchmark-json file=data.aug
|
|
121
|
+
// aug-spec: "data.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
114
122
|
record Payload(int id, string message, List<int> values)
|
|
115
123
|
```
|
|
116
124
|
|
|
117
125
|
**main.aug**
|
|
118
126
|
|
|
119
127
|
```aug project=benchmark-json file=main.aug
|
|
120
|
-
|
|
128
|
+
// aug-spec: "main.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
129
|
+
import parse from json
|
|
121
130
|
import Payload from data
|
|
122
131
|
int checksum = 0
|
|
123
132
|
int index = 0
|
|
@@ -133,6 +142,15 @@ catch JsonError error:
|
|
|
133
142
|
exit(status=1)
|
|
134
143
|
```
|
|
135
144
|
|
|
145
|
+
**main.yaml**
|
|
146
|
+
|
|
147
|
+
```yaml project=benchmark-json file=main.yaml
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
packages:
|
|
151
|
+
json: "https://github.com/GreenPandaStudios/augscript/src/stdlib/json#v0.19.0"
|
|
152
|
+
```
|
|
153
|
+
|
|
136
154
|
|
|
137
155
|
[benchmark-source-json-end]: #
|
|
138
156
|
|
|
@@ -144,13 +162,13 @@ catch JsonError error:
|
|
|
144
162
|
|
|
145
163
|
| Clients | August req/sec | Node req/sec | August p95 latency | Node p95 latency |
|
|
146
164
|
| ---: | ---: | ---: | ---: | ---: |
|
|
147
|
-
| 1 |
|
|
148
|
-
| 16 |
|
|
149
|
-
| 64 |
|
|
165
|
+
| 1 | 21,046 | 23,679 | 0.06 ms | 0.05 ms |
|
|
166
|
+
| 16 | 58,708 | 55,557 | 0.46 ms | 0.49 ms |
|
|
167
|
+
| 64 | 54,436 | 51,730 | 2.08 ms | 1.94 ms |
|
|
150
168
|
|
|
151
169
|
[benchmark-http-end]: #
|
|
152
170
|
|
|
153
|
-
A real August `GET /bench` endpoint returns a newly constructed typed JSON record. The Node reference constructs and serializes the same response. Both run on loopback with HTTP/1.1 keep-alive, 1,000 warmup requests and
|
|
171
|
+
A real August `GET /bench` endpoint returns a newly constructed typed JSON record. The Node reference constructs and serializes the same response. Both run on loopback with HTTP/1.1 keep-alive, 1,000 warmup requests and five fresh-server rounds of 5,000 measured requests per concurrency level. Every response must have status 200, JSON content type, and the exact expected data. The measured runs had zero errors. p95 is the median of the five per-round p95 latencies; graph error bars show observed throughput min/max, not confidence intervals.
|
|
154
172
|
|
|
155
173
|
The Node load generator runs on the same machine and consumes CPU. This closed-loop test has no TLS, authentication, logging, database, outbound network calls or slow clients. Its numbers are endpoint microbenchmark throughput, not a supported production capacity or service-level guarantee. HTTP/2, HTTP/3 and streaming are not benchmarked here.
|
|
156
174
|
|
|
@@ -165,14 +183,16 @@ Place these files in one folder. Every request constructs a `Reply` and returns
|
|
|
165
183
|
**routes.aug**
|
|
166
184
|
|
|
167
185
|
```aug project=benchmark-http file=routes.aug
|
|
186
|
+
// aug-spec: "routes.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
168
187
|
record Reply(int id, string message)
|
|
169
|
-
endpoint GET "/bench" as reply()
|
|
188
|
+
endpoint GET "/bench" as reply() :
|
|
170
189
|
return Reply(id=7, message="hello")
|
|
171
190
|
```
|
|
172
191
|
|
|
173
192
|
**main.aug**
|
|
174
193
|
|
|
175
194
|
```aug project=benchmark-http file=main.aug
|
|
195
|
+
// aug-spec: "main.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
176
196
|
import reply from routes
|
|
177
197
|
serve reply on port 0
|
|
178
198
|
```
|
|
@@ -267,7 +287,8 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === resolve(process.argv[1
|
|
|
267
287
|
for (let i = 0; i < rounds; i++) {
|
|
268
288
|
await httpLoad(url, concurrency, warmup, expected);
|
|
269
289
|
const result = await httpLoad(url, concurrency, requests, expected);
|
|
270
|
-
delete result.latencyMs.samples;
|
|
290
|
+
if(!process.argv.includes('--raw-samples'))delete result.latencyMs.samples;
|
|
291
|
+
results.push(result);
|
|
271
292
|
}
|
|
272
293
|
const measured = statistics(results.map(result => result.requestsPerSecond));
|
|
273
294
|
console.log(JSON.stringify({url, concurrency, warmup, rounds:results, requestsPerSecond:measured}, null, 2));
|
|
@@ -287,11 +308,11 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === resolve(process.argv[1
|
|
|
287
308
|
|
|
288
309
|
| Workload | August | C | Node | Python |
|
|
289
310
|
| --- | ---: | ---: | ---: | ---: |
|
|
290
|
-
| Startup | 1.3 MiB | 1.
|
|
291
|
-
| CPU · 2 million iterations | 1.3 MiB | 1.
|
|
292
|
-
| Map + Set · 20,000 entries | 4.
|
|
293
|
-
| Map + Set · 200,000 entries |
|
|
294
|
-
| JSON · 5,000 round trips | 1.8 MiB | 1.5 MiB | 47.4 MiB |
|
|
311
|
+
| Startup | 1.3 MiB | 1.3 MiB | 46.0 MiB | 8.4 MiB |
|
|
312
|
+
| CPU · 2 million iterations | 1.3 MiB | 1.3 MiB | 52.2 MiB | 8.4 MiB |
|
|
313
|
+
| Map + Set · 20,000 entries | 4.7 MiB | 4.4 MiB | 56.9 MiB | 13.2 MiB |
|
|
314
|
+
| Map + Set · 200,000 entries | 36.8 MiB | 25.4 MiB | 91.1 MiB | 55.3 MiB |
|
|
315
|
+
| JSON · 5,000 round trips | 1.8 MiB | 1.5 MiB | 47.4 MiB | 9.7 MiB |
|
|
295
316
|
|
|
296
317
|
[benchmark-memory-end]: #
|
|
297
318
|
|
|
@@ -299,7 +320,7 @@ These are medians of three separate peak-RSS measurements through `/usr/bin/time
|
|
|
299
320
|
|
|
300
321
|
## Before and after
|
|
301
322
|
|
|
302
|
-
The
|
|
323
|
+
The earlier September 29 measurements and current LLVM measurements use the same August programs on this host. Versions and backends differ; the earlier HTTP run used three rounds and the current run uses five. The current suite also isolates each load client in a fresh process. This is a historical comparison of observed performance, not a controlled estimate of one compiler change. Shorter bars are faster for execution time; taller points are faster for HTTP. [Earlier measurement summaries](benchmark-baseline.json) preserve the baseline.
|
|
303
324
|
|
|
304
325
|

|
|
305
326
|
|
|
@@ -307,13 +328,13 @@ The same August programs and measurement settings were run on this machine befor
|
|
|
307
328
|
|
|
308
329
|
| August workload | Before | Current | Current relative to before |
|
|
309
330
|
| --- | ---: | ---: | ---: |
|
|
310
|
-
| CPU · 2 million iterations | 36.65 ms | 7.
|
|
311
|
-
| Map + Set · 20,000 entries | 4.68 ms | 2.
|
|
312
|
-
| Map + Set · 200,000 entries | 47.90 ms |
|
|
313
|
-
| HTTP · 1 clients | 25,273 req/sec |
|
|
314
|
-
| HTTP · 16 clients | 62,719 req/sec |
|
|
315
|
-
| HTTP · 64 clients | 30,693 req/sec |
|
|
316
|
-
| Map + Set · 200k peak memory | 61.9 MiB |
|
|
331
|
+
| CPU · 2 million iterations | 36.65 ms | 7.74 ms | 4.73× faster |
|
|
332
|
+
| Map + Set · 20,000 entries | 4.68 ms | 2.71 ms | 1.72× faster |
|
|
333
|
+
| Map + Set · 200,000 entries | 47.90 ms | 16.81 ms | 2.85× faster |
|
|
334
|
+
| HTTP · 1 clients | 25,273 req/sec | 21,046 req/sec | 0.83× throughput |
|
|
335
|
+
| HTTP · 16 clients | 62,719 req/sec | 58,708 req/sec | 0.94× throughput |
|
|
336
|
+
| HTTP · 64 clients | 30,693 req/sec | 54,436 req/sec | 1.77× throughput |
|
|
337
|
+
| Map + Set · 200k peak memory | 61.9 MiB | 36.8 MiB | 40% less |
|
|
317
338
|
|
|
318
339
|
[benchmark-improvements-end]: #
|
|
319
340
|
|
|
@@ -12,6 +12,8 @@ The same-app [OpenID Connect example](examples/oidc-login/index.md) proves integ
|
|
|
12
12
|
|
|
13
13
|
## Dependencies and licenses
|
|
14
14
|
|
|
15
|
+
The [safety gyms](safety-gyms.md) now collect generated LLVM cases, rejected contracts, behavioral mutations and the larger runtime circuits in one replayable report. [Recorded qualification](qualification-results.md) shows the actual execution counts and skipped checks. The expanded performance suite measures eight further programs against C. These checks strengthen the release evidence without establishing universal safety or speed.
|
|
16
|
+
|
|
15
17
|
The CLI uses its matching core August library and `tar` 7.5.22 for registry archive extraction. The extension bundles that parser and its JavaScript dependencies. The VS Code extension's npm audit currently reports zero advisories. The wiki build uses VitePress and a pinned Vite override; run `npm audit` before each release. npm audit only covers npm packages and cannot certify native code or deployment configuration.
|
|
16
18
|
|
|
17
19
|
| Dependency | Role | License from upstream | Distribution consideration |
|
|
@@ -31,10 +33,18 @@ The exact versions, archive URLs, and SHA-256 values are in [`native-dependencie
|
|
|
31
33
|
|
|
32
34
|
## Release gates still open
|
|
33
35
|
|
|
36
|
+
The [LLVM/native candidate](native-implementation.md) supports real repository
|
|
37
|
+
imports of CPU LibTorch, SQLite, zlib and Rust BLAKE3 on macOS ARM64 and
|
|
38
|
+
GNU/Linux x86-64/ARM64 with glibc 2.36+. Installed CLI checks cover public
|
|
39
|
+
downloads, exact locks, offline reuse, relocated bundles and finite ownership
|
|
40
|
+
cases without native tools or development headers. Language parity, DWARF and
|
|
41
|
+
core sanitizers are implemented. The 0.21.0 candidate selects LLVM by default;
|
|
42
|
+
its updated platform gates and public compiler release remain pending.
|
|
43
|
+
|
|
34
44
|
- **Platform support:** the full pinned web/crypto bootstrap passes on macOS ARM and Linux ARM. [Docker build/run bases](docker.md) run core, web, and crypto programs on Linux. Linux x86-64 runs in CI; other platforms remain unverified.
|
|
35
45
|
- **Concurrency and ownership:** tasks use one OS thread. The [conformance suite](language-conformance.md) exercises injected captures, mutation after a child starts inside `borrow`, owned `Shared<T>` cleanup, branch joins, cancellation, and the public `Task<T>` error contract. A 1.0 support claim still depends on the platform, distribution, and compatibility gates.
|
|
36
46
|
- **Security and reliability:** HTTP and OIDC need broad protocol conformance, durable credentials and keys, rotation, long-running load tests, and deployment guidance. The [gap ledger](web-library-gaps.md) records the precise work.
|
|
37
47
|
- **Package and ABI stability:** the [matching 0.19.0 npm packages](packages.md#npm-registry) are published and their core starter workflow is verified. Reproducible releases, compatibility policy, and native adapter ABI still need stable release gates.
|
|
38
48
|
- **Operational behavior:** failure handling, cancellation, instrumentation, platform builds, and resource ceilings need repeated CI and field testing.
|
|
39
49
|
|
|
40
|
-
For a trial deployment, pin the compiler and native lock, run the project's tests and `aug spec --check`, review
|
|
50
|
+
For a trial deployment, pin the compiler and native lock, run the project's tests and `aug spec --check`, review its native artifact and deployment inputs, and validate the executable under your own load and failure conditions. Track the [gap ledger](web-library-gaps.md) before promising production service levels.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
generatedBy: scripts/render-qualification.mjs
|
|
3
|
+
---
|
|
4
|
+
# Extended performance and safety results
|
|
5
|
+
|
|
6
|
+
These results cover the August 0.21.0 candidate on **Apple M5**, darwin 25.6.0 arm64, recorded 2026-10-02. August uses LLVM 23.1.2. Every measured result matched its required output. They do not establish a general C-speed or production-safety guarantee.
|
|
7
|
+
|
|
8
|
+
## Eight more C comparisons
|
|
9
|
+
|
|
10
|
+
::: benchmark-chart
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
:::
|
|
17
|
+
|
|
18
|
+
Each value is the median of 30 fresh executable processes after 3 warmups. Order rotates within a separate measurement process. Timings include startup and exclude compilation. Both implementations use O2 without LTO or fast-math. [Raw samples, build times and code sizes](kernel-results.json) also include the same August programs compiled through the C migration backend.
|
|
19
|
+
|
|
20
|
+
| Program and code/spec | Work per run | August | C | August / C |
|
|
21
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
22
|
+
| [Floating-point loop](examples/float-benchmark/main.md) | 1,000,000 | 2.29 ms | 1.69 ms | 1.36 |
|
|
23
|
+
| [Labeled function calls](examples/calls-benchmark/main.md) | 200,000 | 2.34 ms | 1.77 ms | 1.33 |
|
|
24
|
+
| [List traversal](examples/list-benchmark/main.md) | 100,000 | 1.99 ms | 1.20 ms | 1.66 |
|
|
25
|
+
| [String processing](examples/strings-benchmark/main.md) | 20,000 | 9.30 ms | 2.67 ms | 3.48 |
|
|
26
|
+
| [Map deletion and refill](examples/map-churn-benchmark/main.md) | 4,000 | 4.78 ms | 4.18 ms | 1.14 |
|
|
27
|
+
| [Checked failures](examples/errors-benchmark/main.md) | 20,000 | 1.37 ms | 1.13 ms | 1.21 |
|
|
28
|
+
| [Record allocation](examples/records-benchmark/main.md) | 50,000 | 9.40 ms | 2.01 ms | 4.66 |
|
|
29
|
+
| [Task scheduling](examples/tasks-benchmark/main.md) | 2,000 | 3.89 ms | 1.19 ms | 3.27 |
|
|
30
|
+
|
|
31
|
+
Ratios above 1 mean August took longer. The C references use concrete values and explicit cleanup. Their ordered map uses linear searches and their task case makes sequential calls; it does not pay for a scheduler. The string reference copies each part, while August also creates managed strings and a list. Records retain individually allocated values in both programs, with different layouts and lifetime tracking. These are visible differences, not interchangeable implementations. [Read the C references](https://github.com/GreenPandaStudios/augscript/blob/main/benchmarks/kernels.c) before drawing conclusions.
|
|
32
|
+
|
|
33
|
+
The float program checks its exact accumulated binary-fraction result. The call loop carries each result into the next call. Lists and records retain data and read it afterward. Map deletion checks reinsertion order as well as values. Error cases verify both the sum and number of failures; task cases verify the joined sum. Their [downloadable projects](examples/index.md#measured-programs) show code beside compiled specs in either indentation or braces style.
|
|
34
|
+
|
|
35
|
+
## Safety qualification
|
|
36
|
+
|
|
37
|
+
Seed **877966**, generator version **1**, 256 generated vectors per exercise plus fixed edge cases. Both development and optimized LLVM builds ran the corpus.
|
|
38
|
+
|
|
39
|
+
| Exercise | Vectors executed across both builds | Result |
|
|
40
|
+
| --- | ---: | --- |
|
|
41
|
+
| arithmetic | 516 | Passed; both behavioral mutations detected |
|
|
42
|
+
| floating-point | 520 | Passed; both behavioral mutations detected |
|
|
43
|
+
| collections | 516 | Passed; both behavioral mutations detected |
|
|
44
|
+
| control-flow | 516 | Passed; both behavioral mutations detected |
|
|
45
|
+
| checked-bounds | 520 | Passed; both behavioral mutations detected |
|
|
46
|
+
| cleanup | 512 | Passed; both behavioral mutations detected |
|
|
47
|
+
| tasks | 512 | Passed; both behavioral mutations detected |
|
|
48
|
+
|
|
49
|
+
The suite executed **3612 generated/edge-case checks**, rejected **8 forbidden contracts**, and detected **14 valid behavioral mutants**. Each mutant compiled and ran safely; its wrong result or cleanup count differed from the independent oracle.
|
|
50
|
+
|
|
51
|
+
| Additional circuit | Executed tests | Skipped tests | Result |
|
|
52
|
+
| --- | ---: | ---: | --- |
|
|
53
|
+
| source-mutations | 3 | 0 | passed |
|
|
54
|
+
| ownership-concurrency | 53 | 0 | passed |
|
|
55
|
+
| native-boundaries | 2 | 0 | passed |
|
|
56
|
+
| package-integrity | 19 | 0 | passed |
|
|
57
|
+
| http-boundaries | 6 | 0 | passed |
|
|
58
|
+
| sanitizers | 4 instrumented programs + LLVM negative control | 0 | passed |
|
|
59
|
+
|
|
60
|
+
[The full report](gym-results.json) includes original and faulty source units, inputs, expected and actual results, cleanup counts, compiler source identity and commands. Source mutation includes 5,000 parser cases and 1,000 checker cases. Core sanitizers instrument August LLVM accesses and the C runtime; they do not instrument the interiors of prebuilt foreign libraries or establish a whole-process leak proof.
|
|
61
|
+
|
|
62
|
+
The [safety gym guide](safety-gyms.md) explains each gate and its limits. [Contributor commands](contributing-benchmarks.md) reproduce these reports or explore another seed. New-platform CI reports remain separate until that target completes qualification.
|
|
63
|
+
|
|
64
|
+
## Source identity
|
|
65
|
+
|
|
66
|
+
Both reports use source SHA-256 `23c9155410c0af115173e99c583e86374df5b83e22d9ce82aeabeb19405384a0`. This fingerprints compiler, runtime, native platform inputs, package contracts, configuration, dependencies, test fixtures, generators and measured programs. Recorded evidence remains tied to that snapshot; a later change requires a new run.
|
package/docs/reference.md
CHANGED
|
@@ -116,6 +116,19 @@ Constraints name interfaces. Multiple constraints use `and`. Only interfaces dec
|
|
|
116
116
|
|
|
117
117
|
A class starts with its name and ends its header with `implements Interface`. There is no `class` or `function` prefix and no class inheritance. Interfaces can extend several interfaces and supply default methods; conflicting inherited defaults require an explicit override. Interfaces have methods and no fields.
|
|
118
118
|
|
|
119
|
+
An initializer can reject construction with a checked error. Declare that error
|
|
120
|
+
before `implements`, as in `Session(own Handle handle) unless SessionError
|
|
121
|
+
implements ActiveSession`. Callers catch or propagate the error. If construction
|
|
122
|
+
fails after ownership transfers, August releases the partial object and its owned
|
|
123
|
+
fields before the error reaches the caller. `drop` runs only on a successfully
|
|
124
|
+
constructed object. Partial cleanup releases
|
|
125
|
+
initialized owned fields and keeps the constructor error; it does not run `drop`
|
|
126
|
+
against fields that might not have been initialized. Class constructors require a written
|
|
127
|
+
`unless` contract; record validation can infer its failures.
|
|
128
|
+
Fallible class constructors currently require explicit construction. They cannot
|
|
129
|
+
be DI binding targets; startup and injected-construction failure handling need a
|
|
130
|
+
separate contract before that form is supported.
|
|
131
|
+
|
|
119
132
|
Header inputs become fields. Fields are read-only after initialization unless marked `mutable`. Public names grant access; names starting with `_` keep storage private. Separate a public constructor label from private storage with `int initial to _count`. The shorthand `int _count` exposes the input label `count`.
|
|
120
133
|
|
|
121
134
|
```aug project=state-guide file=main.aug
|
|
@@ -296,6 +309,17 @@ An error satisfies Error. A body infers escaping errors. A bodyless signature or
|
|
|
296
309
|
|
|
297
310
|
`start` evaluates its receiver and arguments immediately; their errors belong to the scheduling statement. The scheduled operation's errors belong to a `wait for` or its owning scope's implicit join. Unobserved sibling failures can reach any wait in that group. Grouped waits observe every selected child, including cancellation cleanup, and rethrow the first failure. A helper awaiting a `Task<T>` parameter declares or handles `Error`, since that public type does not specify a narrower error contract yet.
|
|
298
311
|
|
|
312
|
+
A task can take an owned input. Scheduling transfers cleanup responsibility to
|
|
313
|
+
the child, including when cancellation occurs before its function runs. A task
|
|
314
|
+
cannot return an `own` value: `Task<T>` has no owned-result transfer contract.
|
|
315
|
+
Create and release resources inside the task, then return immutable data.
|
|
316
|
+
|
|
317
|
+
Owned locals in a `try` or `catch` body are released when that body exits, before
|
|
318
|
+
its `always` block runs. This order applies to normal execution, returns and
|
|
319
|
+
errors. Values owned by the enclosing function remain live until that function
|
|
320
|
+
exits. Cleanup suspends pending errors and cancellation while a `drop` method
|
|
321
|
+
runs, then restores them.
|
|
322
|
+
|
|
299
323
|
An error already leaving the parent remains the reported error if cancelling a child causes its cleanup to fail. `always` cleanup still runs for that child. A `return` from a scope joins its children before the caller receives the result.
|
|
300
324
|
|
|
301
325
|
```aug project=errors-guide file=main.aug
|