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.
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.
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 aout.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