Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Builtins] Defer 'readKnown' until full saturation #4430

Conversation

effectfully
Copy link
Contributor

@effectfully effectfully commented Feb 26, 2022

A quick-and-dirty implementation of deferred unlifting. Emitting does not work. Not intended for merging.

@effectfully
Copy link
Contributor Author

/benchmark plutus-benchmark:validation

@effectfully
Copy link
Contributor Author

^ just out of curiosity

@iohk-devops
Copy link

Comparing benchmark results of 'plutus-benchmark:validation' on '61a9a0fbe' (base) and 'd3b87a894' (PR)

Script 61a9a0f d3b87a8 Change
auction_1-1 281.2 μs 309.4 μs +10.0%
auction_1-2 937.7 μs 991.3 μs +5.7%
auction_1-3 934.0 μs 990.9 μs +6.1%
auction_1-4 365.3 μs 405.2 μs +10.9%
auction_2-1 282.6 μs 308.7 μs +9.2%
auction_2-2 943.9 μs 991.0 μs +5.0%
auction_2-3 1.194 ms 1.253 ms +4.9%
auction_2-4 936.0 μs 992.4 μs +6.0%
auction_2-5 366.9 μs 406.0 μs +10.7%
crowdfunding-success-1 332.9 μs 363.3 μs +9.1%
crowdfunding-success-2 333.0 μs 363.0 μs +9.0%
crowdfunding-success-3 331.5 μs 363.2 μs +9.6%
currency-1 363.7 μs 396.3 μs +9.0%
escrow-redeem_1-1 536.4 μs 582.4 μs +8.6%
escrow-redeem_1-2 536.5 μs 583.3 μs +8.7%
escrow-redeem_2-1 627.3 μs 679.9 μs +8.4%
escrow-redeem_2-2 627.6 μs 681.5 μs +8.6%
escrow-redeem_2-3 626.0 μs 679.9 μs +8.6%
escrow-refund-1 245.3 μs 271.7 μs +10.8%
future-increase-margin-1 365.8 μs 395.5 μs +8.1%
future-increase-margin-2 814.3 μs 877.0 μs +7.7%
future-increase-margin-3 817.2 μs 876.5 μs +7.3%
future-increase-margin-4 750.6 μs 796.2 μs +6.1%
future-increase-margin-5 1.143 ms 1.205 ms +5.4%
future-pay-out-1 364.5 μs 395.4 μs +8.5%
future-pay-out-2 813.3 μs 874.2 μs +7.5%
future-pay-out-3 811.1 μs 874.1 μs +7.8%
future-pay-out-4 1.141 ms 1.205 ms +5.6%
future-settle-early-1 366.2 μs 395.4 μs +8.0%
future-settle-early-2 814.7 μs 876.8 μs +7.6%
future-settle-early-3 811.8 μs 875.6 μs +7.9%
future-settle-early-4 888.9 μs 939.2 μs +5.7%
game-sm-success_1-1 601.2 μs 646.2 μs +7.5%
game-sm-success_1-2 313.8 μs 342.6 μs +9.2%
game-sm-success_1-3 940.0 μs 1.003 ms +6.7%
game-sm-success_1-4 366.3 μs 404.0 μs +10.3%
game-sm-success_2-1 599.6 μs 649.7 μs +8.4%
game-sm-success_2-2 312.1 μs 342.8 μs +9.8%
game-sm-success_2-3 934.2 μs 1.005 ms +7.6%
game-sm-success_2-4 365.3 μs 402.8 μs +10.3%
game-sm-success_2-5 937.1 μs 1.000 ms +6.7%
game-sm-success_2-6 365.5 μs 402.4 μs +10.1%
multisig-sm-1 604.3 μs 645.7 μs +6.9%
multisig-sm-2 591.8 μs 635.2 μs +7.3%
multisig-sm-3 598.5 μs 641.0 μs +7.1%
multisig-sm-4 607.8 μs 648.4 μs +6.7%
multisig-sm-5 829.7 μs 879.0 μs +5.9%
multisig-sm-6 606.5 μs 645.9 μs +6.5%
multisig-sm-7 594.7 μs 636.8 μs +7.1%
multisig-sm-8 600.7 μs 642.8 μs +7.0%
multisig-sm-9 608.2 μs 650.4 μs +6.9%
multisig-sm-10 830.4 μs 882.1 μs +6.2%
ping-pong-1 498.8 μs 536.2 μs +7.5%
ping-pong-2 499.3 μs 537.8 μs +7.7%
ping-pong_2-1 308.3 μs 335.1 μs +8.7%
prism-1 261.2 μs 286.8 μs +9.8%
prism-2 645.8 μs 701.7 μs +8.7%
prism-3 555.8 μs 606.3 μs +9.1%
pubkey-1 220.5 μs 243.6 μs +10.5%
stablecoin_1-1 1.310 ms 1.428 ms +9.0%
stablecoin_1-2 306.2 μs 333.9 μs +9.0%
stablecoin_1-3 1.508 ms 1.648 ms +9.3%
stablecoin_1-4 326.2 μs 350.9 μs +7.6%
stablecoin_1-5 1.914 ms 2.129 ms +11.2%
stablecoin_1-6 403.4 μs 440.9 μs +9.3%
stablecoin_2-1 1.314 ms 1.431 ms +8.9%
stablecoin_2-2 306.2 μs 334.4 μs +9.2%
stablecoin_2-3 1.504 ms 1.647 ms +9.5%
stablecoin_2-4 325.1 μs 351.7 μs +8.2%
token-account-1 284.0 μs 307.6 μs +8.3%
token-account-2 497.8 μs 539.4 μs +8.4%
uniswap-1 592.7 μs 636.9 μs +7.5%
uniswap-2 341.3 μs 372.0 μs +9.0%
uniswap-3 2.448 ms 2.724 ms +11.3%
uniswap-4 534.0 μs 596.6 μs +11.7%
uniswap-5 1.720 ms 1.909 ms +11.0%
uniswap-6 511.1 μs 568.7 μs +11.3%
vesting-1 517.0 μs 555.1 μs +7.4%

@effectfully
Copy link
Contributor Author

Yup, makes perfect sense. It might be possible to tame some of that, though.

@effectfully effectfully force-pushed the effectfully/builtins/defer-readKnown-until-full-saturation branch from d3b87a8 to 6994bf9 Compare February 26, 2022 15:51
@effectfully
Copy link
Contributor Author

