Measurement snapshot · 28 October 2026

Language core and API performance, measured separately.

These results come from benchmarks already run. The figures are shown as recorded, with their measurement conditions and limits. This is a dated snapshot, not an automatic remeasurement of code changes made afterward.

01 · CLI programs

Language core benchmark

28 Oct 2026

Each measurement launches a fresh process and times it from start to exit. The medians below use 7 samples per workload; runtime startup is included.

10languages timed
7validated workloads
0 / 7workloads won by YAZA
7 / 7 · 6 / 7Go and Nim workloads faster than YAZA
Result summary

YAZA is not the fastest in this core workload set. Go is faster in 7 of 7 workloads and Nim in 6 of 7. YAZA is faster than C#/.NET, Python, JavaScript, Ruby, Java, PHP, and Kotlin in every tested workload. These are fresh-process CLI timings, not server performance.

R is not in the table because Rscript was unavailable during the benchmark; its implementation is still included in the report's code appendix.

Median process time

lower is faster · milliseconds

Scroll the table horizontally to see every language.

Median of 7 runs per workload; time includes process startup through exit.
WorkloadYAZA.NET C#PythonJavaScriptRubyJavaPHPGoNimKotlin/JVM
Hello World · process start3.27723.20113.55639.25928.86427.05742.2802.3211.73443.530
Print 50,000 lines5.56453.87121.91779.18535.71078.94161.9004.1215.52181.404
Sum 10 million integers6.45433.712358.90792.773147.85238.08971.2325.7896.44742.786
Recursive Fibonacci · 3417.44039.430769.83276.124315.00640.252217.41116.20427.42046.217
Prime count · up to 100,0005.70428.235108.91148.49184.49334.15258.6794.4454.38539.641
Number to text + length · 250,00016.31330.80442.28645.25137.37547.28845.4845.0424.76851.057
Create + scan 64-item list4.30630.83173.17547.86472.44136.97450.6582.9492.52647.355

Other workloads sum 1 through 10 million, compute naive recursive Fibonacci(34), count primes by trial division through 100,000, convert 250,000 numbers to text and count characters, then create a 64-number list and scan it 30,000 times. The print workload discards output, but still performs formatting and every write call. Source build time is measured separately. C/Clang is not ranked as a language entry; its native reference results are shown separately below.

Native C/Clang reference

excluded from language ranking · milliseconds
WorkloadYAZAC / ClangYAZA ÷ C
Hello World · process start3.2772.0301.61×
Print 50,000 lines5.5644.1501.34×
Sum 10 million integers6.4542.6792.41×
Recursive Fibonacci · 3417.44011.7411.49×
Prime count · up to 100,0005.7044.2781.33×
Number to text + length16.3138.7961.85×
Create + scan list4.3062.4251.78×

One-time build time

toolchains with a build step · ms
ToolchainBuild time
YAZA446.8
.NET679.7
Java309.9
Go149.5
Nim474.2
Kotlin/JVM2,042.9
C / Clang · reference45.9

Build times reflect the commands and caches available during the run. They are not clean first-build timings; source runtimes without an explicit compile step have no equivalent build figure.

Core benchmark method and limits
  • Machine: macOS 26.5, Apple Silicon ARM64, 10 logical CPUs.
  • Median of 7 measurements. Each sample launches a new process; timing includes startup, workload, and shutdown.
  • Runtime and compiler versions, output validation, every language implementation, relative ratios, and reproduction steps are in the full report.
  • R was not timed because Rscript was unavailable during the run.
  • Short CLI results are affected by process startup and represent only this machine, these runtimes, and these workloads.

02 · HTTP servers

API response benchmark

28 Oct 2026

Local servers return JSON with the same response contract. This table shows the small JSON GET response, median of three repeats, at three concurrency levels.

10server implementations
456,000measured requests
0failed requests
1 / 8 / 32concurrency
YAZA implementation in this run

At concurrency 32, YAZA's health route reaches a 103.5 ms p50; the small JSON GET reaches 105.9 ms and about 401 requests/second. For that small JSON GET, Go records 270 µs / 93,179 requests/second and Node.js 284 µs / 99,228 requests/second. This run shows a substantial concurrency bottleneck in the tested YAZA server version.

Small JSON GET · p50 and throughput

