@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.
Files changed (295) hide show
  1. package/README.md +1 -1
  2. package/docs/assets/benchmarks/execution.svg +774 -637
  3. package/docs/assets/benchmarks/http.svg +278 -249
  4. package/docs/assets/benchmarks/improvements.svg +66 -66
  5. package/docs/assets/benchmarks/kernels-mobile.svg +1 -0
  6. package/docs/assets/benchmarks/kernels.svg +1 -0
  7. package/docs/assets/benchmarks/memory.svg +153 -153
  8. package/docs/benchmark-results.json +227089 -90363
  9. package/docs/compatibility.md +6 -6
  10. package/docs/contributing-benchmarks.md +36 -6
  11. package/docs/dev-containers.md +8 -15
  12. package/docs/dgx-consumers.json +122 -0
  13. package/docs/dgx-gyms.json +784 -0
  14. package/docs/dgx-kernels.json +1170 -0
  15. package/docs/dgx-performance.json +227849 -0
  16. package/docs/dgx-spark.md +64 -0
  17. package/docs/diagnostics.md +1 -1
  18. package/docs/docker.md +16 -17
  19. package/docs/example-projects.json +32 -0
  20. package/docs/examples/approved-design/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
  21. package/docs/examples/approved-design/domain/app.md +4 -4
  22. package/docs/examples/approved-design/main.md +2 -2
  23. package/docs/examples/calls-benchmark/index.md +36 -0
  24. package/docs/examples/calls-benchmark/main.md +78 -0
  25. package/docs/examples/calls-benchmark/operations.md +60 -0
  26. package/docs/examples/developer-workflow/calculator.md +5 -5
  27. package/docs/examples/developer-workflow/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
  28. package/docs/examples/developer-workflow/logging/console.md +2 -2
  29. package/docs/examples/developer-workflow/logging/logger.md +2 -2
  30. package/docs/examples/developer-workflow/main.md +2 -2
  31. package/docs/examples/errors-benchmark/index.md +36 -0
  32. package/docs/examples/errors-benchmark/main.md +92 -0
  33. package/docs/examples/errors-benchmark/operations.md +65 -0
  34. package/docs/examples/float-benchmark/index.md +35 -0
  35. package/docs/examples/float-benchmark/main.md +75 -0
  36. package/docs/examples/generic-di/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
  37. package/docs/examples/generic-di/main.md +2 -2
  38. package/docs/examples/generic-di/types.md +3 -3
  39. package/docs/examples/hello/app/greeter.md +3 -3
  40. package/docs/examples/hello/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
  41. package/docs/examples/hello/logging/console.md +2 -2
  42. package/docs/examples/hello/logging/logger.md +2 -2
  43. package/docs/examples/hello/main.md +2 -2
  44. package/docs/examples/index.md +18 -1
  45. package/docs/examples/interceptors/app.md +5 -5
  46. package/docs/examples/interceptors/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
  47. package/docs/examples/interceptors/interceptors.md +2 -2
  48. package/docs/examples/interceptors/logging.md +3 -3
  49. package/docs/examples/interceptors/main.md +2 -2
  50. package/docs/examples/list-benchmark/index.md +35 -0
  51. package/docs/examples/list-benchmark/main.md +78 -0
  52. package/docs/examples/map-churn-benchmark/index.md +35 -0
  53. package/docs/examples/map-churn-benchmark/main.md +106 -0
  54. package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/api.md +104 -0
  55. package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.md +54 -0
  56. package/docs/examples/native-blake3/dependencies/packages/@greenpandastudios/aug-blake3/0.1.3/native.abi-json.md +48 -0
  57. package/docs/examples/native-blake3/hashing.md +93 -0
  58. package/docs/examples/native-blake3/index.md +38 -0
  59. package/docs/examples/native-blake3/main.md +73 -0
  60. package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/api.md +406 -0
  61. package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.md +51 -0
  62. package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.md +63 -0
  63. package/docs/examples/native-pytorch/dependencies/packages/@greenpandastudios/aug-pytorch/0.1.4/native.abi-json.md +161 -0
  64. package/docs/examples/native-pytorch/index.md +38 -0
  65. package/docs/examples/native-pytorch/main.md +73 -0
  66. package/docs/examples/native-pytorch/tensors.md +123 -0
  67. package/docs/examples/native-sqlite/database.md +116 -0
  68. package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/api.md +284 -0
  69. package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.md +51 -0
  70. package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.md +75 -0
  71. package/docs/examples/native-sqlite/dependencies/packages/@greenpandastudios/aug-sqlite/0.1.3/native.abi-json.md +119 -0
  72. package/docs/examples/native-sqlite/index.md +38 -0
  73. package/docs/examples/native-sqlite/main.md +73 -0
  74. package/docs/examples/native-zlib/compression.md +99 -0
  75. package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/api.md +153 -0
  76. package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.md +54 -0
  77. package/docs/examples/native-zlib/dependencies/packages/@greenpandastudios/aug-zlib/0.1.3/native.abi-json.md +76 -0
  78. package/docs/examples/native-zlib/index.md +38 -0
  79. package/docs/examples/native-zlib/main.md +78 -0
  80. package/docs/examples/new-syntax/console.md +2 -2
  81. package/docs/examples/new-syntax/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
  82. package/docs/examples/new-syntax/greeter.md +3 -3
  83. package/docs/examples/new-syntax/logger.md +2 -2
  84. package/docs/examples/new-syntax/main.md +2 -2
  85. package/docs/examples/ownership-transfer/dependencies/august/{0.20.1 → 0.21.0}/io/contracts.md +3 -3
  86. package/docs/examples/ownership-transfer/main.md +2 -2
  87. package/docs/examples/ownership-transfer/resource.md +2 -2
  88. package/docs/examples/packages-math/aug-package-json.md +1 -1
  89. package/docs/examples/records-benchmark/data.md +55 -0
  90. package/docs/examples/records-benchmark/index.md +36 -0
  91. package/docs/examples/records-benchmark/main.md +85 -0
  92. package/docs/examples/strings-benchmark/index.md +35 -0
  93. package/docs/examples/strings-benchmark/main.md +76 -0
  94. package/docs/examples/tasks-benchmark/index.md +36 -0
  95. package/docs/examples/tasks-benchmark/main.md +89 -0
  96. package/docs/examples/tasks-benchmark/operations.md +58 -0
  97. package/docs/getting-started.md +3 -3
  98. package/docs/grammar.md +2 -2
  99. package/docs/gym-results.json +784 -0
  100. package/docs/implementation-map.md +6 -0
  101. package/docs/index.md +1 -1
  102. package/docs/kernel-results.json +1170 -0
  103. package/docs/language-conformance.md +6 -0
  104. package/docs/language-constructs.md +9 -1
  105. package/docs/learn/index.md +1 -1
  106. package/docs/maintaining-docs.md +1 -1
  107. package/docs/native-implementation.md +276 -0
  108. package/docs/native-interop-llvm-plan.md +342 -0
  109. package/docs/native-package-examples.md +684 -0
  110. package/docs/native-packages.md +179 -0
  111. package/docs/packages.md +2 -2
  112. package/docs/performance.md +50 -29
  113. package/docs/production-readiness.md +11 -1
  114. package/docs/public/downloads/approved-design.zip +0 -0
  115. package/docs/public/downloads/calls-benchmark.zip +0 -0
  116. package/docs/public/downloads/developer-workflow.zip +0 -0
  117. package/docs/public/downloads/errors-benchmark.zip +0 -0
  118. package/docs/public/downloads/float-benchmark.zip +0 -0
  119. package/docs/public/downloads/generic-di.zip +0 -0
  120. package/docs/public/downloads/hello.zip +0 -0
  121. package/docs/public/downloads/interceptors.zip +0 -0
  122. package/docs/public/downloads/json-benchmark.zip +0 -0
  123. package/docs/public/downloads/list-benchmark.zip +0 -0
  124. package/docs/public/downloads/map-churn-benchmark.zip +0 -0
  125. package/docs/public/downloads/native-blake3.zip +0 -0
  126. package/docs/public/downloads/native-pytorch.zip +0 -0
  127. package/docs/public/downloads/native-sqlite.zip +0 -0
  128. package/docs/public/downloads/native-zlib.zip +0 -0
  129. package/docs/public/downloads/new-syntax.zip +0 -0
  130. package/docs/public/downloads/oidc-login.zip +0 -0
  131. package/docs/public/downloads/ownership-transfer.zip +0 -0
  132. package/docs/public/downloads/packages-app.zip +0 -0
  133. package/docs/public/downloads/packages-math.zip +0 -0
  134. package/docs/public/downloads/records-benchmark.zip +0 -0
  135. package/docs/public/downloads/strings-benchmark.zip +0 -0
  136. package/docs/public/downloads/tasks-benchmark.zip +0 -0
  137. package/docs/qualification-results.md +66 -0
  138. package/docs/reference.md +24 -0
  139. package/docs/releasing.md +81 -6
  140. package/docs/research/libtorch-native-qualification.md +115 -0
  141. package/docs/research/native-interop-llvm.md +197 -0
  142. package/docs/research/qualification-methods.md +15 -0
  143. package/docs/roadmap.md +1 -0
  144. package/docs/safety-gyms.md +41 -0
  145. package/docs/tooling.md +16 -15
  146. package/docs/web-library-gaps.md +1 -1
  147. package/docs/web.md +4 -0
  148. package/examples/approved-design/.aug-spec/manifest.json +3 -3
  149. package/examples/approved-design/domain/app.aug.md +4 -4
  150. package/examples/approved-design/main.aug.md +2 -2
  151. package/examples/developer-workflow/.aug-spec/manifest.json +3 -3
  152. package/examples/developer-workflow/calculator.aug.md +5 -5
  153. package/examples/developer-workflow/logging/console.aug.md +2 -2
  154. package/examples/developer-workflow/logging/logger.aug.md +2 -2
  155. package/examples/developer-workflow/main.aug.md +2 -2
  156. package/examples/generic-di/.aug-spec/manifest.json +3 -3
  157. package/examples/generic-di/main.aug.md +2 -2
  158. package/examples/generic-di/types.aug.md +3 -3
  159. package/examples/hello/.aug-spec/manifest.json +3 -3
  160. package/examples/hello/app/greeter.aug.md +3 -3
  161. package/examples/hello/logging/console.aug.md +2 -2
  162. package/examples/hello/logging/logger.aug.md +2 -2
  163. package/examples/hello/main.aug.md +2 -2
  164. package/examples/interceptors/.aug-spec/manifest.json +3 -3
  165. package/examples/interceptors/app.aug.md +5 -5
  166. package/examples/interceptors/interceptors.aug.md +2 -2
  167. package/examples/interceptors/logging.aug.md +3 -3
  168. package/examples/interceptors/main.aug.md +2 -2
  169. package/examples/native-blake3/.aug-spec/manifest.json +16 -0
  170. package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.1/native.abi.json +29 -0
  171. package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/api.aug +14 -0
  172. package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/api.aug.md +34 -0
  173. package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.aug +4 -0
  174. package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/contracts.aug.md +8 -0
  175. package/examples/native-blake3/.aug-spec/packages/@greenpandastudios/aug-blake3/0.1.3/native.abi.json +29 -0
  176. package/examples/native-blake3/AGENTS.md +5 -0
  177. package/examples/native-blake3/aug.lock.json +253 -0
  178. package/examples/native-blake3/hashing.aug +11 -0
  179. package/examples/native-blake3/hashing.aug.md +25 -0
  180. package/examples/native-blake3/main.aug +8 -0
  181. package/examples/native-blake3/main.aug.md +13 -0
  182. package/examples/native-pytorch/.aug-spec/manifest.json +18 -0
  183. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.1/native.abi.json +142 -0
  184. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.3/native.abi.json +142 -0
  185. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/api.aug +101 -0
  186. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/api.aug.md +160 -0
  187. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.aug +3 -0
  188. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/bindings.aug.md +8 -0
  189. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.aug +6 -0
  190. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/contracts.aug.md +13 -0
  191. package/examples/native-pytorch/.aug-spec/packages/@greenpandastudios/aug-pytorch/0.1.4/native.abi.json +142 -0
  192. package/examples/native-pytorch/AGENTS.md +5 -0
  193. package/examples/native-pytorch/aug.lock.json +309 -0
  194. package/examples/native-pytorch/main.aug +8 -0
  195. package/examples/native-pytorch/main.aug.md +13 -0
  196. package/examples/native-pytorch/tensors.aug +23 -0
  197. package/examples/native-pytorch/tensors.aug.md +35 -0
  198. package/examples/native-sqlite/.aug-spec/manifest.json +18 -0
  199. package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.2/native.abi.json +100 -0
  200. package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/api.aug +48 -0
  201. package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/api.aug.md +91 -0
  202. package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.aug +3 -0
  203. package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/bindings.aug.md +8 -0
  204. package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.aug +8 -0
  205. package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/contracts.aug.md +22 -0
  206. package/examples/native-sqlite/.aug-spec/packages/@greenpandastudios/aug-sqlite/0.1.3/native.abi.json +100 -0
  207. package/examples/native-sqlite/AGENTS.md +5 -0
  208. package/examples/native-sqlite/aug.lock.json +236 -0
  209. package/examples/native-sqlite/database.aug +15 -0
  210. package/examples/native-sqlite/database.aug.md +27 -0
  211. package/examples/native-sqlite/main.aug +8 -0
  212. package/examples/native-sqlite/main.aug.md +13 -0
  213. package/examples/native-zlib/.aug-spec/manifest.json +16 -0
  214. package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.1/native.abi.json +57 -0
  215. package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/api.aug +29 -0
  216. package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/api.aug.md +54 -0
  217. package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.aug +4 -0
  218. package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/contracts.aug.md +8 -0
  219. package/examples/native-zlib/.aug-spec/packages/@greenpandastudios/aug-zlib/0.1.3/native.abi.json +57 -0
  220. package/examples/native-zlib/AGENTS.md +5 -0
  221. package/examples/native-zlib/aug.lock.json +236 -0
  222. package/examples/native-zlib/compression.aug +15 -0
  223. package/examples/native-zlib/compression.aug.md +27 -0
  224. package/examples/native-zlib/main.aug +10 -0
  225. package/examples/native-zlib/main.aug.md +13 -0
  226. package/examples/new-syntax/.aug-spec/manifest.json +3 -3
  227. package/examples/new-syntax/console.aug.md +2 -2
  228. package/examples/new-syntax/greeter.aug.md +3 -3
  229. package/examples/new-syntax/logger.aug.md +2 -2
  230. package/examples/new-syntax/main.aug.md +2 -2
  231. package/examples/oidc-login/aug.lock.json +6 -6
  232. package/examples/ownership-transfer/.aug-spec/manifest.json +3 -3
  233. package/examples/ownership-transfer/main.aug.md +2 -2
  234. package/examples/ownership-transfer/resource.aug.md +2 -2
  235. package/examples/packages/math/aug-package.json +1 -1
  236. package/native/compiler-packs.json +43 -0
  237. package/package.json +3 -2
  238. package/runtime/aug_http.c +48 -21
  239. package/runtime/aug_http_ir.c +30 -0
  240. package/runtime/aug_http_ir.h +18 -0
  241. package/runtime/aug_ir.c +209 -0
  242. package/runtime/aug_ir.h +89 -0
  243. package/runtime/aug_json.c +6 -1
  244. package/runtime/aug_runtime.c +82 -16
  245. package/runtime/aug_runtime.h +16 -2
  246. package/runtime/aug_tasks.c +38 -7
  247. package/runtime/aug_values.c +12 -6
  248. package/scripts/bootstrap-native.mjs +4 -1
  249. package/src/ast.js +1 -1
  250. package/src/checker.js +110 -28
  251. package/src/cli.js +92 -14
  252. package/src/codegen.js +31 -6
  253. package/src/compiler-packs.js +66 -0
  254. package/src/config.js +2 -2
  255. package/src/editor.js +15 -6
  256. package/src/formatter.js +4 -2
  257. package/src/git-http.js +137 -0
  258. package/src/git-packages.js +9 -1
  259. package/src/help.js +10 -2
  260. package/src/ir-types.js +5 -0
  261. package/src/ir-verify.js +277 -0
  262. package/src/ir.js +962 -0
  263. package/src/llvm-debug.js +101 -0
  264. package/src/llvm-native.js +152 -0
  265. package/src/llvm-platform.js +20 -0
  266. package/src/llvm.js +781 -0
  267. package/src/native-artifacts.js +207 -0
  268. package/src/native-bindings.js +189 -0
  269. package/src/native-contracts.js +295 -0
  270. package/src/native-declarations.js +68 -0
  271. package/src/native-facts.js +63 -0
  272. package/src/package-locking.js +43 -0
  273. package/src/package-manager.js +23 -8
  274. package/src/parser.js +20 -2
  275. package/src/project.js +2 -2
  276. package/src/runtime-abi.js +23 -0
  277. package/src/runtime-adapters.js +18 -0
  278. package/src/schemas.js +24 -17
  279. package/src/semantic.js +8 -3
  280. package/src/snippets.js +1 -0
  281. package/src/spec.js +49 -8
  282. /package/examples/approved-design/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
  283. /package/examples/approved-design/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
  284. /package/examples/developer-workflow/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
  285. /package/examples/developer-workflow/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
  286. /package/examples/generic-di/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
  287. /package/examples/generic-di/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
  288. /package/examples/hello/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
  289. /package/examples/hello/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
  290. /package/examples/interceptors/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
  291. /package/examples/interceptors/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
  292. /package/examples/new-syntax/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
  293. /package/examples/new-syntax/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug.md +0 -0
  294. /package/examples/ownership-transfer/.aug-spec/august/{0.20.1 → 0.21.0}/io/contracts.aug +0 -0
  295. /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