/benchmark plutus-benchmark:validation

@iohk-devops
Copy link

Comparing benchmark results of 'plutus-benchmark:validation' on '61a9a0fbe' (base) and '7d03746ff' (PR)

Script 61a9a0f 7d03746 Change
auction_1-1 283.4 μs 479.5 μs +69.2%
auction_1-2 941.2 μs 1.248 ms +32.6%
auction_1-3 934.4 μs 1.259 ms +34.7%
auction_1-4 367.0 μs 641.2 μs +74.7%
auction_2-1 282.2 μs 481.1 μs +70.5%
auction_2-2 939.0 μs 1.253 ms +33.4%
auction_2-3 1.196 ms 1.585 ms +32.5%
auction_2-4 933.4 μs 1.267 ms +35.7%
auction_2-5 367.0 μs 645.0 μs +75.7%
crowdfunding-success-1 332.3 μs 570.2 μs +71.6%
crowdfunding-success-2 334.3 μs 570.7 μs +70.7%
crowdfunding-success-3 335.0 μs 569.5 μs +70.0%
currency-1 366.6 μs 542.1 μs +47.9%
escrow-redeem_1-1 538.4 μs 809.5 μs +50.4%
escrow-redeem_1-2 538.2 μs 809.5 μs +50.4%
escrow-redeem_2-1 627.2 μs 930.5 μs +48.4%
escrow-redeem_2-2 625.9 μs 928.1 μs +48.3%
escrow-redeem_2-3 625.6 μs 927.5 μs +48.3%
escrow-refund-1 245.5 μs 415.7 μs +69.3%
future-increase-margin-1 365.5 μs 541.4 μs +48.1%
future-increase-margin-2 813.6 μs 1.158 ms +42.3%
future-increase-margin-3 811.5 μs 1.165 ms +43.6%
future-increase-margin-4 749.0 μs 1.025 ms +36.8%
future-increase-margin-5 1.141 ms 1.494 ms +30.9%
future-pay-out-1 367.5 μs 544.3 μs +48.1%
future-pay-out-2 817.3 μs 1.160 ms +41.9%
future-pay-out-3 814.3 μs 1.164 ms +42.9%
future-pay-out-4 1.143 ms 1.490 ms +30.4%
future-settle-early-1 365.8 μs 543.1 μs +48.5%
future-settle-early-2 813.7 μs 1.161 ms +42.7%
future-settle-early-3 813.0 μs 1.160 ms +42.7%
future-settle-early-4 888.3 μs 1.179 ms +32.7%
game-sm-success_1-1 598.8 μs 879.5 μs +46.9%
game-sm-success_1-2 313.4 μs 543.6 μs +73.5%
game-sm-success_1-3 935.9 μs 1.272 ms +35.9%
game-sm-success_1-4 367.1 μs 635.6 μs +73.1%
game-sm-success_2-1 601.8 μs 878.8 μs +46.0%
game-sm-success_2-2 314.6 μs 544.3 μs +73.0%
game-sm-success_2-3 939.1 μs 1.273 ms +35.6%
game-sm-success_2-4 367.1 μs 634.5 μs +72.8%
game-sm-success_2-5 935.8 μs 1.272 ms +35.9%
game-sm-success_2-6 365.7 μs 635.9 μs +73.9%
multisig-sm-1 603.5 μs 863.0 μs +43.0%
multisig-sm-2 593.3 μs 857.2 μs +44.5%
multisig-sm-3 599.7 μs 864.1 μs +44.1%
multisig-sm-4 606.6 μs 873.8 μs +44.0%
multisig-sm-5 829.9 μs 1.114 ms +34.2%
multisig-sm-6 602.6 μs 865.8 μs +43.7%
multisig-sm-7 592.1 μs 850.3 μs +43.6%
multisig-sm-8 599.1 μs 862.2 μs +43.9%
multisig-sm-9 607.8 μs 867.4 μs +42.7%
multisig-sm-10 830.8 μs 1.111 ms +33.7%
ping-pong-1 501.3 μs 734.0 μs +46.4%
ping-pong-2 500.3 μs 732.9 μs +46.5%
ping-pong_2-1 309.2 μs 491.3 μs +58.9%
prism-1 262.5 μs 440.2 μs +67.7%
prism-2 649.4 μs 952.1 μs +46.6%
prism-3 556.7 μs 848.2 μs +52.4%
pubkey-1 222.2 μs 384.6 μs +73.1%
stablecoin_1-1 1.313 ms 1.839 ms +40.1%
stablecoin_1-2 307.0 μs 531.8 μs +73.2%
stablecoin_1-3 1.500 ms 2.144 ms +42.9%
stablecoin_1-4 326.1 μs 566.0 μs +73.6%
stablecoin_1-5 1.907 ms 2.816 ms +47.7%
stablecoin_1-6 404.6 μs 699.3 μs +72.8%
stablecoin_2-1 1.316 ms 1.842 ms +40.0%
stablecoin_2-2 307.8 μs 531.1 μs +72.5%
stablecoin_2-3 1.503 ms 2.142 ms +42.5%
stablecoin_2-4 326.3 μs 563.5 μs +72.7%
token-account-1 283.0 μs 435.3 μs +53.8%
token-account-2 496.1 μs 747.5 μs +50.7%
uniswap-1 591.0 μs 812.9 μs +37.5%
uniswap-2 340.6 μs 539.3 μs +58.3%
uniswap-3 2.445 ms 3.511 ms +43.6%
uniswap-4 536.6 μs 915.7 μs +70.6%
uniswap-5 1.717 ms 2.528 ms +47.2%
uniswap-6 511.6 μs 869.3 μs +69.9%
vesting-1 519.9 μs 745.8 μs +43.5%

@effectfully
Copy link
Contributor Author

Oh.

@michaelpj
Copy link
Contributor

A pleasingly small change, shame about the appalling performance 😅

We also do need a way to be able to pick this behaviour at runtime (for now)...

@effectfully
Copy link
Contributor Author

We also do need a way to be able to pick this behaviour at runtime (for now)...

Implemented a proof of concept in this commit. Proof that it works.

@michaelpj
Copy link
Contributor

Neat. I had to stare at it for quite a while, but seems nice. Any idea why the performance is so garbage?

@effectfully
Copy link
Contributor Author

/benchmark plutus-benchmark:validation

@effectfully
Copy link
Contributor Author

