Skip to content

Drop unread data from .cmt files - #9252

Open
cknitt wants to merge 3 commits into
masterfrom
cmt-value-deps-locations
Open

cknitt wants to merge 3 commits into
masterfrom
cmt-value-deps-locations

Conversation

@cknitt

@cknitt cknitt commented Nov 6, 2026

Copy link
Copy Markdown
Member

Drops data that no tool reads from .cmt/.cmti files. Follow-up to the artifact-size findings in #9148.

  1. Value dependencies as two locations and a flag. Each value inclusion check stored both full Types.value_descriptions (type, attributes, doc comments). Reanalyze, the only reader, uses the two locations and whether both types take optional arguments, so that's all the compiler records now. The flag is decided when the .cmt is written, as before, when the types were marshalled at that point.
  2. Unread cmt_infos fields removed. cmt_comments (always empty), cmt_args, cmt_sourcefile, cmt_builddir, cmt_loadpath, cmt_initial_env, cmt_imports and cmt_use_summaries were write-only. The OCAML_BINANNOT_WITHENV switch is removed as well. What's left: module name, typed tree, value dependencies, source digest (rescript-tools migrate) and deprecation uses.
  3. Env.summary removed. Every env extension prepended a summary node, and .cmt files kept these logs in every typed-tree environment. OCaml tools replay them through Envaux, which this compiler doesn't have. The envs stored in .cmt files now keep only their GADT local constraints and flags. Reanalyze and gentype only look things up in those envs, and those lookups read tables that were already empty in .cmt files.

Runtime artifacts, master → this PR:

master PR change
.cmt total 4.07 MB 3.05 MB −25%
.cmti total 1.24 MB 1.12 MB −9%
Stdlib_Array.cmt 195 KB 102 KB −48%

.cmi files are unchanged. On 54 Belt and tests/tests files, the generated JS is byte-identical and allocation is 0.2% lower.

No magic-number bump, per compiler/AGENTS.md.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Kbf3gLMbg8G3FeSq6sPLM2

@github-actions

github-actions Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Changelog

🏠 Internal

  • Write a quarter less into .cmt files by dropping data no tool reads (full value descriptions in the value dependencies, OCaml-only fields, environment summaries).

Semantic Diff

3 commits · Full page

Record value dependencies in .cmt files as two locations and a flag

6287d4f · cknitt + Claude · Nov 06, 2026, 21:06 UTC

Why

Each value inclusion check stored both full value descriptions (type, attributes, doc comments) in the .cmt, a fifth of the stdlib's .cmt bytes. Reanalyze, the only reader, uses the two locations and whether both types take optional arguments; the compiler now records just that.

Review

  • Does reanalyze still see the same optional-argument references? Yes: the flag is computed with the same check on the same two types, the deadcode snapshots are unchanged, and forcing the flag off adds three findings to them.
Stop writing .cmt fields that no tool reads

745ab86 · cknitt + Claude · Nov 06, 2026, 21:10 UTC

Why

Eight cmt_infos fields came from OCaml and had no reader: the comments (always empty), the command line, source file, build directory, load path, initial environment, imports and the use_summaries flag. Dropping them and the OCAML_BINANNOT_WITHENV switch (which kept full environments in the typed tree) leaves the module name, the typed tree, the value dependencies, the source digest (rescript-tools migrate) and the deprecation uses. The runtime's .cmt and .cmti files get 3% smaller.

Remove environment summaries

c86e386 · cknitt + Claude · Nov 06, 2026, 21:12 UTC

Why

Every environment extension also prepended a summary node (a log of the bindings and opens that built it), and .cmt files kept these logs in every environment of the typed tree. OCaml tools replay them with Envaux to rebuild an environment; this compiler has no Envaux and no tool reads them. The environments stored in .cmt files now keep only their GADT local constraints and flags, and the runtime's .cmt and .cmti files get 7% smaller.

Review

  • Do reanalyze and gentype lose anything? No: they only look types and modules up in typed-tree environments, and the tables those lookups read were already empty in .cmt files.

@codecov

codecov Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.11765% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.74%. Comparing base (bf35764) to head (c86e386).

Files with missing lines Patch % Lines
compiler/ml/cmt_format_common.ml 89.47% 2 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##           master    #9252   +/-   ##
=======================================
  Coverage   81.74%   81.74%           
=======================================
  Files         457      457           
  Lines       65713    65708    -5     