- You need Node.js 24 or later, npm, and a C11 compiler. Repository packages also need Git. macOS and Linux are the tested platforms. [Docker](docker.md) and [Dev Containers](dev-containers.md) provide a Linux toolchain when you prefer to work in a container.
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
- Native dependencies use `~/.cache/augscript/native/VERSION/PLATFORM-ARCH`. `AUG_NATIVE_HOME` selects another cache. `aug-native` can prepare a cache in advance; `aug run` prepares what the application needs. The [release process](releasing.md) documents toolchain publishing for contributors.
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.
@@ -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 used August 0.18.0 and native C output. The current compiler is 0.20.1; these graphs have not been remeasured for that release. 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.
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 September 29, 2026: Apple M5, macOS Darwin 25.6.0, ARM64, Apple Clang 21, Node 24.18.0, CPython 3.12.14. August and C use `-O2` without LTO. [Raw samples, checksums, build timings and environment](benchmark-results.json) are committed with this page.
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.46 ms | 1.29 ms | 19.07 ms | 8.42 ms |
22
- | CPU · 2 million iterations | 7.24 ms | 8.17 ms | 30.22 ms | 194.98 ms |
23
- | Map + Set · 20,000 entries | 2.54 ms | 1.65 ms | 22.31 ms | 10.36 ms |
24
- | Map + Set · 200,000 entries | 15.10 ms | 6.38 ms | 38.33 ms | 26.44 ms |
25
- | JSON · 5,000 round trips | 6.92 ms | 2.01 ms | 20.84 ms | 19.20 ms |
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 15 measured runs for each implementation, with the execution order rotated. Every run 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.
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.24 ms** in August and **8.17 ms** in C on this host. The large-collection program takes **15.10 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.
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
- import parse from "https://github.com/GreenPandaStudios/augscript/src/stdlib/json#v0.19.0"
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 | 23,526 | 25,580 | 0.05 ms | 0.04 ms |
148
- | 16 | 73,370 | 69,166 | 0.37 ms | 0.40 ms |
149
- | 64 | 65,365 | 69,260 | 1.74 ms | 1.32 ms |
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 three 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 three per-round p95 latencies; graph error bars show observed throughput min/max, not confidence intervals.
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() returns 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; results.push(result);
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.4 MiB | 46.0 MiB | 15.1 MiB |
291
- | CPU · 2 million iterations | 1.3 MiB | 1.4 MiB | 52.2 MiB | 15.1 MiB |
292
- | Map + Set · 20,000 entries | 4.5 MiB | 4.4 MiB | 57.0 MiB | 20.2 MiB |
293
- | Map + Set · 200,000 entries | 34.2 MiB | 25.4 MiB | 91.1 MiB | 62.1 MiB |
294
- | JSON · 5,000 round trips | 1.8 MiB | 1.5 MiB | 47.4 MiB | 16.2 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 same August programs and measurement settings were run on this machine before and after the performance work. Shorter bars are faster for execution time; taller points are faster for HTTP. This compares observed application performance. [Earlier measurement summaries](benchmark-baseline.json) preserve the baseline.
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
  ![August execution time and HTTP throughput before and after the performance update, using the same workloads.](./assets/benchmarks/improvements.svg)
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.24 ms | 5.06× faster |
311
- | Map + Set · 20,000 entries | 4.68 ms | 2.54 ms | 1.84× faster |
312
- | Map + Set · 200,000 entries | 47.90 ms | 15.10 ms | 3.17× faster |
313
- | HTTP · 1 clients | 25,273 req/sec | 23,526 req/sec | 0.93× throughput |
314
- | HTTP · 16 clients | 62,719 req/sec | 73,370 req/sec | 1.17× throughput |
315
- | HTTP · 64 clients | 30,693 req/sec | 65,365 req/sec | 2.13× throughput |
316
- | Map + Set · 200k peak memory | 61.9 MiB | 34.2 MiB | 45% less |
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 the generated C/native linker 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.
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
@@ -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
+ ![Median August and C execution times for eight programs. Each panel has its own scale; lower is better.](assets/benchmarks/kernels.svg)
13
+
14
+ ![Median August and C execution times, arranged vertically for smaller screens. Lower is better.](assets/benchmarks/kernels-mobile.svg)
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