I had to stare at it for quite a while, but seems nice.

I posted a mini version of this problem as a challenge here (more than a year ago).

Any idea why the performance is so garbage?

No point to debug it before the monomorphic makeKnown PR is merged (and some form of inlining of toBuiltinsRuntime for that matter).

@iohk-devops
Copy link

Comparing benchmark results of 'plutus-benchmark:validation' on '61a9a0fbe' (base) and 'f7ed238a8' (PR)

Script 61a9a0f f7ed238 Change
auction_1-1 281.5 μs 375.3 μs +33.3%
auction_1-2 937.8 μs 1.088 ms +16.0%
auction_1-3 931.5 μs 1.093 ms +17.3%
auction_1-4 365.5 μs 501.9 μs +37.3%
auction_2-1 282.7 μs 379.3 μs +34.2%
auction_2-2 937.4 μs 1.089 ms +16.2%
auction_2-3 1.189 ms 1.373 ms +15.5%
auction_2-4 932.4 μs 1.089 ms +16.8%
auction_2-5 367.7 μs 499.8 μs +35.9%
crowdfunding-success-1 334.2 μs 446.5 μs +33.6%
crowdfunding-success-2 334.0 μs 446.2 μs +33.6%
crowdfunding-success-3 333.1 μs 446.6 μs +34.1%
currency-1 365.1 μs 452.0 μs +23.8%
escrow-redeem_1-1 536.1 μs 673.1 μs +25.6%
escrow-redeem_1-2 535.4 μs 673.7 μs +25.8%
escrow-redeem_2-1 625.7 μs 776.9 μs +24.2%
escrow-redeem_2-2 624.7 μs 773.9 μs +23.9%
escrow-redeem_2-3 624.2 μs 776.4 μs +24.4%
escrow-refund-1 247.8 μs 325.0 μs +31.2%
future-increase-margin-1 365.6 μs 449.2 μs +22.9%
future-increase-margin-2 812.1 μs 981.1 μs +20.8%
future-increase-margin-3 811.8 μs 981.8 μs +20.9%
future-increase-margin-4 751.3 μs 884.5 μs +17.7%
future-increase-margin-5 1.149 ms 1.306 ms +13.7%
future-pay-out-1 366.3 μs 449.2 μs +22.6%
future-pay-out-2 814.9 μs 987.7 μs +21.2%
future-pay-out-3 812.4 μs 987.2 μs +21.5%
future-pay-out-4 1.139 ms 1.309 ms +14.9%
future-settle-early-1 364.9 μs 451.0 μs +23.6%
future-settle-early-2 809.9 μs 985.0 μs +21.6%
future-settle-early-3 812.8 μs 983.6 μs +21.0%
future-settle-early-4 886.6 μs 1.025 ms +15.6%
game-sm-success_1-1 597.4 μs 739.5 μs +23.8%
game-sm-success_1-2 313.0 μs 422.9 μs +35.1%
game-sm-success_1-3 937.2 μs 1.102 ms +17.6%
game-sm-success_1-4 367.6 μs 497.9 μs +35.4%
game-sm-success_2-1 600.2 μs 740.8 μs +23.4%
game-sm-success_2-2 314.2 μs 423.9 μs +34.9%
game-sm-success_2-3 936.8 μs 1.101 ms +17.5%
game-sm-success_2-4 365.8 μs 495.7 μs +35.5%
game-sm-success_2-5 934.9 μs 1.102 ms +17.9%
game-sm-success_2-6 365.1 μs 498.6 μs +36.6%
multisig-sm-1 604.9 μs 739.0 μs +22.2%
multisig-sm-2 592.7 μs 725.4 μs +22.4%
multisig-sm-3 599.1 μs 731.7 μs +22.1%
multisig-sm-4 606.5 μs 738.5 μs +21.8%
multisig-sm-5 826.3 μs 961.9 μs +16.4%
multisig-sm-6 602.1 μs 733.4 μs +21.8%
multisig-sm-7 593.3 μs 723.1 μs +21.9%
multisig-sm-8 600.6 μs 731.9 μs +21.9%
multisig-sm-9 607.7 μs 738.7 μs +21.6%
multisig-sm-10 830.1 μs 963.0 μs +16.0%
ping-pong-1 499.3 μs 611.0 μs +22.4%
ping-pong-2 499.5 μs 610.6 μs +22.2%
ping-pong_2-1 310.4 μs 394.3 μs +27.0%
prism-1 260.5 μs 352.6 μs +35.4%
prism-2 648.4 μs 800.7 μs +23.5%
prism-3 556.6 μs 705.0 μs +26.7%
pubkey-1 221.1 μs 300.0 μs +35.7%
stablecoin_1-1 1.311 ms 1.567 ms +19.5%
stablecoin_1-2 306.7 μs 415.6 μs +35.5%
stablecoin_1-3 1.499 ms 1.808 ms +20.6%
stablecoin_1-4 325.2 μs 439.9 μs +35.3%
stablecoin_1-5 1.908 ms 2.339 ms +22.6%
stablecoin_1-6 404.0 μs 546.2 μs +35.2%
stablecoin_2-1 1.310 ms 1.560 ms +19.1%
stablecoin_2-2 307.8 μs 413.0 μs +34.2%
stablecoin_2-3 1.504 ms 1.793 ms +19.2%
stablecoin_2-4 325.3 μs 439.0 μs +35.0%
token-account-1 283.3 μs 355.7 μs +25.6%
token-account-2 497.8 μs 617.9 μs +24.1%
uniswap-1 591.4 μs 699.4 μs +18.3%
uniswap-2 340.8 μs 437.6 μs +28.4%
uniswap-3 2.447 ms 2.933 ms +19.9%
uniswap-4 536.5 μs 723.1 μs +34.8%
uniswap-5 1.721 ms 2.096 ms +21.8%
uniswap-6 511.6 μs 686.8 μs +34.2%
vesting-1 518.7 μs 629.1 μs +21.3%

@michaelpj
Copy link
Contributor

Hmm, I'm keen to get this moving, though. It seems like the effect is big enough that surely it should be observable what's up even without the other things being done yet?

@effectfully
Copy link
Contributor Author

Hmm, I'm keen to get this moving, though.