=======================================
- Hits        53715    53711    -4     
+ Misses      11998    11997    -1     
Files with missing lines Coverage Δ
analysis/reanalyze/src/dead_optional_args.ml 92.00% <100.00%> (ø)
analysis/reanalyze/src/dead_value.ml 85.95% <100.00%> (+0.06%) ⬆️
compiler/bsc/rescript_compiler_driver.ml 80.70% <ø> (-0.07%) ⬇️
compiler/core/js_implementation.ml 83.89% <100.00%> (ø)
compiler/ext/compiler_request_state.ml 93.75% <ø> (ø)
compiler/ml/cmt_format.ml 100.00% <100.00%> (ø)
compiler/ml/env.ml 79.27% <100.00%> (-0.10%) ⬇️
compiler/ml/typemod.ml 76.90% <ø> (ø)
tests/ounit_tests/ounit_compiler_request_tests.ml 97.07% <100.00%> (-0.02%) ⬇️
compiler/ml/cmt_format_common.ml 85.00% <89.47%> (+3.51%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pkg-pr-new

pkg-pr-new Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

rescript

npm i https://pkg.pr.new/rescript@9252

@rescript/belt

npm i https://pkg.pr.new/@rescript/belt@9252

@rescript/darwin-arm64

npm i https://pkg.pr.new/@rescript/darwin-arm64@9252

@rescript/linux-arm64

npm i https://pkg.pr.new/@rescript/linux-arm64@9252

@rescript/linux-x64

npm i https://pkg.pr.new/@rescript/linux-x64@9252

@rescript/runtime

npm i https://pkg.pr.new/@rescript/runtime@9252

@rescript/win32-x64

npm i https://pkg.pr.new/@rescript/win32-x64@9252

commit: c86e386

@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown

@cknitt

cknitt commented Nov 7, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-07T06:05:46.722468Z 14fa937 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: 14fa937d67

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@cknitt
cknitt marked this pull request as ready for review November 7, 2026 06:17
@cknitt
cknitt requested a review from cristianoc November 7, 2026 06:18
cknitt and others added 3 commits November 7, 2026 18:07
Why:
    Each value inclusion check stored both full value descriptions (type,
    attributes, doc comments) in the .cmt, a fifth of the stdlib's .cmt
    bytes. Reanalyze, the only reader, uses the two locations and whether
    both types take optional arguments; the compiler now records just that.

Review: Does reanalyze still see the same optional-argument references?
Yes: the flag is computed with the same check on the same two types, the
deadcode snapshots are unchanged, and forcing the flag off adds three
findings to them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kbf3gLMbg8G3FeSq6sPLM2
Signed-off-by: Christoph Knittel <ck@cca.io>
Why:
    Eight cmt_infos fields came from OCaml and had no reader: the comments
    (always empty), the command line, source file, build directory, load
    path, initial environment, imports and the use_summaries flag.
    Dropping them and the OCAML_BINANNOT_WITHENV switch (which kept full
    environments in the typed tree) leaves the module name, the typed
    tree, the value dependencies, the source digest (rescript-tools
    migrate) and the deprecation uses. The runtime's .cmt and .cmti files
    get 3% smaller.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kbf3gLMbg8G3FeSq6sPLM2
Signed-off-by: Christoph Knittel <ck@cca.io>
Why:
    Every environment extension also prepended a summary node (a log of
    the bindings and opens that built it), and .cmt files kept these logs
    in every environment of the typed tree. OCaml tools replay them with
    Envaux to rebuild an environment; this compiler has no Envaux and no
    tool reads them. The environments stored in .cmt files now keep only
    their GADT local constraints and flags, and the runtime's .cmt and
    .cmti files get 7% smaller.

Review: Do reanalyze and gentype lose anything? No: they only look types
and modules up in typed-tree environments, and the tables those lookups
read were already empty in .cmt files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kbf3gLMbg8G3FeSq6sPLM2
Signed-off-by: Christoph Knittel <ck@cca.io>
@cknitt
cknitt force-pushed the cmt-value-deps-locations branch from 14fa937 to c86e386 Compare November 7, 2026 18:07
@github-actions

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown

🎉 Compiler benchmarks

Allocated words

In total: 456,989,425 → 456,015,010 (-0.21%).

🎉 Improvement: 6 benchmarks allocate more than 1% less.

Benchmark Base Head Change
packages/@rescript/runtime/Stdlib_Date.res 1,057,120 1,035,479 -2.05%
packages/@rescript/runtime/Stdlib_String.res 1,010,067 990,373 -1.95%
packages/@rescript/runtime/Stdlib_Math.res 821,541 808,335 -1.61%
packages/@rescript/runtime/Stdlib_Array.res 1,864,605 1,838,744 -1.39%
packages/@rescript/runtime/Stdlib_DataView.res 717,460 707,817 -1.34%
packages/@rescript/runtime/Stdlib_Console.res 864,284 853,939 -1.20%
packages/@rescript/runtime/Stdlib_RegExp.res 646,540 640,142 -0.99%
packages/@rescript/runtime/Stdlib_Set.res 696,698 690,282 -0.92%
packages/@rescript/runtime/Stdlib_Float.res 703,705 697,410 -0.89%
packages/@rescript/runtime/Stdlib_Dict.res 812,066 804,806 -0.89%
229 more changes
Benchmark Base Head Change
packages/@rescript/runtime/Stdlib_Promise.res 854,604 847,525 -0.83%
packages/@rescript/runtime/Stdlib_JSON.res 784,466 778,316 -0.78%
packages/@rescript/runtime/JsxEvent.res 1,593,265 1,581,051 -0.77%
packages/@rescript/runtime/Stdlib_Map.res 691,298 686,079 -0.75%
packages/@rescript/belt/src/Belt_Set.res 1,419,186 1,408,504 -0.75%
packages/@rescript/runtime/Stdlib_JsError.res 716,776 711,412 -0.75%
packages/@rescript/runtime/Stdlib_BigInt.res 690,547 685,545 -0.72%
packages/@rescript/runtime/Stdlib_Global.res 622,410 617,924 -0.72%
packages/@rescript/runtime/Stdlib_Int.res 953,023 946,408 -0.69%
packages/@rescript/belt/src/Belt_Map.res 1,561,134 1,550,435 -0.69%
packages/@rescript/belt/src/Belt_Option.res 885,745 879,764 -0.68%
packages/@rescript/runtime/Stdlib_Symbol.res 624,560 620,604 -0.63%
packages/@rescript/runtime/Stdlib_Nullable.res 828,570 823,695 -0.59%
packages/@rescript/belt/src/Belt_Array.res 2,842,879 2,826,452 -0.58%
packages/@rescript/runtime/Stdlib_Null.res 830,463 825,712 -0.57%
packages/@rescript/belt/src/Belt_Result.res 920,631 915,434 -0.56%
packages/@rescript/belt/src/Belt_List.res 3,950,091 3,928,937 -0.54%
packages/@rescript/runtime/Dom.res 1,695,433 1,686,799 -0.51%
packages/@rescript/belt/src/Belt_SetDict.res 2,121,382 2,110,648 -0.51%
packages/@rescript/runtime/Stdlib_Option.res 1,288,904 1,282,596 -0.49%
packages/@rescript/belt/src/Belt_Float.res 645,076 641,948 -0.48%
packages/@rescript/belt/src/Belt.res 667,341 664,109 -0.48%
packages/@rescript/belt/src/Belt_HashMap.res 1,848,233 1,839,489 -0.47%
packages/@rescript/belt/src/Belt_Id.res 775,865 772,206 -0.47%
packages/@rescript/runtime/Stdlib_IteratorObject.res 743,930 740,472 -0.46%
packages/@rescript/runtime/Stdlib_List.res 3,396,284 3,380,527 -0.46%
packages/@rescript/runtime/Stdlib_JsExn.res 656,341 653,384 -0.45%
packages/@rescript/belt/src/Belt_Range.res 780,043 776,533 -0.45%
packages/@rescript/belt/src/Belt_Int.res 645,510 642,616 -0.45%
packages/@rescript/belt/src/Belt_MutableSet.res 2,609,727 2,598,415 -0.43%
packages/@rescript/runtime/Stdlib.res 1,468,277 1,461,961 -0.43%
packages/@rescript/runtime/Stdlib_AsyncIterator.res 792,369 788,963 -0.43%
packages/@rescript/runtime/Stdlib_Result.res 1,903,060 1,895,006 -0.42%
packages/@rescript/belt/src/Belt_Id.resi 740,534 737,509 -0.41%
packages/@rescript/runtime/Stdlib_Iterator.res 722,517 719,696 -0.39%
packages/@rescript/runtime/Stdlib_ArrayBuffer.res 585,399 583,179 -0.38%
packages/@rescript/belt/src/Belt_HashSet.resi 705,390 702,797 -0.37%
packages/@rescript/belt/src/Belt_MapString.res 1,817,038 1,810,399 -0.37%
packages/@rescript/belt/src/Belt_MapInt.res 1,816,494 1,809,863 -0.37%
packages/@rescript/runtime/Stdlib_Lazy.res 710,281 707,724 -0.36%
packages/@rescript/runtime/Stdlib_Bool.res 625,405 623,178 -0.36%
packages/@rescript/runtime/Stdlib_IterableIterator.res 664,689 662,374 -0.35%
packages/@rescript/belt/src/Belt_HashSetInt.resi 654,610 652,338 -0.35%
packages/@rescript/belt/src/Belt_HashSetString.resi 654,491 652,225 -0.35%
packages/@rescript/belt/src/Belt_internalSetBuckets.resi 679,586 677,236 -0.35%
packages/@rescript/runtime/Stdlib_AsyncIterableIterator.res 719,827 717,354 -0.34%
packages/@rescript/belt/src/Belt_MutableSetInt.resi 745,871 743,310 -0.34%
packages/@rescript/belt/src/Belt_MutableSetString.resi 745,749 743,193 -0.34%
packages/@rescript/belt/src/Belt_MutableStack.res 893,146 890,091 -0.34%
packages/@rescript/belt/src/Belt_SetInt.resi 740,616 738,095 -0.34%
packages/@rescript/belt/src/Belt_SetString.resi 740,483 737,968 -0.34%
packages/@rescript/belt/src/Belt_HashMap.resi 781,990 779,336 -0.34%
packages/@rescript/belt/src/Belt_MutableStack.resi 648,574 646,379 -0.34%
packages/@rescript/belt/src/Belt_HashMapInt.resi 694,789 692,451 -0.34%
packages/@rescript/belt/src/Belt_internalBuckets.resi 712,893 710,498 -0.34%
packages/@rescript/belt/src/Belt_HashMapString.resi 694,668 692,336 -0.34%
packages/@rescript/belt/src/Belt_internalBucketsType.resi 644,590 642,431 -0.33%
packages/@rescript/belt/src/Belt_Int.resi 627,830 625,732 -0.33%
packages/@rescript/belt/src/Belt_MutableQueue.resi 687,739 685,443 -0.33%
packages/@rescript/belt/src/Belt_Float.resi 629,309 627,211 -0.33%
packages/@rescript/runtime/Primitive_js_extern.res 720,041 717,654 -0.33%
packages/@rescript/runtime/Stdlib_AsyncGenerator.res 702,496 700,178 -0.33%
packages/@rescript/belt/src/Belt_SortArrayInt.resi 648,783 646,652 -0.33%
packages/@rescript/belt/src/Belt_SortArrayString.resi 648,659 646,534 -0.33%
packages/@rescript/belt/src/Belt_internalBucketsType.res 777,633 775,088 -0.33%
packages/@rescript/belt/src/Belt_MutableMap.resi 886,344 883,444 -0.33%
packages/@rescript/belt/src/Belt_MutableSet.resi 885,936 883,042 -0.33%
packages/@rescript/belt/src/Belt_MutableQueue.res 1,328,287 1,323,964 -0.33%
packages/@rescript/belt/src/Belt_Range.resi 655,345 653,219 -0.32%
packages/@rescript/belt/src/Belt_Set.resi 926,931 923,925 -0.32%
packages/@rescript/belt/src/Belt_MutableMapInt.res 1,773,700 1,767,951 -0.32%
packages/@rescript/belt/src/Belt_MutableMap.res 1,941,992 1,935,703 -0.32%
packages/@rescript/belt/src/Belt_MutableMapString.res 1,773,969 1,768,230 -0.32%
packages/@rescript/belt/src/Belt_internalAVLset.resi 849,821 847,079 -0.32%
packages/@rescript/belt/src/Belt_MapDict.res 2,359,280 2,351,684 -0.32%
packages/@rescript/belt/src/Belt_SortArray.resi 734,854 732,492 -0.32%
packages/@rescript/belt/src/Belt_MutableMapInt.resi 799,206 796,638 -0.32%
packages/@rescript/belt/src/Belt_MutableMapString.resi 799,083 796,520 -0.32%
packages/@rescript/runtime/Stdlib_Generator.res 688,088 685,930 -0.31%
packages/@rescript/belt/src/Belt_Option.resi 724,391 722,124 -0.31%
packages/@rescript/runtime/Stdlib_Type.res 682,516 680,414 -0.31%
packages/@rescript/belt/src/Belt_Result.resi 726,130 723,911 -0.31%
packages/@rescript/belt/src/Belt_MapInt.resi 878,017 875,336 -0.31%
packages/@rescript/belt/src/Belt_MapString.resi 877,969 875,293 -0.30%
packages/@rescript/runtime/Stdlib_Uint8ClampedArray.res 823,656 821,188 -0.30%
packages/@rescript/runtime/Stdlib_Int8Array.res 823,122 820,657 -0.30%
packages/@rescript/runtime/Stdlib_Uint16Array.res 823,276 820,811 -0.30%
packages/@rescript/runtime/Stdlib_Uint32Array.res 823,276 820,811 -0.30%
packages/@rescript/runtime/Stdlib_Uint8Array.res 823,137 820,673 -0.30%
packages/@rescript/runtime/Stdlib_Int16Array.res 823,269 820,805 -0.30%
packages/@rescript/runtime/Stdlib_Int32Array.res 823,270 820,806 -0.30%
packages/@rescript/runtime/Stdlib_BigInt64Array.res 823,297 820,837 -0.30%
packages/@rescript/runtime/Stdlib_BigUint64Array.res 823,371 820,911 -0.30%
packages/@rescript/runtime/Stdlib_Float32Array.res 823,235 820,776 -0.30%
packages/@rescript/runtime/Stdlib_Float64Array.res 823,235 820,776 -0.30%
packages/@rescript/belt/src/Belt_internalAVLtree.resi 958,863 956,009 -0.30%
packages/@rescript/belt/src/Belt_SetDict.resi 892,770 890,120 -0.30%
packages/@rescript/runtime/Pervasives.res 720,245 718,111 -0.30%
packages/@rescript/belt/src/Belt_Map.resi 1,076,538 1,073,388 -0.29%
packages/@rescript/runtime/Stdlib_TaggedTemplate.res 593,562 591,827 -0.29%
packages/@rescript/belt/src/Belt_SetInt.res 1,895,032 1,889,517 -0.29%
packages/@rescript/belt/src/Belt_SetString.res 1,895,759 1,890,246 -0.29%
packages/@rescript/belt/src/Belt_HashSet.res 1,573,656 1,569,128 -0.29%
packages/@rescript/runtime/Stdlib_Temporal_PlainDateTime.res 920,419 917,777 -0.29%
packages/@rescript/runtime/Stdlib_Intl.res 652,133 650,276 -0.28%
packages/@rescript/runtime/Stdlib_Temporal_PlainDate.res 885,809 883,297 -0.28%
packages/@rescript/runtime/Stdlib_Temporal_ZonedDateTime.res 1,060,605 1,057,643 -0.28%
packages/@rescript/runtime/Stdlib_Temporal_PlainTime.res 801,292 799,056 -0.28%
packages/@rescript/runtime/Stdlib_Temporal_PlainMonthDay.res 749,204 747,117 -0.28%
packages/@rescript/belt/src/Belt_MapDict.resi 1,011,869 1,009,061 -0.28%
packages/@rescript/runtime/Stdlib_Temporal_Instant.res 788,857 786,671 -0.28%
packages/@rescript/runtime/Stdlib_Temporal_PlainYearMonth.res 865,691 863,299 -0.28%
packages/@rescript/runtime/Stdlib_Intl_NumberFormat.res 891,600 889,157 -0.27%
packages/@rescript/belt/src/Belt_internalSetBuckets.res 1,239,575 1,236,185 -0.27%
packages/@rescript/belt/src/Belt_SortArray.res 2,045,354 2,039,762 -0.27%
stress/LetRec.res 35,120,632 35,025,653 -0.27%
packages/@rescript/belt/src/Belt_Array.resi 1,151,534 1,148,428 -0.27%
packages/@rescript/belt/src/Belt_HashSetInt.res 1,412,456 1,408,650 -0.27%
packages/@rescript/belt/src/Belt_HashSetString.res 1,412,763 1,408,964 -0.27%
packages/@rescript/runtime/Stdlib_Intl_DateTimeFormat.res 875,253 872,918 -0.27%
packages/@rescript/runtime/Stdlib_Temporal_Duration.res 856,482 854,219 -0.26%
packages/@rescript/runtime/RescriptTools_ExtractCodeBlocks.res 589,533 587,984 -0.26%
packages/@rescript/runtime/Stdlib_Intl_Segmenter.res 632,537 630,891 -0.26%
packages/@rescript/runtime/Stdlib_TypedArray.res 1,274,745 1,271,441 -0.26%
packages/@rescript/runtime/Stdlib_Intl_RelativeTimeFormat.res 659,287 657,588 -0.26%
packages/@rescript/runtime/Stdlib_Temporal.res 701,948 700,145 -0.26%
packages/@rescript/runtime/Stdlib_Intl_ListFormat.res 648,404 646,744 -0.26%
packages/@rescript/belt/src/Belt_HashMapInt.res 1,671,321 1,667,043 -0.26%
packages/@rescript/belt/src/Belt_HashMapString.res 1,672,033 1,667,757 -0.26%
packages/@rescript/runtime/Stdlib_Intl_Collator.res 658,124 656,444 -0.26%
packages/@rescript/runtime/Stdlib_Temporal_Common.res 855,124 852,958 -0.25%
packages/@rescript/runtime/Stdlib_JsError.resi 663,816 662,149 -0.25%
packages/@rescript/belt/src/Belt_List.resi 1,270,413 1,267,230 -0.25%
packages/@rescript/runtime/Stdlib_JSON.resi 717,065 715,287 -0.25%
packages/@rescript/belt/src/Belt_internalBuckets.res 1,556,445 1,552,593 -0.25%
packages/@rescript/runtime/Stdlib_Temporal_Now.res 620,734 619,203 -0.25%
packages/@rescript/runtime/Stdlib_String.resi 983,319 980,896 -0.25%
packages/@rescript/runtime/Jsx.res 599,540 598,063 -0.25%
stress/InlineChain.res 3,977,341 3,967,550 -0.25%
packages/@rescript/runtime/Primitive_option.resi 599,971 598,497 -0.25%
packages/@rescript/runtime/Stdlib_Math.resi 811,038 809,050 -0.25%
packages/@rescript/belt/src/Belt_MutableSetInt.res 2,313,192 2,307,524 -0.25%
packages/@rescript/belt/src/Belt_MutableSetString.res 2,314,432 2,308,766 -0.24%
packages/@rescript/runtime/Stdlib_Intl_PluralRules.res 682,314 680,648 -0.24%
packages/@rescript/runtime/Dom_storage.res 647,537 645,956 -0.24%
packages/@rescript/runtime/Primitive_object.resi 594,656 593,214 -0.24%
packages/@rescript/runtime/Primitive_module.resi 580,433 579,038 -0.24%
packages/@rescript/runtime/RescriptTools_Docgen.res 769,841 767,991 -0.24%
packages/@rescript/runtime/Primitive_option.res 793,631 791,725 -0.24%
packages/@rescript/runtime/Primitive_object_extern.res 592,122 590,701 -0.24%
packages/@rescript/runtime/Primitive_hash.resi 580,006 578,618 -0.24%
packages/@rescript/runtime/Stdlib_AsyncGenerator.resi 646,704 645,160 -0.24%
packages/@rescript/runtime/Dom_storage2.res 597,334 595,909 -0.24%
packages/@rescript/runtime/Stdlib_Intl_Locale.res 677,566 675,951 -0.24%
packages/@rescript/belt/src/Belt_internalSetInt.res 1,267,668 1,264,650 -0.24%
packages/@rescript/runtime/Stdlib_Intl_NumberFormat_Grouping.res 638,049 636,532 -0.24%
packages/@rescript/belt/src/Belt_internalSetString.res 1,268,854 1,265,840 -0.24%
packages/@rescript/runtime/Stdlib_Float.resi 672,962 671,365 -0.24%
packages/@rescript/runtime/Stdlib_AsyncIterable.res 576,294 574,927 -0.24%
packages/@rescript/runtime/Stdlib_Int.resi 684,889 683,265 -0.24%
packages/@rescript/runtime/RescriptTools.res 581,436 580,059 -0.24%
packages/@rescript/runtime/Stdlib_Date.resi 1,103,247 1,100,636 -0.24%
packages/@rescript/runtime/Stdlib_Iterable.res 576,217 574,857 -0.24%
packages/@rescript/runtime/Stdlib_Symbol.resi 637,856 636,351 -0.24%
packages/@rescript/runtime/Stdlib_Ordering.res 631,521 630,033 -0.24%
packages/@rescript/runtime/Stdlib_AsyncIterableIterator.resi 639,847 638,341 -0.24%
packages/@rescript/runtime/Stdlib_Generator.resi 640,209 638,711 -0.23%
packages/@rescript/runtime/Stdlib_Set.resi 710,251 708,590 -0.23%
packages/@rescript/runtime/Stdlib_Console.resi 901,027 898,922 -0.23%
packages/@rescript/runtime/Primitive_exceptions.res 685,516 683,915 -0.23%
packages/@rescript/runtime/Stdlib_Null.resi 686,311 684,709 -0.23%
packages/@rescript/runtime/Stdlib_Object.res 724,227 722,538 -0.23%
packages/@rescript/runtime/Stdlib_BigInt.resi 665,036 663,486 -0.23%
packages/@rescript/runtime/Stdlib_IterableIterator.resi 629,052 627,591 -0.23%
packages/@rescript/runtime/Stdlib_Intl_Common.res 631,326 629,860 -0.23%
packages/@rescript/runtime/Stdlib_Nullable.resi 681,799 680,217 -0.23%
packages/@rescript/runtime/RescriptTools_Docgen.resi 759,438 757,678 -0.23%
packages/@rescript/runtime/Stdlib_Global.resi 633,779 632,314 -0.23%
packages/@rescript/runtime/Stdlib_WeakSet.res 600,504 599,119 -0.23%
packages/@rescript/runtime/Stdlib_Intl_Segments.res 593,977 592,608 -0.23%
packages/@rescript/runtime/Primitive_module.res 834,826 832,903 -0.23%
packages/@rescript/runtime/Stdlib_Bool.resi 594,081 592,713 -0.23%
packages/@rescript/runtime/Stdlib_Type.resi 613,261 611,849 -0.23%
packages/@rescript/runtime/Stdlib_Map.resi 699,240 697,631 -0.23%
packages/@rescript/runtime/Stdlib_RegExp.resi 666,814 665,280 -0.23%
packages/@rescript/runtime/Primitive_exceptions.resi 577,473 576,146 -0.23%
packages/@rescript/runtime/Stdlib_Pair.res 645,996 644,514 -0.23%
packages/@rescript/runtime/Obj.res 576,176 574,855 -0.23%
packages/@rescript/runtime/Stdlib_AsyncIterator.resi 659,649 658,142 -0.23%
packages/@rescript/runtime/Stdlib_File.res 572,553 571,245 -0.23%
packages/@rescript/runtime/Primitive_array_extern.res 591,838 590,487 -0.23%
packages/@rescript/runtime/Stdlib_WeakMap.res 613,420 612,021 -0.23%
packages/@rescript/runtime/Stdlib_Iterator.resi 638,851 637,397 -0.23%
packages/@rescript/belt/src/Belt_SortArrayInt.res 1,929,237 1,924,853 -0.23%
packages/@rescript/belt/src/Belt_SortArrayString.res 1,931,027 1,926,647 -0.23%
packages/@rescript/runtime/Stdlib_JsExn.resi 600,351 598,994 -0.23%
packages/@rescript/runtime/Stdlib_Lazy.resi 589,781 588,449 -0.23%
packages/@rescript/runtime/Primitive_int_extern.res 574,880 573,587 -0.22%
packages/@rescript/runtime/Primitive_promise.res 574,106 572,815 -0.22%
packages/@rescript/runtime/Primitive_string_extern.res 575,233 573,942 -0.22%
packages/@rescript/runtime/Stdlib_IteratorObject.resi 718,829 717,218 -0.22%
packages/@rescript/runtime/Stdlib_ArrayBuffer.resi 588,214 586,896 -0.22%
packages/@rescript/runtime/Stdlib_Blob.res 570,686 569,408 -0.22%
packages/@rescript/runtime/Primitive_dict.res 580,030 578,737 -0.22%
packages/@rescript/runtime/Primitive_float_extern.res 570,563 569,294 -0.22%
packages/@rescript/runtime/Stdlib_AsyncIterable.resi 575,587 574,312 -0.22%
packages/@rescript/runtime/Primitive_int.res 653,732 652,285 -0.22%
packages/@rescript/runtime/Stdlib_Iterable.resi 575,438 574,165 -0.22%
packages/@rescript/runtime/Primitive_bigint.res 659,289 657,839 -0.22%
packages/@rescript/runtime/Primitive_string.res 641,022 639,618 -0.22%
packages/@rescript/runtime/Stdlib_Array.resi 1,225,533 1,222,852 -0.22%
packages/@rescript/runtime/Stdlib_TaggedTemplate.resi 583,770 582,493 -0.22%
packages/@rescript/runtime/Stdlib_Dict.resi 722,506 720,927 -0.22%
packages/@rescript/runtime/Primitive_list.resi 568,988 567,745 -0.22%
packages/@rescript/runtime/Stdlib_DataView.resi 748,819 747,186 -0.22%
packages/@rescript/runtime/Stdlib_List.resi 896,248 894,296 -0.22%
packages/@rescript/runtime/Primitive_float.res 626,980 625,615 -0.22%
packages/@rescript/runtime/Primitive_bool.res 626,751 625,387 -0.22%
packages/@rescript/runtime/Primitive_list.res 690,682 689,191 -0.22%
packages/@rescript/runtime/Stdlib_Option.resi 718,636 717,091 -0.21%
packages/@rescript/runtime/Primitive_array.res 678,695 677,281 -0.21%
packages/@rescript/runtime/Stdlib_Result.resi 782,936 781,366 -0.20%
packages/@rescript/runtime/Stdlib_Promise.resi 854,160 852,545 -0.19%
packages/@rescript/belt/src/Belt_internalAVLset.res 3,657,958 3,651,232 -0.18%
packages/@rescript/belt/src/Belt_internalAVLtree.res 4,426,588 4,418,679 -0.18%
packages/@rescript/belt/src/Belt_internalMapInt.res 2,090,736 2,087,026 -0.18%
packages/@rescript/belt/src/Belt_internalMapString.res 2,092,574 2,088,870 -0.18%
packages/@rescript/runtime/Primitive_hash.res 1,501,651 1,499,234 -0.16%
packages/@rescript/runtime/Primitive_object.res 1,720,232 1,717,498 -0.16%

Instructions

In total: 10,226,962,100 → 10,220,750,237 (-0.06%).

🎉 Improvement: 1 benchmark executes more than 1% fewer instructions.

Benchmark Base Head Change
packages/@rescript/belt/src/Belt_Array.resi 57,639,977 56,976,116 -1.15%
packages/@rescript/belt/src/Belt_List.res 145,580,923 144,499,936 -0.74%
stress/ObjectFields.res 957,097,806 961,342,721 +0.44%
stress/InlineChain.res 150,991,077 150,436,532 -0.37%
packages/@rescript/belt/src/Belt_internalAVLtree.res 166,149,547 165,615,988 -0.32%
stress/LetRec.res 1,431,510,899 1,427,301,815 -0.29%
packages/@rescript/runtime/Stdlib_String.resi 52,393,979 52,254,901 -0.27%
packages/@rescript/runtime/Stdlib_Math.resi 44,160,992 44,047,269 -0.26%
packages/@rescript/runtime/Stdlib_Temporal_PlainDateTime.res 48,434,823 48,312,501 -0.25%
packages/@rescript/runtime/Stdlib_Temporal_PlainDate.res 46,996,498 46,878,151 -0.25%
8 more changes
Benchmark Base Head Change
packages/@rescript/runtime/Stdlib_Temporal_ZonedDateTime.res 54,183,619 54,054,586 -0.24%
packages/@rescript/runtime/Stdlib_List.resi 47,643,168 47,529,762 -0.24%
packages/@rescript/runtime/Stdlib_Date.resi 57,209,106 57,073,806 -0.24%
packages/@rescript/runtime/Stdlib_Array.resi 63,213,237 63,076,384 -0.22%
packages/@rescript/belt/src/Belt_List.resi 62,577,535 62,448,025 -0.21%
packages/@rescript/runtime/Stdlib_TypedArray.res 64,279,684 64,147,191 -0.21%
packages/@rescript/runtime/JsxDOM.res 143,848,097 143,560,204 -0.20%
packages/@rescript/runtime/JsxDOMStyle.res 119,996,647 119,833,591 -0.14%

Pull request c86e386 compared with base bf35764 in this run.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant