-
Notifications
You must be signed in to change notification settings - Fork 0
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
1.0.0 #1
Conversation
|
😬👆 |
I wonder if Some things to consider:
|
Yes
What you mean here? the optimizations are done compile time right? is the optimization specialized to Eff? If there are couple |
This made it a bit faster in some cases
|
src/Control/Monad/Ff.js
Outdated
}; | ||
}; | ||
|
||
exports.toEff = function (inputEff) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe you could do a typeof inputEff === "function"
check here so you can avoid creating another thunk to run the inner thunk.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so something like this:
if (typeof inputEff === "function") {
return inputEff
}
thanks!
Since you have an unlifted thunk as a representation for |
I don't understand how should I inline statements the same way? This is what I tired, but i'm not seeing same optimization happening on Ef, is there some way to force that? /cc @paf31: test.purs x :: Eff TestEff Unit
x = do
ar <- mkArr
_ <- pushToArr ar 1
_ <- pushToArr ar 1
_ <- pushToArr ar 1
pure unit
x' :: Ef TestEff Unit
x' = do
ar <- mkArr_
_ <- pushToArr_ ar 1
_ <- pushToArr_ ar 1
_ <- pushToArr_ ar 1
pure unit
foreign import mkArr :: forall e a. Eff e (Arr a)
foreign import mkArr_ :: forall e a. Ef e (Arr a)
foreign import pushToArr :: forall e a. Arr a -> a -> Eff e a
foreign import pushToArr_ :: forall e a. Arr a -> a -> Ef e a out.js var x$prime = Control_Bind.bind(Control_Monad_Ef.bindEf)($foreign.mkArr_)(function (v) {
return Control_Bind.bind(Control_Monad_Ef.bindEf)($foreign.pushToArr_(v)(1))(function (v1) {
return Control_Bind.bind(Control_Monad_Ef.bindEf)($foreign.pushToArr_(v)(1))(function (v2) {
return Control_Bind.bind(Control_Monad_Ef.bindEf)($foreign.pushToArr_(v)(1))(function (v3) {
return Control_Applicative.pure(Control_Monad_Ef.applicativeEf)(Data_Unit.unit);
});
});
});
});
var x = function __do() {
var v = $foreign.mkArr();
var v1 = $foreign.pushToArr(v)(1)();
var v2 = $foreign.pushToArr(v)(1)();
var v3 = $foreign.pushToArr(v)(1)();
return Data_Unit.unit;
}; test.js exports.mkArr = function(){
return [];
};
exports.pushToArr = function(xs) {
return function(x) {
return function() {
xs.push(x);
return x;
};
};
};
exports.mkArr_ = function(){
return [];
};
exports.pushToArr_ = function(xs) {
return function(x) {
return function() {
xs.push(x);
return x;
};
};
}; |
You would need to either a) change the compiler, but this would need to be in a fork |
Oh sorry, I meant as a hypothetical 😄. Yes, it would still require built-in compiler optimizations. My point was that the optimizations can be made to be identical for both types due to the representation. |
I think it would have to be coreimp, as corefn has no way to write raw statements. |
ah :d gotcha |
Added
|
The implementation is pretty fast and stack safe. So what you think how could we "integrate" work done in |
These are great benchmarks! It's nice to know that How about this: function makeEff(tag, _1, _2) {
var eff = function () {
return runEff(eff);
};
eff.tag = tag;
eff._1 = _1;
eff._2 = _2;
return eff;
} And then every |
That may result in too much heap due to the closure. I wonder if you could do something with |
I think this is interesting, and makes a useful library, but as I said above, not a good default for the core libraries. The default should be as close to the JS as possible, so that the FFI can be simple and the optimizations straightforward. |
Maybe you could take a self reference: function makeEff(tag, _1, _2) {
var eff = function thisEff() {
return runEff(thisEff);
};
eff.tag = tag;
eff._1 = _1;
eff._2 = _2;
return eff;
} I'd be interested to see the difference. |
Mapping was happening on pure node, such operation was optimised explicitly in Aff, so switched to do map on effect so it's more fair
1. store
|
bench | type | n | mean | stddev | min | max |
---|---|---|---|---|---|---|
>>=R build | Eff | 100 | 1.71 μs | 15.70 μs | 260.00 ns | 310.62 μs |
>>=R build | Aff | 100 | 785.61 ns | 7.02 μs | 279.00 ns | 149.53 μs |
>>=R build | Ef | 100 | 1.12 μs | 14.36 μs | 360.00 ns | 368.61 μs |
>>=R run | Eff | 100 | 78.59 μs | 83.71 μs | 52.63 μs | 1.03 ms |
>>=R run | Aff | 100 | 114.23 μs | 353.41 μs | 60.22 μs | 3.85 ms |
>>=R run | Ef | 100 | 74.37 μs | 99.36 μs | 55.50 μs | 1.06 ms |
>>=R build | Eff | 500 | 423.09 ns | 2.56 μs | 239.00 ns | 68.21 μs |
>>=R build | Aff | 500 | 498.83 ns | 2.66 μs | 287.00 ns | 57.79 μs |
>>=R build | Ef | 500 | 674.51 ns | 3.76 μs | 366.00 ns | 95.76 μs |
>>=R run | Eff | 500 | 389.44 μs | 297.95 μs | 279.99 μs | 2.09 ms |
>>=R run | Aff | 500 | 343.42 μs | 205.56 μs | 288.75 μs | 1.94 ms |
>>=R run | Ef | 500 | 329.51 μs | 247.80 μs | 261.15 μs | 2.74 ms |
>>=R build | Eff | 1000 | 472.30 ns | 3.28 μs | 241.00 ns | 74.95 μs |
>>=R build | Aff | 1000 | 488.50 ns | 2.49 μs | 288.00 ns | 61.29 μs |
>>=R build | Ef | 1000 | 693.37 ns | 3.77 μs | 373.00 ns | 94.18 μs |
>>=R run | Eff | 1000 | 758.93 μs | 425.89 μs | 558.46 μs | 3.76 ms |
>>=R run | Aff | 1000 | 670.60 μs | 255.59 μs | 575.84 μs | 2.82 ms |
>>=R run | Ef | 1000 | 680.97 μs | 451.23 μs | 517.09 μs | 3.50 ms |
>>=R build | Eff | 2000 | 387.29 ns | 1.98 μs | 243.00 ns | 49.06 μs |
>>=R build | Aff | 2000 | 477.95 ns | 2.47 μs | 285.00 ns | 47.09 μs |
>>=R build | Ef | 2000 | 645.97 ns | 3.69 μs | 370.00 ns | 80.18 μs |
>>=R run | Eff | 2000 | 1.57 ms | 599.66 μs | 1.13 ms | 6.77 ms |
>>=R run | Aff | 2000 | 1.47 ms | 647.71 μs | 1.15 ms | 4.64 ms |
>>=R run | Ef | 2000 | 1.39 ms | 660.42 μs | 1.04 ms | 4.83 ms |
>>=R build | Eff | 4000 | 405.36 ns | 2.38 μs | 244.00 ns | 62.05 μs |
>>=R build | Aff | 4000 | 817.42 ns | 2.97 μs | 480.00 ns | 69.95 μs |
>>=R build | Ef | 4000 | 711.11 ns | 4.36 μs | 380.00 ns | 118.39 μs |
>>=R run | Eff | 4000 | 3.39 ms | 845.87 μs | 2.41 ms | 12.32 ms |
>>=R run | Aff | 4000 | 3.27 ms | 1.22 ms | 2.32 ms | 10.56 ms |
>>=R run | Ef | 4000 | 3.26 ms | 1.41 ms | 2.09 ms | 9.02 ms |
>>=R build | Eff | 8000 | 413.41 ns | 2.50 μs | 242.00 ns | 59.22 μs |
>>=R build | Aff | 8000 | 465.01 ns | 2.09 μs | 289.00 ns | 51.52 μs |
>>=R build | Ef | 8000 | 604.56 ns | 3.03 μs | 369.00 ns | 73.41 μs |
>>=R run | Eff | 8000 | 8.34 ms | 1.85 ms | 6.99 ms | 43.05 ms |
>>=R run | Aff | 8000 | 7.38 ms | 2.27 ms | 4.69 ms | 21.16 ms |
>>=R run | Ef | 8000 | 11.09 ms | 918.20 μs | 6.68 ms | 27.11 ms |
>>=R build | Eff | 10000 | 426.69 ns | 2.65 μs | 236.00 ns | 68.14 μs |
>>=R build | Aff | 10000 | 501.91 ns | 3.54 μs | 287.00 ns | 104.13 μs |
>>=R build | Ef | 10000 | 830.32 ns | 5.52 μs | 357.00 ns | 122.04 μs |
>>=R run | Eff | 10000 | 67.56 ms | 16.43 ms | 17.30 ms | 121.04 ms |
>>=R run | Aff | 10000 | 12.14 ms | 1.15 ms | 6.43 ms | 29.68 ms |
>>=R run | Ef | 10000 | 11.13 ms | 1.03 ms | 7.87 ms | 26.05 ms |
>>=L build | Eff | 100 | 688.34 ns | 8.74 μs | 242.00 ns | 222.75 μs |
>>=L build | Aff | 100 | 479.38 ns | 2.86 μs | 283.00 ns | 80.35 μs |
>>=L build | Ef | 100 | 614.15 ns | 3.33 μs | 374.00 ns | 90.97 μs |
>>=L run | Eff | 100 | 86.19 μs | 162.23 μs | 54.91 μs | 2.32 ms |
>>=L run | Aff | 100 | 83.65 μs | 111.48 μs | 66.41 μs | 2.28 ms |
>>=L run | Ef | 100 | 75.63 μs | 139.61 μs | 56.95 μs | 2.44 ms |
>>=L build | Eff | 500 | 409.27 ns | 2.24 μs | 250.00 ns | 56.94 μs |
>>=L build | Aff | 500 | 463.48 ns | 2.29 μs | 289.00 ns | 61.53 μs |
>>=L build | Ef | 500 | 586.78 ns | 2.80 μs | 374.00 ns | 71.66 μs |
>>=L run | Eff | 500 | 424.87 μs | 404.61 μs | 289.11 μs | 2.84 ms |
>>=L run | Aff | 500 | 385.35 μs | 209.29 μs | 321.56 μs | 2.47 ms |
>>=L run | Ef | 500 | 339.54 μs | 251.37 μs | 271.77 μs | 2.59 ms |
>>=L build | Eff | 1000 | 440.45 ns | 2.88 μs | 243.00 ns | 75.65 μs |
>>=L build | Aff | 1000 | 450.12 ns | 2.34 μs | 284.00 ns | 63.00 μs |
>>=L build | Ef | 1000 | 597.32 ns | 3.46 μs | 375.00 ns | 100.11 μs |
>>=L run | Eff | 1000 | 878.17 μs | 619.18 μs | 561.76 μs | 4.61 ms |
>>=L run | Aff | 1000 | 776.17 μs | 311.28 μs | 640.45 μs | 3.03 ms |
>>=L run | Ef | 1000 | 687.25 μs | 360.89 μs | 538.21 μs | 2.92 ms |
>>=L build | Eff | 2000 | 387.05 ns | 2.11 μs | 243.00 ns | 53.99 μs |
>>=L build | Aff | 2000 | 442.71 ns | 2.17 μs | 283.00 ns | 50.22 μs |
>>=L build | Ef | 2000 | 595.97 ns | 2.76 μs | 373.00 ns | 70.33 μs |
>>=L run | Eff | 2000 | 1.87 ms | 880.22 μs | 1.28 ms | 8.48 ms |
>>=L run | Aff | 2000 | 1.56 ms | 433.59 μs | 1.29 ms | 4.66 ms |
>>=L run | Ef | 2000 | 1.90 ms | 712.17 μs | 1.46 ms | 4.82 ms |
>>=L build | Eff | 4000 | 393.94 ns | 2.70 μs | 247.00 ns | 83.52 μs |
>>=L build | Aff | 4000 | 410.92 ns | 2.04 μs | 285.00 ns | 62.55 μs |
>>=L build | Ef | 4000 | 550.97 ns | 2.68 μs | 377.00 ns | 81.39 μs |
>>=L run | Eff | 4000 | 4.12 ms | 1.43 ms | 2.71 ms | 19.78 ms |
>>=L run | Aff | 4000 | 3.79 ms | 1.36 ms | 2.65 ms | 7.87 ms |
>>=L run | Ef | 4000 | 3.85 ms | 940.81 μs | 2.98 ms | 6.82 ms |
>>=L build | Eff | 8000 | 350.50 ns | 1.74 μs | 245.00 ns | 54.50 μs |
>>=L build | Aff | 8000 | 413.31 ns | 2.10 μs | 286.00 ns | 65.69 μs |
>>=L build | Ef | 8000 | 521.19 ns | 2.52 μs | 380.00 ns | 78.53 μs |
>>=L run | Eff | 8000 | 14.89 ms | 2.89 ms | 8.47 ms | 53.77 ms |
>>=L run | Aff | 8000 | 7.94 ms | 2.25 ms | 5.73 ms | 22.69 ms |
>>=L run | Ef | 8000 | 12.69 ms | 629.11 μs | 9.06 ms | 16.57 ms |
map build | Eff | 100 | 603.87 ns | 6.99 μs | 242.00 ns | 165.81 μs |
map build | Aff | 100 | 393.05 ns | 1.89 μs | 284.00 ns | 59.30 μs |
map build | Ef | 100 | 524.01 ns | 2.32 μs | 383.00 ns | 71.62 μs |
map run | Eff | 100 | 66.05 μs | 156.95 μs | 41.84 μs | 3.04 ms |
map run | Aff | 100 | 34.61 μs | 32.64 μs | 29.93 μs | 979.52 μs |
map run | Ef | 100 | 43.46 μs | 31.86 μs | 36.85 μs | 939.45 μs |
map build | Eff | 500 | 377.58 ns | 2.33 μs | 254.00 ns | 73.18 μs |
map build | Aff | 500 | 766.19 ns | 5.03 μs | 290.00 ns | 99.31 μs |
map build | Ef | 500 | 544.15 ns | 2.53 μs | 383.00 ns | 77.67 μs |
map run | Eff | 500 | 291.56 μs | 301.25 μs | 204.47 μs | 2.42 ms |
map run | Aff | 500 | 152.43 μs | 59.56 μs | 138.00 μs | 1.60 ms |
map run | Ef | 500 | 191.71 μs | 43.82 μs | 173.74 μs | 1.15 ms |
map build | Eff | 1000 | 366.88 ns | 2.04 μs | 249.00 ns | 64.72 μs |
map build | Aff | 1000 | 590.20 ns | 4.10 μs | 286.00 ns | 87.98 μs |
map build | Ef | 1000 | 560.40 ns | 3.35 μs | 380.00 ns | 104.16 μs |
map run | Eff | 1000 | 591.60 μs | 461.28 μs | 407.66 μs | 3.17 ms |
map run | Aff | 1000 | 307.60 μs | 76.74 μs | 277.95 μs | 1.96 ms |
map run | Ef | 1000 | 381.15 μs | 63.60 μs | 348.81 μs | 1.30 ms |
map build | Eff | 2000 | 352.88 ns | 1.62 μs | 248.00 ns | 51.23 μs |
map build | Aff | 2000 | 550.17 ns | 3.41 μs | 290.00 ns | 76.72 μs |
map build | Ef | 2000 | 615.11 ns | 3.44 μs | 382.00 ns | 105.38 μs |
map run | Eff | 2000 | 1.27 ms | 727.35 μs | 829.96 μs | 5.44 ms |
map run | Aff | 2000 | 705.77 μs | 139.14 μs | 636.44 μs | 2.68 ms |
map run | Ef | 2000 | 758.22 μs | 86.64 μs | 690.01 μs | 1.74 ms |
map build | Eff | 4000 | 379.64 ns | 1.89 μs | 247.00 ns | 58.91 μs |
map build | Aff | 4000 | 610.16 ns | 4.25 μs | 359.00 ns | 130.67 μs |
map build | Ef | 4000 | 884.60 ns | 6.79 μs | 381.00 ns | 212.99 μs |
map run | Eff | 4000 | 2.63 ms | 1.11 ms | 1.79 ms | 9.18 ms |
map run | Aff | 4000 | 1.65 ms | 200.53 μs | 1.54 ms | 4.51 ms |
map run | Ef | 4000 | 1.57 ms | 258.31 μs | 1.40 ms | 3.23 ms |
map build | Eff | 5000 | 402.61 ns | 2.72 μs | 247.00 ns | 85.80 μs |
map build | Aff | 5000 | 576.00 ns | 3.46 μs | 361.00 ns | 108.35 μs |
map build | Ef | 5000 | 569.57 ns | 4.04 μs | 380.00 ns | 126.99 μs |
map run | Eff | 5000 | 4.59 ms | 2.13 ms | 2.33 ms | 11.31 ms |
map run | Aff | 5000 | 2.12 ms | 283.92 μs | 1.90 ms | 5.19 ms |
map run | Ef | 5000 | 2.00 ms | 324.50 μs | 1.74 ms | 4.25 ms |
apply build | Eff | 100 | 753.18 ns | 7.39 μs | 242.00 ns | 163.91 μs |
apply build | Aff | 100 | 623.71 ns | 3.77 μs | 357.00 ns | 116.91 μs |
apply build | Ef | 100 | 591.71 ns | 2.71 μs | 414.00 ns | 82.43 μs |
apply run | Eff | 100 | 174.97 μs | 232.80 μs | 115.41 μs | 1.97 ms |
apply run | Aff | 100 | 204.46 μs | 119.15 μs | 171.84 μs | 1.61 ms |
apply run | Ef | 100 | 143.56 μs | 82.78 μs | 121.26 μs | 1.06 ms |
apply build | Eff | 500 | 436.73 ns | 2.30 μs | 247.00 ns | 67.09 μs |
apply build | Aff | 500 | 571.61 ns | 2.94 μs | 359.00 ns | 91.65 μs |
apply build | Ef | 500 | 599.88 ns | 4.19 μs | 382.00 ns | 130.64 μs |
apply run | Eff | 500 | 964.92 μs | 679.49 μs | 615.91 μs | 5.04 ms |
apply run | Aff | 500 | 1.04 ms | 393.97 μs | 849.20 μs | 3.16 ms |
apply run | Ef | 500 | 716.98 μs | 208.73 μs | 617.84 μs | 2.01 ms |
apply build | Eff | 1000 | 360.04 ns | 2.08 μs | 246.00 ns | 66.11 μs |
apply build | Aff | 1000 | 532.21 ns | 2.60 μs | 363.00 ns | 81.88 μs |
apply build | Ef | 1000 | 576.99 ns | 2.91 μs | 381.00 ns | 89.14 μs |
apply run | Eff | 1000 | 2.11 ms | 1.10 ms | 1.28 ms | 7.17 ms |
apply run | Aff | 1000 | 2.14 ms | 644.01 μs | 1.70 ms | 5.10 ms |
apply run | Ef | 1000 | 1.47 ms | 270.63 μs | 1.26 ms | 2.88 ms |
apply build | Eff | 2000 | 383.30 ns | 2.18 μs | 256.00 ns | 68.31 μs |
apply build | Aff | 2000 | 549.86 ns | 2.60 μs | 364.00 ns | 80.79 μs |
apply build | Ef | 2000 | 590.85 ns | 4.25 μs | 383.00 ns | 132.21 μs |
apply run | Eff | 2000 | 5.42 ms | 1.99 ms | 2.93 ms | 14.68 ms |
apply run | Aff | 2000 | 4.57 ms | 1.12 ms | 3.46 ms | 8.16 ms |
apply run | Ef | 2000 | 2.98 ms | 434.08 μs | 2.52 ms | 5.39 ms |
apply build | Eff | 4000 | 359.07 ns | 1.70 μs | 246.00 ns | 53.87 μs |
apply build | Aff | 4000 | 632.66 ns | 3.66 μs | 373.00 ns | 115.70 μs |
apply build | Ef | 4000 | 584.80 ns | 3.62 μs | 388.00 ns | 113.48 μs |
apply run | Eff | 4000 | 26.81 ms | 5.19 ms | 15.51 ms | 50.33 ms |
apply run | Aff | 4000 | 9.41 ms | 1.72 ms | 6.91 ms | 15.40 ms |
apply run | Ef | 4000 | 5.99 ms | 526.85 μs | 5.39 ms | 9.36 ms |
apply build | Eff | 5000 | 342.75 ns | 1.87 μs | 245.00 ns | 59.27 μs |
apply build | Aff | 5000 | 530.40 ns | 3.14 μs | 353.00 ns | 98.75 μs |
apply build | Ef | 5000 | 552.04 ns | 3.11 μs | 380.00 ns | 97.23 μs |
apply run | Eff | 5000 | 72.99 ms | 23.32 ms | 36.56 ms | 158.01 ms |
apply run | Aff | 5000 | 12.65 ms | 1.35 ms | 11.74 ms | 31.80 ms |
apply run | Ef | 5000 | 9.81 ms | 2.06 ms | 6.95 ms | 19.70 ms |
extended bench:
bench | type | n | mean | stddev | min | max |
---|---|---|---|---|---|---|
>>=R build | Aff | 20000 | 59.24 μs | 103.16 μs | 3.06 μs | 213.81 μs |
>>=R build | Ef | 20000 | 69.12 μs | 119.96 μs | 781.00 ns | 248.26 μs |
>>=R run | Aff | 20000 | 58.35 ms | 6.37 ms | 49.21 ms | 63.38 ms |
>>=R run | Ef | 20000 | 67.08 ms | 21.99 ms | 45.10 ms | 95.20 ms |
>>=R build | Aff | 50000 | 25.13 μs | 47.41 μs | 1.11 μs | 96.23 μs |
>>=R build | Ef | 50000 | 26.24 μs | 40.09 μs | 652.00 ns | 85.16 μs |
>>=R run | Aff | 50000 | 133.90 ms | 25.01 ms | 115.01 ms | 168.75 ms |
>>=R run | Ef | 50000 | 137.69 ms | 38.34 ms | 113.59 ms | 194.91 ms |
>>=R build | Aff | 100000 | 19.27 μs | 36.70 μs | 663.00 ns | 74.32 μs |
>>=R build | Ef | 100000 | 37.30 μs | 58.93 μs | 1.23 μs | 124.89 μs |
>>=R run | Aff | 100000 | 220.46 ms | 52.33 ms | 192.06 ms | 298.87 ms |
>>=R run | Ef | 100000 | 289.22 ms | 18.41 ms | 263.64 ms | 303.31 ms |
>>=R build | Aff | 1000000 | 47.52 μs | 87.66 μs | 648.00 ns | 178.85 μs |
>>=R build | Ef | 1000000 | 32.69 μs | 51.68 μs | 594.00 ns | 109.09 μs |
>>=R run | Aff | 1000000 | 2.43 s | 102.44 ms | 2.30 s | 2.55 s |
>>=R run | Ef | 1000000 | 3.08 s | 433.87 ms | 2.82 s | 3.73 s |
>>=L build | Aff | 20000 | 43.12 μs | 79.90 μs | 560.00 ns | 162.85 μs |
>>=L build | Ef | 20000 | 36.79 μs | 59.48 μs | 680.00 ns | 124.98 μs |
>>=L run | Aff | 20000 | 56.54 ms | 7.98 ms | 47.12 ms | 63.54 ms |
>>=L run | Ef | 20000 | 62.14 ms | 27.68 ms | 41.02 ms | 100.93 ms |
>>=L build | Aff | 50000 | 16.64 μs | 31.09 μs | 854.00 ns | 63.27 μs |
>>=L build | Ef | 50000 | 25.03 μs | 36.60 μs | 646.00 ns | 78.30 μs |
>>=L run | Aff | 50000 | 147.03 ms | 39.37 ms | 113.96 ms | 199.06 ms |
>>=L run | Ef | 50000 | 148.35 ms | 33.50 ms | 116.78 ms | 191.63 ms |
>>=L build | Aff | 100000 | 56.91 μs | 107.77 μs | 1.62 μs | 218.55 μs |
>>=L build | Ef | 100000 | 33.46 μs | 52.53 μs | 877.00 ns | 111.08 μs |
>>=L run | Aff | 100000 | 290.46 ms | 59.60 ms | 241.86 ms | 371.72 ms |
>>=L run | Ef | 100000 | 307.69 ms | 31.11 ms | 271.62 ms | 347.12 ms |
>>=L build | Aff | 1000000 | 68.43 μs | 128.18 μs | 632.00 ns | 260.54 μs |
>>=L build | Ef | 1000000 | 30.22 μs | 47.15 μs | 626.00 ns | 99.75 μs |
>>=L run | Aff | 1000000 | 3.02 s | 217.05 ms | 2.84 s | 3.33 s |
>>=L run | Ef | 1000000 | 3.41 s | 384.64 ms | 3.12 s | 3.95 s |
map build | Aff | 10000 | 65.59 μs | 115.13 μs | 3.15 μs | 238.10 μs |
map build | Ef | 10000 | 65.39 μs | 114.29 μs | 675.00 ns | 236.10 μs |
map run | Aff | 10000 | 15.10 ms | 9.14 ms | 6.85 ms | 27.63 ms |
map run | Ef | 10000 | 7.62 ms | 3.64 ms | 3.64 ms | 11.95 ms |
map build | Aff | 20000 | 25.98 μs | 40.96 μs | 732.00 ns | 86.48 μs |
map build | Ef | 20000 | 41.60 μs | 65.87 μs | 681.00 ns | 138.89 μs |
map run | Aff | 20000 | 25.72 ms | 11.23 ms | 11.42 ms | 38.88 ms |
map run | Ef | 20000 | 15.47 ms | 6.87 ms | 9.05 ms | 25.01 ms |
map build | Aff | 50000 | 30.67 μs | 52.96 μs | 652.00 ns | 109.75 μs |
map build | Ef | 50000 | 26.61 μs | 37.17 μs | 693.00 ns | 79.90 μs |
map run | Aff | 50000 | 63.48 ms | 36.50 ms | 35.91 ms | 117.19 ms |
map run | Ef | 50000 | 60.90 ms | 18.52 ms | 41.93 ms | 80.25 ms |
map build | Aff | 100000 | 37.18 μs | 62.22 μs | 1.07 μs | 129.88 μs |
map build | Ef | 100000 | 24.45 μs | 35.40 μs | 677.00 ns | 75.98 μs |
map run | Aff | 100000 | 145.08 ms | 73.58 ms | 95.31 ms | 253.62 ms |
map run | Ef | 100000 | 116.41 ms | 28.09 ms | 98.57 ms | 158.30 ms |
map build | Aff | 1000000 | 23.51 μs | 38.48 μs | 563.00 ns | 80.67 μs |
map build | Ef | 1000000 | 31.83 μs | 49.70 μs | 637.00 ns | 105.11 μs |
map run | Aff | 1000000 | 1.44 s | 810.81 ms | 877.74 ms | 2.63 s |
map run | Ef | 1000000 | 1.24 s | 182.04 ms | 1.01 s | 1.39 s |
apply build | Aff | 10000 | 61.05 μs | 109.44 μs | 638.00 ns | 224.79 μs |
apply build | Ef | 10000 | 41.17 μs | 64.33 μs | 703.00 ns | 136.05 μs |
apply run | Aff | 10000 | 47.19 ms | 12.73 ms | 36.01 ms | 63.88 ms |
apply run | Ef | 10000 | 31.67 ms | 11.11 ms | 17.72 ms | 41.68 ms |
apply build | Aff | 20000 | 29.84 μs | 52.05 μs | 663.00 ns | 107.62 μs |
apply build | Ef | 20000 | 26.61 μs | 40.97 μs | 647.00 ns | 86.91 μs |
apply run | Aff | 20000 | 112.90 ms | 25.53 ms | 91.10 ms | 149.44 ms |
apply run | Ef | 20000 | 75.06 ms | 11.76 ms | 66.09 ms | 91.28 ms |
apply build | Aff | 50000 | 22.61 μs | 38.23 μs | 600.00 ns | 79.62 μs |
apply build | Ef | 50000 | 40.43 μs | 66.50 μs | 655.00 ns | 139.23 μs |
apply run | Aff | 50000 | 253.01 ms | 63.15 ms | 217.79 ms | 347.65 ms |
apply run | Ef | 50000 | 212.55 ms | 33.33 ms | 194.51 ms | 262.46 ms |
apply build | Aff | 100000 | 38.94 μs | 60.60 μs | 3.37 μs | 129.58 μs |
apply build | Ef | 100000 | 44.52 μs | 71.15 μs | 617.00 ns | 149.68 μs |
apply run | Aff | 100000 | 497.15 ms | 61.48 ms | 438.15 ms | 560.08 ms |
apply run | Ef | 100000 | 434.29 ms | 47.56 ms | 392.31 ms | 495.25 ms |
apply build | Aff | 1000000 | 107.85 μs | 191.44 μs | 1.24 μs | 394.36 μs |
apply build | Ef | 1000000 | 67.12 μs | 117.97 μs | 689.00 ns | 243.41 μs |
apply run | Aff | 1000000 | 5.97 s | 442.12 ms | 5.52 s | 6.41 s |
apply run | Ef | 1000000 | 5.23 s | 433.15 ms | 4.64 s | 5.64 s |
So in some cases, it's worse off, but you are allocating an extra meta object. The reason why I suggested adding properties to the function itself is to avoid the allocation of the meta object. |
2. store
|
bench | type | n | mean | stddev | min | max |
---|---|---|---|---|---|---|
>>=R build | Eff | 100 | 1.56 μs | 15.28 μs | 231.00 ns | 330.73 μs |
>>=R build | Aff | 100 | 804.35 ns | 7.47 μs | 275.00 ns | 155.00 μs |
>>=R build | Ef | 100 | 844.88 ns | 9.19 μs | 279.00 ns | 233.30 μs |
>>=R run | Eff | 100 | 79.80 μs | 78.14 μs | 52.77 μs | 1.02 ms |
>>=R run | Aff | 100 | 115.69 μs | 349.13 μs | 60.63 μs | 3.84 ms |
>>=R run | Ef | 100 | 68.76 μs | 65.05 μs | 55.41 μs | 801.61 μs |
>>=R build | Eff | 500 | 429.48 ns | 2.42 μs | 239.00 ns | 62.72 μs |
>>=R build | Aff | 500 | 453.56 ns | 2.48 μs | 282.00 ns | 58.27 μs |
>>=R build | Ef | 500 | 513.77 ns | 2.85 μs | 282.00 ns | 60.86 μs |
>>=R run | Eff | 500 | 387.53 μs | 308.36 μs | 274.28 μs | 2.49 ms |
>>=R run | Aff | 500 | 344.03 μs | 210.55 μs | 287.03 μs | 1.82 ms |
>>=R run | Ef | 500 | 296.10 μs | 186.94 μs | 245.79 μs | 1.53 ms |
>>=R build | Eff | 1000 | 446.37 ns | 2.70 μs | 239.00 ns | 67.54 μs |
>>=R build | Aff | 1000 | 477.74 ns | 2.38 μs | 280.00 ns | 57.73 μs |
>>=R build | Ef | 1000 | 521.51 ns | 3.23 μs | 281.00 ns | 61.50 μs |
>>=R run | Eff | 1000 | 771.10 μs | 438.47 μs | 553.35 μs | 3.79 ms |
>>=R run | Aff | 1000 | 693.87 μs | 285.45 μs | 580.55 μs | 3.16 ms |
>>=R run | Ef | 1000 | 526.83 μs | 356.63 μs | 397.50 μs | 2.16 ms |
>>=R build | Eff | 2000 | 402.33 ns | 2.28 μs | 236.00 ns | 56.57 μs |
>>=R build | Aff | 2000 | 531.05 ns | 2.46 μs | 280.00 ns | 51.87 μs |
>>=R build | Ef | 2000 | 535.98 ns | 3.40 μs | 282.00 ns | 63.77 μs |
>>=R run | Eff | 2000 | 1.63 ms | 703.93 μs | 1.11 ms | 6.49 ms |
>>=R run | Aff | 2000 | 1.50 ms | 667.88 μs | 1.14 ms | 4.18 ms |
>>=R run | Ef | 2000 | 998.89 μs | 594.59 μs | 704.75 μs | 3.24 ms |
>>=R build | Eff | 4000 | 420.46 ns | 2.34 μs | 237.00 ns | 53.21 μs |
>>=R build | Aff | 4000 | 456.66 ns | 2.11 μs | 281.00 ns | 46.66 μs |
>>=R build | Ef | 4000 | 534.09 ns | 3.04 μs | 283.00 ns | 63.99 μs |
>>=R run | Eff | 4000 | 3.32 ms | 801.06 μs | 2.37 ms | 12.29 ms |
>>=R run | Aff | 4000 | 3.17 ms | 1.16 ms | 2.33 ms | 8.35 ms |
>>=R run | Ef | 4000 | 1.89 ms | 820.67 μs | 1.33 ms | 4.17 ms |
>>=R build | Eff | 8000 | 423.48 ns | 2.66 μs | 237.00 ns | 67.36 μs |
>>=R build | Aff | 8000 | 459.44 ns | 2.26 μs | 280.00 ns | 55.02 μs |
>>=R build | Ef | 8000 | 548.23 ns | 3.78 μs | 283.00 ns | 83.15 μs |
>>=R run | Eff | 8000 | 7.89 ms | 1.72 ms | 6.96 ms | 38.57 ms |
>>=R run | Aff | 8000 | 7.27 ms | 2.24 ms | 4.70 ms | 19.45 ms |
>>=R run | Ef | 8000 | 3.94 ms | 944.80 μs | 2.92 ms | 6.40 ms |
>>=R build | Eff | 10000 | 428.80 ns | 2.45 μs | 240.00 ns | 59.21 μs |
>>=R build | Aff | 10000 | 443.61 ns | 2.43 μs | 280.00 ns | 65.63 μs |
>>=R build | Ef | 10000 | 669.84 ns | 5.22 μs | 268.00 ns | 122.86 μs |
>>=R run | Eff | 10000 | 64.64 ms | 15.12 ms | 18.11 ms | 105.76 ms |
>>=R run | Aff | 10000 | 12.01 ms | 1.21 ms | 6.54 ms | 27.84 ms |
>>=R run | Ef | 10000 | 5.44 ms | 1.68 ms | 3.59 ms | 8.89 ms |
>>=L build | Eff | 100 | 762.68 ns | 8.91 μs | 243.00 ns | 221.87 μs |
>>=L build | Aff | 100 | 426.06 ns | 2.00 μs | 280.00 ns | 44.38 μs |
>>=L build | Ef | 100 | 473.54 ns | 2.47 μs | 286.00 ns | 60.47 μs |
>>=L run | Eff | 100 | 82.15 μs | 153.77 μs | 53.50 μs | 2.58 ms |
>>=L run | Aff | 100 | 83.57 μs | 94.82 μs | 66.51 μs | 1.18 ms |
>>=L run | Ef | 100 | 69.68 μs | 103.69 μs | 53.90 μs | 1.57 ms |
>>=L build | Eff | 500 | 407.37 ns | 2.40 μs | 243.00 ns | 63.91 μs |
>>=L build | Aff | 500 | 437.43 ns | 2.09 μs | 285.00 ns | 46.83 μs |
>>=L build | Ef | 500 | 501.64 ns | 2.94 μs | 288.00 ns | 67.99 μs |
>>=L run | Eff | 500 | 430.74 μs | 426.52 μs | 276.61 μs | 3.23 ms |
>>=L run | Aff | 500 | 382.30 μs | 199.80 μs | 324.92 μs | 1.57 ms |
>>=L run | Ef | 500 | 301.45 μs | 214.48 μs | 238.89 μs | 1.88 ms |
>>=L build | Eff | 1000 | 455.65 ns | 2.76 μs | 245.00 ns | 63.94 μs |
>>=L build | Aff | 1000 | 427.56 ns | 2.20 μs | 281.00 ns | 57.41 μs |
>>=L build | Ef | 1000 | 521.37 ns | 3.22 μs | 286.00 ns | 83.16 μs |
>>=L run | Eff | 1000 | 888.88 μs | 617.73 μs | 570.93 μs | 5.32 ms |
>>=L run | Aff | 1000 | 768.97 μs | 291.08 μs | 647.39 μs | 2.82 ms |
>>=L run | Ef | 1000 | 496.86 μs | 282.55 μs | 389.00 μs | 1.97 ms |
>>=L build | Eff | 2000 | 411.58 ns | 2.30 μs | 244.00 ns | 52.92 μs |
>>=L build | Aff | 2000 | 425.66 ns | 1.87 μs | 282.00 ns | 44.74 μs |
>>=L build | Ef | 2000 | 490.73 ns | 2.72 μs | 288.00 ns | 60.70 μs |
>>=L run | Eff | 2000 | 1.88 ms | 848.57 μs | 1.27 ms | 7.59 ms |
>>=L run | Aff | 2000 | 1.54 ms | 378.53 μs | 1.31 ms | 2.89 ms |
>>=L run | Ef | 2000 | 1.02 ms | 611.88 μs | 717.28 μs | 3.18 ms |
>>=L build | Eff | 4000 | 389.58 ns | 2.00 μs | 244.00 ns | 60.37 μs |
>>=L build | Aff | 4000 | 425.28 ns | 2.10 μs | 283.00 ns | 63.38 μs |
>>=L build | Ef | 4000 | 470.53 ns | 2.71 μs | 291.00 ns | 81.62 μs |
>>=L run | Eff | 4000 | 3.97 ms | 1.33 ms | 2.71 ms | 18.20 ms |
>>=L run | Aff | 4000 | 3.78 ms | 1.31 ms | 2.68 ms | 7.55 ms |
>>=L run | Ef | 4000 | 2.07 ms | 844.54 μs | 1.44 ms | 4.78 ms |
>>=L build | Eff | 8000 | 351.05 ns | 1.60 μs | 245.00 ns | 50.67 μs |
>>=L build | Aff | 8000 | 396.03 ns | 1.91 μs | 285.00 ns | 59.90 μs |
>>=L build | Ef | 8000 | 424.15 ns | 2.14 μs | 295.00 ns | 66.03 μs |
>>=L run | Eff | 8000 | 14.18 ms | 2.62 ms | 7.32 ms | 51.36 ms |
>>=L run | Aff | 8000 | 7.78 ms | 2.04 ms | 5.77 ms | 13.86 ms |
>>=L run | Ef | 8000 | 4.26 ms | 951.65 μs | 3.14 ms | 7.86 ms |
map build | Eff | 100 | 811.38 ns | 8.59 μs | 314.00 ns | 189.12 μs |
map build | Aff | 100 | 388.66 ns | 1.46 μs | 284.00 ns | 46.29 μs |
map build | Ef | 100 | 417.27 ns | 1.92 μs | 294.00 ns | 59.88 μs |
map run | Eff | 100 | 65.52 μs | 169.18 μs | 41.48 μs | 3.54 ms |
map run | Aff | 100 | 34.76 μs | 37.12 μs | 29.39 μs | 1.11 ms |
map run | Ef | 100 | 30.70 μs | 12.90 μs | 26.91 μs | 289.64 μs |
map build | Eff | 500 | 406.55 ns | 2.33 μs | 269.00 ns | 73.86 μs |
map build | Aff | 500 | 632.89 ns | 4.70 μs | 317.00 ns | 125.04 μs |
map build | Ef | 500 | 480.03 ns | 3.67 μs | 299.00 ns | 115.07 μs |
map run | Eff | 500 | 308.57 μs | 325.95 μs | 202.75 μs | 2.79 ms |
map run | Aff | 500 | 159.48 μs | 65.32 μs | 138.09 μs | 1.70 ms |
map run | Ef | 500 | 143.59 μs | 38.31 μs | 123.87 μs | 1.02 ms |
map build | Eff | 1000 | 374.13 ns | 2.34 μs | 246.00 ns | 74.22 μs |
map build | Aff | 1000 | 591.15 ns | 3.75 μs | 292.00 ns | 84.37 μs |
map build | Ef | 1000 | 418.45 ns | 2.09 μs | 293.00 ns | 65.14 μs |
map run | Eff | 1000 | 606.13 μs | 485.10 μs | 404.96 μs | 3.37 ms |
map run | Aff | 1000 | 301.25 μs | 78.10 μs | 271.71 μs | 1.97 ms |
map run | Ef | 1000 | 266.60 μs | 45.69 μs | 246.73 μs | 1.23 ms |
map build | Eff | 2000 | 400.07 ns | 2.26 μs | 250.00 ns | 69.92 μs |
map build | Aff | 2000 | 595.01 ns | 4.38 μs | 286.00 ns | 108.34 μs |
map build | Ef | 2000 | 456.99 ns | 3.12 μs | 294.00 ns | 98.00 μs |
map run | Eff | 2000 | 1.26 ms | 728.33 μs | 818.29 μs | 5.47 ms |
map run | Aff | 2000 | 715.17 μs | 140.31 μs | 637.98 μs | 2.88 ms |
map run | Ef | 2000 | 444.46 μs | 99.49 μs | 359.40 μs | 1.52 ms |
map build | Eff | 4000 | 379.40 ns | 2.41 μs | 246.00 ns | 76.38 μs |
map build | Aff | 4000 | 561.97 ns | 2.82 μs | 356.00 ns | 84.31 μs |
map build | Ef | 4000 | 506.10 ns | 2.73 μs | 296.00 ns | 79.10 μs |
map run | Eff | 4000 | 2.70 ms | 1.15 ms | 1.76 ms | 8.80 ms |
map run | Aff | 4000 | 1.73 ms | 396.25 μs | 1.54 ms | 6.99 ms |
map run | Ef | 4000 | 772.77 μs | 188.27 μs | 677.22 μs | 2.44 ms |
map build | Eff | 5000 | 347.42 ns | 1.83 μs | 250.00 ns | 58.20 μs |
map build | Aff | 5000 | 618.04 ns | 2.85 μs | 369.00 ns | 87.33 μs |
map build | Ef | 5000 | 465.33 ns | 3.01 μs | 295.00 ns | 94.03 μs |
map run | Eff | 5000 | 5.00 ms | 2.58 ms | 2.31 ms | 19.12 ms |
map run | Aff | 5000 | 2.12 ms | 283.83 μs | 1.92 ms | 5.29 ms |
map run | Ef | 5000 | 1.02 ms | 247.71 μs | 862.65 μs | 3.08 ms |
apply build | Eff | 100 | 723.69 ns | 7.80 μs | 244.00 ns | 184.79 μs |
apply build | Aff | 100 | 521.72 ns | 2.61 μs | 356.00 ns | 82.21 μs |
apply build | Ef | 100 | 418.62 ns | 1.97 μs | 294.00 ns | 61.65 μs |
apply run | Eff | 100 | 171.71 μs | 230.24 μs | 114.77 μs | 2.29 ms |
apply run | Aff | 100 | 211.13 μs | 145.15 μs | 173.34 μs | 2.86 ms |
apply run | Ef | 100 | 118.80 μs | 82.30 μs | 95.33 μs | 1.03 ms |
apply build | Eff | 500 | 384.12 ns | 2.86 μs | 250.00 ns | 90.72 μs |
apply build | Aff | 500 | 580.11 ns | 3.87 μs | 369.00 ns | 122.00 μs |
apply build | Ef | 500 | 487.41 ns | 3.85 μs | 293.00 ns | 121.05 μs |
apply run | Eff | 500 | 1.14 ms | 838.02 μs | 609.47 μs | 6.60 ms |
apply run | Aff | 500 | 1.22 ms | 483.01 μs | 892.31 μs | 4.60 ms |
apply run | Ef | 500 | 431.78 μs | 218.46 μs | 318.22 μs | 2.39 ms |
apply build | Eff | 1000 | 373.86 ns | 2.46 μs | 246.00 ns | 77.60 μs |
apply build | Aff | 1000 | 551.04 ns | 2.85 μs | 366.00 ns | 89.89 μs |
apply build | Ef | 1000 | 527.46 ns | 3.66 μs | 304.00 ns | 113.54 μs |
apply run | Eff | 1000 | 2.14 ms | 1.07 ms | 1.25 ms | 6.54 ms |
apply run | Aff | 1000 | 2.19 ms | 643.58 μs | 1.74 ms | 5.09 ms |
apply run | Ef | 1000 | 734.70 μs | 307.66 μs | 554.76 μs | 3.38 ms |
apply build | Eff | 2000 | 378.94 ns | 2.55 μs | 249.00 ns | 80.17 μs |
apply build | Aff | 2000 | 549.62 ns | 3.64 μs | 354.00 ns | 114.86 μs |
apply build | Ef | 2000 | 459.91 ns | 3.49 μs | 294.00 ns | 109.33 μs |
apply run | Eff | 2000 | 5.48 ms | 2.06 ms | 2.98 ms | 14.43 ms |
apply run | Aff | 2000 | 4.80 ms | 1.16 ms | 3.57 ms | 9.39 ms |
apply run | Ef | 2000 | 1.51 ms | 570.43 μs | 1.10 ms | 5.05 ms |
apply build | Eff | 4000 | 341.78 ns | 1.53 μs | 245.00 ns | 47.56 μs |
apply build | Aff | 4000 | 537.14 ns | 3.24 μs | 356.00 ns | 102.04 μs |
apply build | Ef | 4000 | 446.32 ns | 2.40 μs | 294.00 ns | 74.13 μs |
apply run | Eff | 4000 | 28.57 ms | 6.45 ms | 15.18 ms | 68.81 ms |
apply run | Aff | 4000 | 10.27 ms | 2.03 ms | 7.15 ms | 16.72 ms |
apply run | Ef | 4000 | 3.05 ms | 791.76 μs | 2.25 ms | 7.27 ms |
apply build | Eff | 5000 | 565.76 ns | 3.19 μs | 247.00 ns | 96.82 μs |
apply build | Aff | 5000 | 571.16 ns | 3.89 μs | 367.00 ns | 122.49 μs |
apply build | Ef | 5000 | 490.75 ns | 3.90 μs | 292.00 ns | 122.65 μs |
apply run | Eff | 5000 | 75.52 ms | 24.65 ms | 36.48 ms | 200.52 ms |
apply run | Aff | 5000 | 13.04 ms | 1.12 ms | 12.04 ms | 19.40 ms |
apply run | Ef | 5000 | 3.92 ms | 794.87 μs | 3.04 ms | 7.80 ms |
extended
bench | type | n | mean | stddev | min | max |
---|---|---|---|---|---|---|
>>=R build | Aff | 20000 | 58.54 μs | 101.60 μs | 3.42 μs | 210.77 μs |
>>=R build | Ef | 20000 | 42.49 μs | 71.77 μs | 648.00 ns | 149.42 μs |
>>=R run | Aff | 20000 | 54.26 ms | 9.77 ms | 46.26 ms | 66.60 ms |
>>=R run | Ef | 20000 | 24.71 ms | 9.76 ms | 15.62 ms | 34.52 ms |
>>=R build | Aff | 50000 | 14.31 μs | 27.20 μs | 563.00 ns | 55.11 μs |
>>=R build | Ef | 50000 | 20.52 μs | 32.27 μs | 542.00 ns | 68.18 μs |
>>=R run | Aff | 50000 | 119.38 ms | 22.72 ms | 94.43 ms | 147.93 ms |
>>=R run | Ef | 50000 | 95.20 ms | 19.55 ms | 77.47 ms | 120.74 ms |
>>=R build | Aff | 100000 | 15.84 μs | 30.26 μs | 506.00 ns | 61.23 μs |
>>=R build | Ef | 100000 | 26.09 μs | 40.38 μs | 955.00 ns | 86.09 μs |
>>=R run | Aff | 100000 | 207.89 ms | 44.52 ms | 182.30 ms | 274.56 ms |
>>=R run | Ef | 100000 | 169.70 ms | 16.15 ms | 149.40 ms | 185.54 ms |
>>=R build | Aff | 1000000 | 18.58 μs | 35.87 μs | 505.00 ns | 72.39 μs |
>>=R build | Ef | 1000000 | 24.89 μs | 38.34 μs | 620.00 ns | 81.27 μs |
>>=R run | Aff | 1000000 | 2.64 s | 408.88 ms | 2.24 s | 3.19 s |
>>=R run | Ef | 1000000 | 2.01 s | 47.67 ms | 1.95 s | 2.06 s |
>>=L build | Aff | 20000 | 43.62 μs | 78.62 μs | 560.00 ns | 161.29 μs |
>>=L build | Ef | 20000 | 34.85 μs | 55.36 μs | 516.00 ns | 116.63 μs |
>>=L run | Aff | 20000 | 55.00 ms | 7.67 ms | 45.90 ms | 64.43 ms |
>>=L run | Ef | 20000 | 36.97 ms | 14.11 ms | 17.88 ms | 49.43 ms |
>>=L build | Aff | 50000 | 14.06 μs | 26.83 μs | 547.00 ns | 54.30 μs |
>>=L build | Ef | 50000 | 28.13 μs | 37.51 μs | 814.00 ns | 83.41 μs |
>>=L run | Aff | 50000 | 140.71 ms | 33.94 ms | 112.37 ms | 186.78 ms |
>>=L run | Ef | 50000 | 98.82 ms | 26.63 ms | 77.65 ms | 137.68 ms |
>>=L build | Aff | 100000 | 17.62 μs | 32.71 μs | 1.03 μs | 66.69 μs |
>>=L build | Ef | 100000 | 20.40 μs | 31.39 μs | 519.00 ns | 66.60 μs |
>>=L run | Aff | 100000 | 259.10 ms | 57.47 ms | 226.01 ms | 345.05 ms |
>>=L run | Ef | 100000 | 194.13 ms | 46.25 ms | 162.57 ms | 262.90 ms |
>>=L build | Aff | 1000000 | 12.11 μs | 22.95 μs | 514.00 ns | 46.53 μs |
>>=L build | Ef | 1000000 | 25.70 μs | 41.27 μs | 554.00 ns | 86.82 μs |
>>=L run | Aff | 1000000 | 2.74 s | 167.06 ms | 2.59 s | 2.98 s |
>>=L run | Ef | 1000000 | 2.26 s | 54.35 ms | 2.20 s | 2.31 s |
map build | Aff | 10000 | 37.48 μs | 67.87 μs | 1.68 μs | 139.25 μs |
map build | Ef | 10000 | 40.36 μs | 66.80 μs | 591.00 ns | 139.63 μs |
map run | Aff | 10000 | 12.17 ms | 6.61 ms | 6.40 ms | 21.65 ms |
map run | Ef | 10000 | 2.55 ms | 1.18 ms | 1.65 ms | 4.17 ms |
map build | Aff | 20000 | 24.15 μs | 39.53 μs | 758.00 ns | 83.19 μs |
map build | Ef | 20000 | 19.43 μs | 30.59 μs | 560.00 ns | 64.65 μs |
map run | Aff | 20000 | 23.14 ms | 11.62 ms | 10.26 ms | 38.15 ms |
map run | Ef | 20000 | 5.05 ms | 1.70 ms | 3.18 ms | 6.56 ms |
map build | Aff | 50000 | 28.70 μs | 49.63 μs | 611.00 ns | 102.82 μs |
map build | Ef | 50000 | 43.64 μs | 75.95 μs | 532.00 ns | 157.06 μs |
map run | Aff | 50000 | 64.76 ms | 35.34 ms | 40.80 ms | 117.17 ms |
map run | Ef | 50000 | 21.46 ms | 7.10 ms | 14.11 ms | 30.92 ms |
map build | Aff | 100000 | 23.60 μs | 37.89 μs | 703.00 ns | 79.76 μs |
map build | Ef | 100000 | 20.55 μs | 31.35 μs | 604.00 ns | 66.64 μs |
map run | Aff | 100000 | 139.06 ms | 67.94 ms | 94.38 ms | 239.31 ms |
map run | Ef | 100000 | 56.95 ms | 11.70 ms | 44.71 ms | 69.94 ms |
map build | Aff | 1000000 | 43.82 μs | 72.40 μs | 1.10 μs | 151.51 μs |
map build | Ef | 1000000 | 99.95 μs | 182.43 μs | 578.00 ns | 373.21 μs |
map run | Aff | 1000000 | 1.40 s | 826.01 ms | 869.20 ms | 2.61 s |
map run | Ef | 1000000 | 681.45 ms | 67.42 ms | 614.27 ms | 768.07 ms |
apply build | Aff | 10000 | 55.90 μs | 98.57 μs | 724.00 ns | 203.21 μs |
apply build | Ef | 10000 | 27.77 μs | 45.44 μs | 609.00 ns | 95.25 μs |
apply run | Aff | 10000 | 45.76 ms | 13.47 ms | 33.63 ms | 63.49 ms |
apply run | Ef | 10000 | 8.08 ms | 1.30 ms | 7.26 ms | 9.99 ms |
apply build | Aff | 20000 | 25.53 μs | 44.07 μs | 541.00 ns | 91.34 μs |
apply build | Ef | 20000 | 26.08 μs | 43.35 μs | 407.00 ns | 90.53 μs |
apply run | Aff | 20000 | 107.59 ms | 23.25 ms | 86.21 ms | 140.48 ms |
apply run | Ef | 20000 | 34.28 ms | 4.33 ms | 29.25 ms | 38.88 ms |
apply build | Aff | 50000 | 76.23 μs | 141.23 μs | 531.00 ns | 287.81 μs |
apply build | Ef | 50000 | 33.94 μs | 59.22 μs | 445.00 ns | 122.40 μs |
apply run | Aff | 50000 | 252.15 ms | 58.81 ms | 207.85 ms | 336.16 ms |
apply run | Ef | 50000 | 98.93 ms | 17.99 ms | 83.20 ms | 118.65 ms |
apply build | Aff | 100000 | 31.95 μs | 52.73 μs | 855.00 ns | 110.38 μs |
apply build | Ef | 100000 | 25.37 μs | 41.29 μs | 400.00 ns | 86.60 μs |
apply run | Aff | 100000 | 494.45 ms | 58.20 ms | 424.30 ms | 544.51 ms |
apply run | Ef | 100000 | 220.36 ms | 51.25 ms | 177.40 ms | 284.08 ms |
apply build | Aff | 1000000 | 69.65 μs | 122.89 μs | 839.00 ns | 253.57 μs |
apply build | Ef | 1000000 | 33.79 μs | 52.03 μs | 822.00 ns | 110.38 μs |
apply run | Aff | 1000000 | 5.84 s | 427.10 ms | 5.28 s | 6.23 s |
apply run | Ef | 1000000 | 2.10 s | 16.31 ms | 2.08 s | 2.12 s |
@natefaubion yah did that in 2. aproach. which is better for sure. Ef is still faster then Eff and Aff in run. in terms of build time it's a bit slow but build time is nothing compared to running it. @paf31 what you think on this? This version will make FFI still trivial, and making this changes on Eff will be non braking. I guess the optimizations done on |
@safareli I think you should try to work it into |
here you go 🎉 purescript-deprecated/purescript-eff#31 |
TODO