Realistically, it's unlikely to happen within the next several weeks. I'll update the makeKnown monomorphization PR, which will probably change the numbers (simply because they got so much worse when I added support for emitting), but all this deferring is not free and it happens at runtime, so we gonna get a slowdown. Theoretically (theoretically!) deferring can be made even faster than the baseline (probably negligibly so, though), but for that we need to convert TypeScheme to a RuntimeScheme statically, which is only possible if TypeScheme is defined differently. I.e. there's a lot to do for this PR to become fast.

What would be considered an acceptable slowdown? Up to 15? 10? 5?

It seems like the effect is big enough that surely it should be observable what's up even without the other things being done yet?

Let's talk about that once the makeKnown monomorphization PR is in.

@effectfully effectfully force-pushed the effectfully/builtins/defer-readKnown-until-full-saturation branch 2 times, most recently from 29b8ca9 to 2bf38b9 Compare March 9, 2022 16:43
@effectfully
Copy link
Contributor Author

/benchmark plutus-benchmark:validation

@iohk-devops
Copy link

Comparing benchmark results of 'plutus-benchmark:validation' on 'edcf0e886' (base) and '2bf38b98b' (PR)

Script edcf0e8 2bf38b9 Change
auction_1-1 267.2 μs 309.7 μs +15.9%
auction_1-2 920.2 μs 987.8 μs +7.3%
auction_1-3 916.5 μs 987.1 μs +7.7%
auction_1-4 348.8 μs 408.6 μs +17.1%
auction_2-1 268.6 μs 310.6 μs +15.6%
auction_2-2 922.1 μs 990.7 μs +7.4%
auction_2-3 1.173 ms 1.258 ms +7.2%
auction_2-4 915.4 μs 990.6 μs +8.2%
auction_2-5 347.5 μs 408.9 μs +17.7%
crowdfunding-success-1 315.3 μs 366.4 μs +16.2%
crowdfunding-success-2 315.8 μs 367.1 μs +16.2%
crowdfunding-success-3 316.0 μs 366.2 μs +15.9%
currency-1 358.2 μs 395.2 μs +10.3%
escrow-redeem_1-1 521.6 μs 581.6 μs +11.5%
escrow-redeem_1-2 520.7 μs 581.8 μs +11.7%
escrow-redeem_2-1 609.4 μs 678.5 μs +11.3%
escrow-redeem_2-2 608.0 μs 676.8 μs +11.3%
escrow-redeem_2-3 607.5 μs 680.1 μs +12.0%
escrow-refund-1 235.3 μs 268.8 μs +14.2%
future-increase-margin-1 355.5 μs 395.0 μs +11.1%
future-increase-margin-2 794.3 μs 869.5 μs +9.5%
future-increase-margin-3 795.2 μs 865.2 μs +8.8%
future-increase-margin-4 734.9 μs 792.1 μs +7.8%
future-increase-margin-5 1.128 ms 1.201 ms +6.5%
future-pay-out-1 356.3 μs 395.7 μs +11.1%
future-pay-out-2 795.7 μs 873.9 μs +9.8%
future-pay-out-3 793.8 μs 872.7 μs +9.9%
future-pay-out-4 1.124 ms 1.205 ms +7.2%
future-settle-early-1 356.0 μs 397.1 μs +11.5%
future-settle-early-2 797.3 μs 872.0 μs +9.4%
future-settle-early-3 799.2 μs 868.8 μs +8.7%
future-settle-early-4 875.1 μs 937.7 μs +7.2%
game-sm-success_1-1 585.3 μs 648.8 μs +10.8%
game-sm-success_1-2 296.4 μs 345.2 μs +16.5%
game-sm-success_1-3 923.6 μs 994.1 μs +7.6%
game-sm-success_1-4 346.4 μs 404.4 μs +16.7%
game-sm-success_2-1 582.7 μs 645.7 μs +10.8%
game-sm-success_2-2 296.2 μs 346.7 μs +17.0%
game-sm-success_2-3 922.5 μs 997.0 μs +8.1%
game-sm-success_2-4 345.2 μs 405.5 μs +17.5%
game-sm-success_2-5 923.1 μs 995.9 μs +7.9%
game-sm-success_2-6 345.1 μs 404.5 μs +17.2%
multisig-sm-1 590.1 μs 649.6 μs +10.1%
multisig-sm-2 577.3 μs 636.5 μs +10.3%
multisig-sm-3 586.3 μs 643.3 μs +9.7%
multisig-sm-4 592.8 μs 650.9 μs +9.8%
multisig-sm-5 817.3 μs 874.5 μs +7.0%
multisig-sm-6 590.5 μs 653.8 μs +10.7%
multisig-sm-7 578.8 μs 640.1 μs +10.6%
multisig-sm-8 584.3 μs 647.8 μs +10.9%
multisig-sm-9 592.5 μs 653.5 μs +10.3%
multisig-sm-10 813.4 μs 879.9 μs +8.2%
ping-pong-1 486.7 μs 539.9 μs +10.9%
ping-pong-2 488.0 μs 540.6 μs +10.8%
ping-pong_2-1 297.6 μs 336.8 μs +13.2%
prism-1 247.2 μs 290.4 μs +17.5%
prism-2 631.7 μs 699.5 μs +10.7%
prism-3 538.3 μs 605.8 μs +12.5%
pubkey-1 209.0 μs 245.0 μs +17.2%
stablecoin_1-1 1.292 ms 1.417 ms +9.7%
stablecoin_1-2 289.6 μs 337.6 μs +16.6%
stablecoin_1-3 1.470 ms 1.636 ms +11.3%
stablecoin_1-4 306.3 μs 357.9 μs +16.8%
stablecoin_1-5 1.880 ms 2.104 ms +11.9%
stablecoin_1-6 381.0 μs 445.8 μs +17.0%
stablecoin_2-1 1.284 ms 1.421 ms +10.7%
stablecoin_2-2 288.2 μs 337.3 μs +17.0%
stablecoin_2-3 1.475 ms 1.634 ms +10.8%
stablecoin_2-4 306.7 μs 357.7 μs +16.6%
token-account-1 273.7 μs 306.6 μs +12.0%
token-account-2 480.1 μs 538.7 μs +12.2%
uniswap-1 586.2 μs 633.4 μs +8.1%
uniswap-2 326.2 μs 372.1 μs +14.1%
uniswap-3 2.430 ms 2.682 ms +10.4%
uniswap-4 507.4 μs 597.4 μs +17.7%
uniswap-5 1.686 ms 1.883 ms +11.7%
uniswap-6 484.9 μs 565.6 μs +16.6%
vesting-1 506.2 μs 555.6 μs +9.8%