p50 in µs · throughput in requests/second

Concurrency is the number of requests in flight at once. p50 is median response latency; throughput is successful requests per second. Timing includes loopback and reading the full response body. Thus c=32 means up to 32 concurrent requests in a run.

Scroll the table horizontally to see all metrics.

GET /api/response?items=1 · median of three repeats.
LanguageConcurrency 1Concurrency 8Concurrency 32
p50 µsreq/sp50 µsreq/sp50 µsreq/s
YAZA1405,8397109,794105,934401
Go3923,75810469,38527093,179
Nim3725,2029971,86637078,966
Python7812,35340218,3781,75717,637
Node.js3428,0578393,22728499,228
Ruby1366,8821,0596,7684,3227,058
PHP1098,83431721,1241,87813,485
Java7612,12715748,66437479,621
Kotlin/JVM7112,68316943,06136480,884
.NET / C#7012,80927126,4021,21824,421

The API suite tests GET /healthz, GET /api/response (1, 16, or 64 items), and POST /api/echo. The table above shows only the small JSON GET; the full report includes p95/p99, other endpoints, keep-alive versus new connections, cold start, runtimes, and every implementation's source.

Server startup until ready

one measurement · milliseconds
LanguageStartup to ready (ms)
YAZA7.6
Go32.6
Nim31.2
Python89.3
Node.js161.6
Ruby92.9
PHP120.5
Java206.6
Kotlin/JVM114.3
.NET / C#135.1

Cold start was measured once per runtime and excludes compile/build. Treat these as initial indicators, not repeated or stable cold-start comparisons.

API benchmark method and limits
  • Machine: macOS 26.5, ARM64 Apple Silicon, 10 logical CPUs; servers were tested one at a time over loopback HTTP/1.1.
  • Validation checked HTTP status, JSON types and values, and equal response bytes for equivalent workloads.
  • No TLS, authentication, database, or internet network was used. Results measure the tested server stacks and JSON libraries, not languages in isolation.
  • Concurrency models differ between runtimes. The tested YAZA server uses a single cooperative event loop.

03 · Memory model

YAZA uses arenas, not garbage collection.

“YAZA Arena” is the current native runtime's internal arena-based memory manager. YAZA programs do not run a tracing garbage collector (GC) that searches for reachable objects. An arena groups allocations into regions with size limits and defined lifetimes.

01

Program arena

512 MiB current runtime allocation budget. Values that need to live for the program, such as retained CRUD records, go here and are reclaimed when the program exits.

02

Request arena

64 MiB / request runtime allocation budget per HTTP request. Parsing, temporary values, and response data routed through this allocator can be reclaimed together after the request completes.

How is this different?

A garbage collector typically tracks live objects and reclaims objects that are no longer reachable. An arena does not search for unused objects; it manages allocation groups and frees a whole group at reset or shutdown. The runtime also has internal operations to free, resize, and transfer allocations between arenas.

What are the benefits and trade-offs?

Region boundaries provide explicit cleanup points and can avoid tracing work. In return, values must be placed in an arena with the right lifetime: data that must persist has to be transferred to a longer-lived region before a request arena resets.

Request arenaRetained record transferred to program arenaRequest ends: request arena resets

For application developers: “YAZA Arena” is currently an internal runtime mechanism, not a syntax form or allocation API that you call directly from a .yz file.

Important limit: arenas are not yet a safe ownership system.

The compiler does not yet enforce move/borrow or lifetime rules in YAZA source, and there is no end-to-end memory-safety guarantee. If an internal reference outlives its arena reset, the allocator alone does not prove that access is safe. The 512/64 MiB budgets limit allocations routed through the runtime allocator, not total process RSS or allocations made by external libraries.

Benchmark interpretation: the core suite includes one list creation-and-scan workload, but does not separately measure memory use, GC pauses, leaks, or allocator throughput. The API benchmark measures the full server and JSON libraries; it does not prove that the absence of GC caused any particular result.

Current conclusion

The core shows early promise. The API server needs more work.

YAZA's early CLI results are strong against several tested runtimes, but Go and Nim lead in nearly every core workload. In this API benchmark, high concurrency exposes a much larger limitation in the YAZA server. These suites measure different things; these results are not a general performance claim or a cross-machine result.