@effectfully
Copy link
Contributor Author

/benchmark plutus-benchmark:validation

1 similar comment
@effectfully
Copy link
Contributor Author

/benchmark plutus-benchmark:validation

@iohk-devops
Copy link

Comparing benchmark results of 'plutus-benchmark:validation' on 'edcf0e886' (base) and '42357c11c' (PR)

Script edcf0e8 42357c1 Change
auction_1-1 267.3 μs 306.1 μs +14.5%
auction_1-2 919.9 μs 984.1 μs +7.0%
auction_1-3 916.8 μs 984.1 μs +7.3%
auction_1-4 348.3 μs 404.0 μs +16.0%
auction_2-1 268.2 μs 308.4 μs +15.0%
auction_2-2 920.9 μs 986.3 μs +7.1%
auction_2-3 1.170 ms 1.249 ms +6.8%
auction_2-4 913.4 μs 984.6 μs +7.8%
auction_2-5 348.3 μs 406.2 μs +16.6%
crowdfunding-success-1 314.2 μs 363.0 μs +15.5%
crowdfunding-success-2 314.7 μs 363.7 μs +15.6%
crowdfunding-success-3 314.4 μs 362.6 μs +15.3%
currency-1 354.9 μs 391.7 μs +10.4%
escrow-redeem_1-1 520.5 μs 576.4 μs +10.7%
escrow-redeem_1-2 521.9 μs 575.6 μs +10.3%
escrow-redeem_2-1 610.2 μs 669.6 μs +9.7%
escrow-redeem_2-2 610.1 μs 668.1 μs +9.5%
escrow-redeem_2-3 610.0 μs 669.1 μs +9.7%
escrow-refund-1 235.4 μs 265.4 μs +12.7%
future-increase-margin-1 356.4 μs 389.8 μs +9.4%
future-increase-margin-2 795.4 μs 859.0 μs +8.0%
future-increase-margin-3 793.4 μs 857.6 μs +8.1%
future-increase-margin-4 733.2 μs 784.8 μs +7.0%
future-increase-margin-5 1.124 ms 1.191 ms +6.0%
future-pay-out-1 355.1 μs 391.3 μs +10.2%
future-pay-out-2 792.9 μs 863.9 μs +9.0%
future-pay-out-3 791.2 μs 863.1 μs +9.1%
future-pay-out-4 1.122 ms 1.187 ms +5.8%
future-settle-early-1 356.1 μs 390.8 μs +9.7%
future-settle-early-2 795.6 μs 862.4 μs +8.4%
future-settle-early-3 797.5 μs 861.3 μs +8.0%
future-settle-early-4 869.0 μs 924.1 μs +6.3%
game-sm-success_1-1 583.1 μs 641.1 μs +9.9%
game-sm-success_1-2 295.6 μs 342.0 μs +15.7%
game-sm-success_1-3 920.4 μs 984.5 μs +7.0%
game-sm-success_1-4 345.0 μs 400.7 μs +16.1%
game-sm-success_2-1 583.2 μs 645.3 μs +10.6%
game-sm-success_2-2 296.9 μs 342.8 μs +15.5%
game-sm-success_2-3 927.1 μs 987.0 μs +6.5%
game-sm-success_2-4 346.8 μs 399.5 μs +15.2%
game-sm-success_2-5 926.4 μs 985.5 μs +6.4%
game-sm-success_2-6 346.3 μs 398.3 μs +15.0%
multisig-sm-1 590.3 μs 644.0 μs +9.1%
multisig-sm-2 579.9 μs 631.1 μs +8.8%
multisig-sm-3 585.8 μs 637.8 μs +8.9%
multisig-sm-4 591.6 μs 644.9 μs +9.0%
multisig-sm-5 813.3 μs 865.8 μs +6.5%
multisig-sm-6 588.8 μs 643.0 μs +9.2%
multisig-sm-7 576.5 μs 633.0 μs +9.8%
multisig-sm-8 584.1 μs 640.7 μs +9.7%
multisig-sm-9 592.5 μs 648.7 μs +9.5%
multisig-sm-10 816.3 μs 867.7 μs +6.3%
ping-pong-1 487.9 μs 533.8 μs +9.4%
ping-pong-2 487.6 μs 533.4 μs +9.4%
ping-pong_2-1 296.2 μs 331.2 μs +11.8%
prism-1 245.9 μs 285.5 μs +16.1%
prism-2 628.8 μs 698.8 μs +11.1%
prism-3 538.5 μs 599.0 μs +11.2%
pubkey-1 210.2 μs 242.6 μs +15.4%
stablecoin_1-1 1.294 ms 1.413 ms +9.2%
stablecoin_1-2 289.0 μs 334.6 μs +15.8%
stablecoin_1-3 1.482 ms 1.622 ms +9.4%
stablecoin_1-4 307.2 μs 355.2 μs +15.6%
stablecoin_1-5 1.881 ms 2.079 ms +10.5%
stablecoin_1-6 381.0 μs 440.9 μs +15.7%
stablecoin_2-1 1.287 ms 1.404 ms +9.1%
stablecoin_2-2 288.2 μs 333.8 μs +15.8%
stablecoin_2-3 1.476 ms 1.620 ms +9.8%
stablecoin_2-4 306.6 μs 355.8 μs +16.0%
token-account-1 272.9 μs 302.2 μs +10.7%
token-account-2 479.8 μs 530.1 μs +10.5%
uniswap-1 582.7 μs 627.1 μs +7.6%
uniswap-2 325.7 μs 367.1 μs +12.7%
uniswap-3 2.419 ms 2.657 ms +9.8%
uniswap-4 506.4 μs 587.7 μs +16.1%
uniswap-5 1.680 ms 1.860 ms +10.7%
uniswap-6 483.5 μs 560.2 μs +15.9%
vesting-1 504.6 μs 552.7 μs +9.5%

@effectfully
Copy link
Contributor Author

^ @michaelpj told ya. The average is +10.8%, which is not that bad given that this is truly a less efficient way of doing builtin application and we've got similar slowdowns in the past by tweaking unlifting just a little bit.

Still, I believe we can optimize what's in here, but not without substantial effort (in particular changing TypeScheme and how RuntimeScheme is computed from it and getting the inlining of toBuiltinsRuntime PR merged).

@iohk-devops
Copy link

Comparing benchmark results of 'plutus-benchmark:validation' on 'edcf0e886' (base) and 'f841f1b1a' (PR)

Script edcf0e8 f841f1b Change
auction_1-1 266.3 μs 308.3 μs +15.8%
auction_1-2 920.8 μs 986.9 μs +7.2%
auction_1-3 915.6 μs 980.7 μs +7.1%
auction_1-4 347.6 μs 406.2 μs +16.9%
auction_2-1 268.1 μs 310.7 μs +15.9%
auction_2-2 922.4 μs 989.8 μs +7.3%
auction_2-3 1.169 ms 1.251 ms +7.0%
auction_2-4 915.2 μs 981.8 μs +7.3%
auction_2-5 347.3 μs 406.5 μs +17.0%
crowdfunding-success-1 313.6 μs 365.1 μs +16.4%
crowdfunding-success-2 314.9 μs 364.6 μs +15.8%
crowdfunding-success-3 315.5 μs 364.4 μs +15.5%
currency-1 357.2 μs 392.8 μs +10.0%
escrow-redeem_1-1 521.3 μs 577.3 μs +10.7%
escrow-redeem_1-2 520.4 μs 577.3 μs +10.9%
escrow-redeem_2-1 609.0 μs 674.4 μs +10.7%
escrow-redeem_2-2 608.4 μs 675.4 μs +11.0%
escrow-redeem_2-3 609.1 μs 674.4 μs +10.7%
escrow-refund-1 234.8 μs 268.7 μs +14.4%
future-increase-margin-1 356.6 μs 393.1 μs +10.2%
future-increase-margin-2 794.5 μs 863.9 μs +8.7%
future-increase-margin-3 792.7 μs 865.3 μs +9.2%
future-increase-margin-4 732.0 μs 786.6 μs +7.5%
future-increase-margin-5 1.125 ms 1.192 ms +6.0%
future-pay-out-1 355.2 μs 391.8 μs +10.3%
future-pay-out-2 795.1 μs 863.9 μs +8.7%
future-pay-out-3 793.9 μs 866.6 μs +9.2%
future-pay-out-4 1.122 ms 1.194 ms +6.4%
future-settle-early-1 354.9 μs 393.3 μs +10.8%
future-settle-early-2 793.6 μs 866.1 μs +9.1%
future-settle-early-3 791.8 μs 868.2 μs +9.6%
future-settle-early-4 867.8 μs 926.5 μs +6.8%
game-sm-success_1-1 582.8 μs 643.0 μs +10.3%
game-sm-success_1-2 296.4 μs 342.9 μs +15.7%
game-sm-success_1-3 927.6 μs 995.4 μs +7.3%
game-sm-success_1-4 346.0 μs 404.3 μs +16.8%
game-sm-success_2-1 584.9 μs 644.6 μs +10.2%
game-sm-success_2-2 295.6 μs 344.3 μs +16.5%
game-sm-success_2-3 924.0 μs 993.7 μs +7.5%
game-sm-success_2-4 345.6 μs 402.9 μs +16.6%
game-sm-success_2-5 921.3 μs 992.0 μs +7.7%
game-sm-success_2-6 344.9 μs 402.2 μs +16.6%
multisig-sm-1 588.1 μs 645.9 μs +9.8%
multisig-sm-2 575.0 μs 633.1 μs +10.1%
multisig-sm-3 582.5 μs 640.7 μs +10.0%
multisig-sm-4 591.9 μs 648.2 μs +9.5%
multisig-sm-5 815.4 μs 870.7 μs +6.8%
multisig-sm-6 590.4 μs 646.9 μs +9.6%
multisig-sm-7 577.3 μs 632.3 μs +9.5%
multisig-sm-8 584.3 μs 640.7 μs +9.7%
multisig-sm-9 591.1 μs 646.9 μs +9.4%
multisig-sm-10 812.9 μs 870.5 μs +7.1%
ping-pong-1 485.8 μs 538.2 μs +10.8%
ping-pong-2 487.7 μs 538.1 μs +10.3%
ping-pong_2-1 296.6 μs 335.2 μs +13.0%
prism-1 246.3 μs 285.8 μs +16.0%
prism-2 630.9 μs 700.2 μs +11.0%
prism-3 538.8 μs 601.8 μs +11.7%
pubkey-1 209.8 μs 243.2 μs +15.9%
stablecoin_1-1 1.288 ms 1.408 ms +9.3%
stablecoin_1-2 288.3 μs 335.6 μs +16.4%
stablecoin_1-3 1.475 ms 1.624 ms +10.1%
stablecoin_1-4 306.0 μs 356.1 μs +16.4%
stablecoin_1-5 1.873 ms 2.095 ms +11.9%
stablecoin_1-6 380.0 μs 444.4 μs +16.9%
stablecoin_2-1 1.282 ms 1.412 ms +10.1%
stablecoin_2-2 288.6 μs 336.1 μs +16.5%
stablecoin_2-3 1.469 ms 1.621 ms +10.3%
stablecoin_2-4 306.7 μs 355.8 μs +16.0%
token-account-1 273.2 μs 306.0 μs +12.0%
token-account-2 479.9 μs 536.1 μs +11.7%
uniswap-1 584.0 μs 630.4 μs +7.9%
uniswap-2 324.5 μs 369.0 μs +13.7%
uniswap-3 2.421 ms 2.670 ms +10.3%
uniswap-4 506.1 μs 591.1 μs +16.8%
uniswap-5 1.693 ms 1.867 ms +10.3%
uniswap-6 484.5 μs 559.4 μs +15.5%
vesting-1 505.5 μs 552.7 μs +9.3%

@effectfully
Copy link
Contributor Author

/benchmark plutus-benchmark:validation

@iohk-devops
Copy link

Comparing benchmark results of 'plutus-benchmark:validation' on 'edcf0e886' (base) and 'bbb1ac993' (PR)

Script edcf0e8 bbb1ac9 Change
auction_1-1 265.6 μs 304.1 μs +14.5%
auction_1-2 919.4 μs 977.1 μs +6.3%
auction_1-3 912.6 μs 972.7 μs +6.6%
auction_1-4 346.9 μs 400.1 μs +15.3%
auction_2-1 266.9 μs 304.3 μs +14.0%
auction_2-2 919.6 μs 979.8 μs +6.5%
auction_2-3 1.167 ms 1.235 ms +5.8%
auction_2-4 915.2 μs 972.7 μs +6.3%
auction_2-5 346.8 μs 400.0 μs +15.3%
crowdfunding-success-1 313.4 μs 358.6 μs +14.4%
crowdfunding-success-2 314.5 μs 358.7 μs +14.1%
crowdfunding-success-3 314.9 μs 358.9 μs +14.0%
currency-1 357.4 μs 388.8 μs +8.8%
escrow-redeem_1-1 518.8 μs 574.9 μs +10.8%
escrow-redeem_1-2 519.5 μs 573.9 μs +10.5%
escrow-redeem_2-1 608.5 μs 665.6 μs +9.4%
escrow-redeem_2-2 607.0 μs 665.4 μs +9.6%
escrow-redeem_2-3 608.1 μs 664.9 μs +9.3%
escrow-refund-1 234.6 μs 265.1 μs +13.0%
future-increase-margin-1 354.4 μs 387.8 μs +9.4%
future-increase-margin-2 792.5 μs 854.5 μs +7.8%
future-increase-margin-3 792.7 μs 856.4 μs +8.0%
future-increase-margin-4 732.3 μs 784.2 μs +7.1%
future-increase-margin-5 1.122 ms 1.193 ms +6.3%
future-pay-out-1 354.8 μs 387.7 μs +9.3%
future-pay-out-2 793.8 μs 855.1 μs +7.7%
future-pay-out-3 793.8 μs 854.8 μs +7.7%
future-pay-out-4 1.123 ms 1.183 ms +5.3%
future-settle-early-1 356.0 μs 387.9 μs +9.0%
future-settle-early-2 791.9 μs 858.3 μs +8.4%
future-settle-early-3 794.1 μs 858.4 μs +8.1%
future-settle-early-4 866.9 μs 927.1 μs +6.9%
game-sm-success_1-1 581.9 μs 642.3 μs +10.4%
game-sm-success_1-2 295.9 μs 341.1 μs +15.3%
game-sm-success_1-3 928.2 μs 980.9 μs +5.7%
game-sm-success_1-4 346.9 μs 397.9 μs +14.7%
game-sm-success_2-1 586.0 μs 639.9 μs +9.2%
game-sm-success_2-2 295.7 μs 340.6 μs +15.2%
game-sm-success_2-3 927.4 μs 980.4 μs +5.7%
game-sm-success_2-4 345.1 μs 398.0 μs +15.3%
game-sm-success_2-5 923.8 μs 982.4 μs +6.3%
game-sm-success_2-6 345.2 μs 396.3 μs +14.8%
multisig-sm-1 588.3 μs 638.9 μs +8.6%
multisig-sm-2 575.6 μs 627.5 μs +9.0%
multisig-sm-3 582.4 μs 637.2 μs +9.4%
multisig-sm-4 589.8 μs 645.2 μs +9.4%
multisig-sm-5 814.7 μs 865.0 μs +6.2%
multisig-sm-6 589.7 μs 641.4 μs +8.8%
multisig-sm-7 575.7 μs 629.0 μs +9.3%
multisig-sm-8 583.3 μs 637.4 μs +9.3%
multisig-sm-9 590.3 μs 644.4 μs +9.2%
multisig-sm-10 816.0 μs 863.9 μs +5.9%
ping-pong-1 487.9 μs 531.0 μs +8.8%
ping-pong-2 487.5 μs 532.9 μs +9.3%
ping-pong_2-1 296.9 μs 331.3 μs +11.6%
prism-1 245.9 μs 285.0 μs +15.9%
prism-2 629.1 μs 695.7 μs +10.6%
prism-3 536.8 μs 598.3 μs +11.5%
pubkey-1 208.5 μs 242.7 μs +16.4%
stablecoin_1-1 1.281 ms 1.407 ms +9.8%
stablecoin_1-2 287.8 μs 331.2 μs +15.1%
stablecoin_1-3 1.473 ms 1.613 ms +9.5%
stablecoin_1-4 305.5 μs 351.9 μs +15.2%
stablecoin_1-5 1.868 ms 2.078 ms +11.2%
stablecoin_1-6 380.3 μs 437.0 μs +14.9%
stablecoin_2-1 1.286 ms 1.403 ms +9.1%
stablecoin_2-2 287.9 μs 331.0 μs +15.0%
stablecoin_2-3 1.477 ms 1.611 ms +9.1%
stablecoin_2-4 306.1 μs 353.9 μs +15.6%
token-account-1 273.1 μs 301.7 μs +10.5%
token-account-2 478.9 μs 531.3 μs +10.9%
uniswap-1 582.8 μs 624.1 μs +7.1%
uniswap-2 324.8 μs 364.4 μs +12.2%
uniswap-3 2.417 ms 2.633 ms +8.9%
uniswap-4 506.3 μs 584.3 μs +15.4%
uniswap-5 1.687 ms 1.851 ms +9.7%
uniswap-6 484.3 μs 556.8 μs +15.0%
vesting-1 505.7 μs 547.3 μs +8.2%

@michaelpj
Copy link
Contributor

The average is +10.8%, which is not that bad given that this is truly a less efficient way of doing builtin application and we've got similar slowdowns in the past by tweaking unlifting just a little bit.

Okay, I'm a little confused, lots of benchmarks. If I understand correctly, the slowdown applies to both ways of doing unlifting, and is a consequence of the machinery, rather than one way being especially slower or faster?

A relevant question might be: if we dropped the need to have this be configurable, i.e. we just switched to the new way, would that make things faster (we might have this option later)?

@effectfully
Copy link
Contributor Author

Okay, I'm a little confused, lots of benchmarks. I

Yeah, sorry, I should've been clearer.

If I understand correctly, the slowdown applies to both ways of doing unlifting, and is a consequence of the machinery, rather than one way being especially slower or faster?

Yes, the difference is like 1%, i.e. probably noise.

A relevant question might be: if we dropped the need to have this be configurable, i.e. we just switched to the new way, would that make things faster (we might have this option later)?

I don't think so. It's not really configurable right now, it's a proof-of-concept. That matching on UnliftMode is really supposed to be optimized away by the case-of-known-constructor optimization pass. Once we thread that UnliftMode parameter through the whole evaluation pipeline, the builtlin application is going to be come a little slower that what it's now in this PR.

@michaelpj
Copy link
Contributor

Once we thread that UnliftMode parameter through the whole evaluation pipeline, the builtlin application is going to be come a little slower that what it's now in this PR.

Yep I figured.

@effectfully effectfully force-pushed the effectfully/builtins/defer-readKnown-until-full-saturation branch from bbb1ac9 to e3073ec Compare March 21, 2022 13:04
@effectfully
Copy link
Contributor Author

/benchmark plutus-benchmark:validation

@iohk-devops
Copy link

Comparing benchmark results of 'plutus-benchmark:validation' on 'dc9275462' (base) and 'e3073ec34' (PR)

Script dc92754 e3073ec Change
auction_1-1 241.7 μs 281.0 μs +16.3%
auction_1-2 883.3 μs 944.2 μs +6.9%
auction_1-3 873.2 μs 938.4 μs +7.5%
auction_1-4 312.4 μs 368.2 μs +17.9%
auction_2-1 241.7 μs 281.1 μs +16.3%
auction_2-2 888.1 μs 942.3 μs +6.1%
auction_2-3 1.124 ms 1.203 ms +7.0%
auction_2-4 877.1 μs 941.5 μs +7.3%
auction_2-5 313.9 μs 368.7 μs +17.5%
crowdfunding-success-1 284.8 μs 331.4 μs +16.4%
crowdfunding-success-2 284.7 μs 333.2 μs +17.0%
crowdfunding-success-3 284.2 μs 333.7 μs +17.4%
currency-1 336.1 μs 373.6 μs +11.2%
escrow-redeem_1-1 486.5 μs 544.5 μs +11.9%
escrow-redeem_1-2 485.8 μs 543.3 μs +11.8%
escrow-redeem_2-1 570.3 μs 634.0 μs +11.2%
escrow-redeem_2-2 570.0 μs 634.5 μs +11.3%
escrow-redeem_2-3 571.1 μs 632.6 μs +10.8%
escrow-refund-1 213.8 μs 246.8 μs +15.4%
future-increase-margin-1 335.3 μs 372.1 μs +11.0%
future-increase-margin-2 749.0 μs 821.6 μs +9.7%
future-increase-margin-3 750.8 μs 820.1 μs +9.2%
future-increase-margin-4 698.4 μs 756.1 μs +8.3%
future-increase-margin-5 1.084 ms 1.153 ms +6.4%
future-pay-out-1 335.5 μs 371.7 μs +10.8%
future-pay-out-2 750.7 μs 820.1 μs +9.2%
future-pay-out-3 749.9 μs 820.3 μs +9.4%
future-pay-out-4 1.076 ms 1.149 ms +6.8%
future-settle-early-1 335.4 μs 371.4 μs +10.7%
future-settle-early-2 748.4 μs 817.7 μs +9.3%
future-settle-early-3 748.8 μs 820.2 μs +9.5%
future-settle-early-4 824.7 μs 892.6 μs +8.2%
game-sm-success_1-1 549.1 μs 608.1 μs +10.7%
game-sm-success_1-2 267.2 μs 314.9 μs +17.9%
game-sm-success_1-3 878.9 μs 952.0 μs +8.3%
game-sm-success_1-4 311.8 μs 367.7 μs +17.9%
game-sm-success_2-1 549.5 μs 609.9 μs +11.0%
game-sm-success_2-2 266.8 μs 313.5 μs +17.5%
game-sm-success_2-3 876.8 μs 949.1 μs +8.2%
game-sm-success_2-4 311.5 μs 367.1 μs +17.8%
game-sm-success_2-5 877.0 μs 949.4 μs +8.3%
game-sm-success_2-6 311.8 μs 366.9 μs +17.7%
multisig-sm-1 560.4 μs 614.5 μs +9.7%
multisig-sm-2 549.7 μs 599.7 μs +9.1%
multisig-sm-3 554.5 μs 608.8 μs +9.8%
multisig-sm-4 558.9 μs 614.8 μs +10.0%
multisig-sm-5 780.1 μs 834.8 μs +7.0%
multisig-sm-6 559.7 μs 616.3 μs +10.1%
multisig-sm-7 548.3 μs 600.8 μs +9.6%
multisig-sm-8 552.1 μs 612.4 μs +10.9%
multisig-sm-9 560.4 μs 613.6 μs +9.5%
multisig-sm-10 776.8 μs 830.8 μs +7.0%
ping-pong-1 460.6 μs 509.3 μs +10.6%
ping-pong-2 460.5 μs 508.8 μs +10.5%
ping-pong_2-1 274.5 μs 313.0 μs +14.0%
prism-1 221.6 μs 262.7 μs +18.5%
prism-2 593.3 μs 659.3 μs +11.1%
prism-3 501.9 μs 565.9 μs +12.8%
pubkey-1 188.9 μs 221.7 μs +17.4%
stablecoin_1-1 1.219 ms 1.335 ms +9.5%
stablecoin_1-2 261.1 μs 305.8 μs +17.1%
stablecoin_1-3 1.384 ms 1.535 ms +10.9%
stablecoin_1-4 276.6 μs 324.7 μs +17.4%
stablecoin_1-5 1.752 ms 1.956 ms +11.6%
stablecoin_1-6 343.7 μs 403.6 μs +17.4%
stablecoin_2-1 1.216 ms 1.336 ms +9.9%
stablecoin_2-2 261.1 μs 305.1 μs +16.9%
stablecoin_2-3 1.394 ms 1.532 ms +9.9%
stablecoin_2-4 278.0 μs 324.3 μs +16.7%
token-account-1 254.5 μs 284.2 μs +11.7%
token-account-2 453.8 μs 505.9 μs +11.5%
uniswap-1 557.2 μs 607.5 μs +9.0%
uniswap-2 301.9 μs 343.0 μs +13.6%
uniswap-3 2.258 ms 2.520 ms +11.6%
uniswap-4 459.2 μs 539.7 μs +17.5%
uniswap-5 1.556 ms 1.750 ms +12.5%
uniswap-6 440.4 μs 514.6 μs +16.8%
vesting-1 478.2 μs 527.8 μs +10.4%

@effectfully
Copy link
Contributor Author

Seems like rebasing on master made things a tiny bit worse, by about 1% or so. Maybe just noise.

@effectfully
Copy link
Contributor Author

Closing in favor of #4516.

@effectfully effectfully closed this Apr 6, 2022
@effectfully effectfully deleted the effectfully/builtins/defer-readKnown-until-full-saturation branch April 6, 2022 22:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants