effekt
effekt copied to clipboard
Feature: tracing/timing of compilation phases
This PR closes #403 by adding timing capabilities to the context.
- I am not really happy with the way the measurements are serialised (
timesToString
,timesToJSON
). It feels a bit inelegant to do raw string manipulation. - No timing information is captured in server mode to avoid "memory leaks", i.e., since the map in which the timing information is saved is append only, multiple runs of the server would claim continuously more memory. Also, timing information across multiple runs without clearing the information of the previous is worthless.
-
Every phase needs to manually add the
Context.timed
function if it is to be measured. This is an implicit invariant that needs to be upheld by the programmer. This comes with the benefit of increased flexibility. For example, innamer
we can ignore subsequent runs of the frontend for dependencies. Furthermore,Context.timed
can not only be used for timing phases, but also "subphases", for example, only one function in thetyper
. - The JSON output is saved the given (or default) output directory and has the same name as the input source file with
.json
append to it.
Showcase
Plain text output
$ effekt -t text examples/casestudies/prettyprinter.effekt.md
...
[info] 1. parser:
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 173.77 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 50.64 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 3.64 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 599.75 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 38.35 ms
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 192.39 ms
examples/benchmarks/nqueens.effekt: 211.32 ms
Total: 1269.85 ms
Percentage: 61.82 %
2. namer:
examples/benchmarks/nqueens.effekt: 4.30 ms
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 4.13 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 0.20 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 2.90 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 17.63 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 4.11 ms
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 36.09 ms
Total: 69.35 ms
Percentage: 3.38 %
3. box-unbox:
examples/benchmarks/nqueens.effekt: 0.80 ms
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 1.31 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 0.04 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 6.13 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 3.51 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 1.12 ms
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 3.19 ms
Total: 16.11 ms
Percentage: 0.78 %
4. typer:
examples/benchmarks/nqueens.effekt: 6.98 ms
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 3.87 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 0.25 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 9.85 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 272.56 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 13.22 ms
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 73.58 ms
Total: 380.33 ms
Percentage: 18.52 %
5. wellformedness:
examples/benchmarks/nqueens.effekt: 0.92 ms
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.36 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 0.05 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 0.50 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 3.24 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 2.81 ms
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 8.08 ms
Total: 15.97 ms
Percentage: 0.78 %
6. explicit-capabilities:
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 3.09 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 0.64 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 3.20 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 1.07 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 0.08 ms
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.63 ms
examples/benchmarks/nqueens.effekt: 4.24 ms
Total: 12.95 ms
Percentage: 0.63 %
7. annotate-captures:
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 2.31 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 0.34 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 3.02 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 1.25 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 0.07 ms
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.50 ms
examples/benchmarks/nqueens.effekt: 111.72 ms
Total: 119.20 ms
Percentage: 5.80 %
8. transformer:
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 3.10 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 5.82 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 19.29 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 2.93 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 0.09 ms
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 1.64 ms
examples/benchmarks/nqueens.effekt: 23.25 ms
Total: 56.13 ms
Percentage: 2.73 %
9. direct style mutable state:
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 0.46 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 0.28 ms
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 7.83 ms
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 0.86 ms
/Users/david/Develop/effekt/effekt/libraries/js/io/args.effekt: 0.04 ms
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.17 ms
examples/benchmarks/nqueens.effekt: 4.19 ms
Total: 13.82 ms
Percentage: 0.67 %
10. core-optimizer:
examples/benchmarks/nqueens.effekt: 4.15 ms
Total: 4.15 ms
Percentage: 0.20 %
11. stacksafe:
examples/benchmarks/nqueens.effekt: 1.63 ms
Total: 1.63 ms
Percentage: 0.08 %
12. core-lambdalifting:
examples/benchmarks/nqueens.effekt: 94.55 ms
Total: 94.55 ms
Percentage: 4.60 %
2054.03 ms
JSON output
$ effekt -t json examples/casestudies/prettyprinter.effekt.md
$ cat out/prettyprinter.effekt.md.json
{
"parser": {
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 7.970790999999999,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 36.601625,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 34.576875,
"./examples/casestudies/lexer.effekt.md": 79.106375,
"./examples/casestudies/parser.effekt.md": 103.629125,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 601.6922079999999,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 46.664541,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 190.03466699999998,
"examples/casestudies/prettyprinter.effekt.md": 436.063042,
},
"namer": {
"examples/casestudies/prettyprinter.effekt.md": 5.067082999999999,
"./examples/casestudies/parser.effekt.md": 4.919125,
"./examples/casestudies/lexer.effekt.md": 7.566624999999999,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 3.027333,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 1.13675,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 2.7069579999999998,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 18.390957999999998,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 4.48875,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 34.233540999999995,
},
"box-unbox": {
"examples/casestudies/prettyprinter.effekt.md": 3.1925,
"./examples/casestudies/parser.effekt.md": 0.9613339999999999,
"./examples/casestudies/lexer.effekt.md": 0.888791,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.09766599999999999,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.227125,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.622459,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 7.826124999999999,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 0.935125,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 3.393833,
},
"typer": {
"examples/casestudies/prettyprinter.effekt.md": 68.665667,
"./examples/casestudies/parser.effekt.md": 52.690915999999994,
"./examples/casestudies/lexer.effekt.md": 137.186792,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 1.026958,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 2.660166,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 10.263874999999999,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 159.53295799999998,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 13.217417,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 72.84075,
},
"wellformedness": {
"examples/casestudies/prettyprinter.effekt.md": 1.772459,
"./examples/casestudies/parser.effekt.md": 1.618334,
"./examples/casestudies/lexer.effekt.md": 0.938333,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.175709,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.354916,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.507084,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 3.039625,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 2.7631669999999997,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 8.616875,
},
"explicit-capabilities": {
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 0.6916249999999999,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 0.329458,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 1.891541,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.7284999999999999,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.623333,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.25504099999999996,
"./examples/casestudies/lexer.effekt.md": 11.769833,
"./examples/casestudies/parser.effekt.md": 2.82875,
"examples/casestudies/prettyprinter.effekt.md": 8.84325,
},
"annotate-captures": {
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 1.814416,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 1.593125,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 1.531667,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.574458,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.275458,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.155417,
"./examples/casestudies/lexer.effekt.md": 1.564667,
"./examples/casestudies/parser.effekt.md": 2.0008749999999997,
"examples/casestudies/prettyprinter.effekt.md": 7.052083,
},
"transformer": {
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 2.247333,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 0.954417,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 47.414167,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 1.473917,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.930125,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 3.2304169999999996,
"./examples/casestudies/lexer.effekt.md": 3.029083,
"./examples/casestudies/parser.effekt.md": 21.610416999999998,
"examples/casestudies/prettyprinter.effekt.md": 50.337333,
},
"direct style mutable state": {
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 0.402833,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 0.21095799999999998,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 2.132792,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.39299999999999996,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.117958,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.09716699999999999,
"./examples/casestudies/lexer.effekt.md": 0.994417,
"./examples/casestudies/parser.effekt.md": 1.4269589999999999,
"examples/casestudies/prettyprinter.effekt.md": 17.259999999999998,
},
"core-optimizer": {
"examples/casestudies/prettyprinter.effekt.md": 13.316374999999999,
},
"stacksafe": {
"examples/casestudies/prettyprinter.effekt.md": 8.87175,
},
"core-lambdalifting": {
"examples/casestudies/prettyprinter.effekt.md": 47.739999999999995,
},
}
I wonder whether it would be good to have a separate "total" timer. I am a bit afraid that we will miss adding a timer somewhere and then the total time will not be accurate. What do you think?
Yes, that is a very good idea. I'll add it.
This error is confusing. I had it for some time, too, but then it somehow disappeared. Is this maybe a bug in the compiler because in my eyes, trace
obviously is a member of EffektConfig
, is it not?
Quick question, any idea on what's the overhead of the timers?
It would be nice to verify that there's no unexpected performance loss -- for example, by running the benchmarks both on master
and on this branch (with and without timers), just to make sure :)
Benchmarks
I did some benchmarks on using example/benchmarks
as requested by @jiribenes. The results do not show any significant regression in my opinion.
Methods
for file in examples/benchmarks/*.effekt; do
hyperfine --export-markdown $file.md "./bin-master/effekt.sh $file" "./bin-time/effekt.sh $file" "./bin-time/effekt.sh -t text $file"
done
Each file was run ten times. ~~Both used the executable compiled using this PR branch.~~
Results
Command | Mean [s] | Min [s] | Max [s] | Relative |
---|---|---|---|---|
./bin-master/effekt.sh examples/benchmarks/generator.effekt |
2.689 ± 0.058 | 2.602 | 2.821 | 1.00 ± 0.04 |
./bin-time/effekt.sh examples/benchmarks/generator.effekt |
2.700 ± 0.046 | 2.610 | 2.756 | 1.01 ± 0.04 |
./bin-time/effekt.sh -t text examples/benchmarks/generator.effekt |
2.683 ± 0.089 | 2.512 | 2.766 | 1.00 |
./bin-master/effekt.sh examples/benchmarks/nqueens.effekt |
2.696 ± 0.072 | 2.530 | 2.770 | 1.00 |
./bin-time/effekt.sh examples/benchmarks/nqueens.effekt |
2.697 ± 0.062 | 2.585 | 2.763 | 1.00 ± 0.04 |
./bin-time/effekt.sh -t text examples/benchmarks/nqueens.effekt |
2.764 ± 0.095 | 2.499 | 2.818 | 1.03 ± 0.04 |
./bin-master/effekt.sh examples/benchmarks/simple_counter.effekt |
2.892 ± 0.073 | 2.806 | 2.990 | 1.02 ± 0.04 |
./bin-time/effekt.sh examples/benchmarks/simple_counter.effekt |
2.847 ± 0.067 | 2.738 | 2.942 | 1.00 |
./bin-time/effekt.sh -t text examples/benchmarks/simple_counter.effekt |
2.853 ± 0.075 | 2.706 | 2.965 | 1.00 ± 0.04 |
./bin-master/effekt.sh examples/benchmarks/tree.effekt |
2.765 ± 0.149 | 2.415 | 2.898 | 1.01 ± 0.07 |
./bin-time/effekt.sh examples/benchmarks/tree.effekt |
2.725 ± 0.125 | 2.487 | 2.843 | 1.00 |
./bin-time/effekt.sh -t text examples/benchmarks/tree.effekt |
2.818 ± 0.143 | 2.534 | 2.994 | 1.03 ± 0.07 |
./bin-master/effekt.sh examples/benchmarks/triples.effekt |
2.758 ± 0.062 | 2.671 | 2.854 | 1.00 |
./bin-time/effekt.sh examples/benchmarks/triples.effekt |
2.764 ± 0.053 | 2.679 | 2.828 | 1.00 ± 0.03 |
./bin-time/effekt.sh -t text examples/benchmarks/triples.effekt |
2.801 ± 0.078 | 2.612 | 2.888 | 1.02 ± 0.04 |
Fixed output:
Plain text
1. parser:
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 126.07 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 50.18 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 31.99 ms,
./examples/casestudies/lexer.effekt.md: 83.19 ms,
./examples/casestudies/parser.effekt.md: 100.96 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 509.36 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 42.49 ms,
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 267.10 ms,
examples/casestudies/prettyprinter.effekt.md: 513.76 ms
Total: 1725.11 ms
Percentage: 58.44 %
2. namer:
examples/casestudies/prettyprinter.effekt.md: 5.32 ms,
./examples/casestudies/parser.effekt.md: 114.51 ms,
./examples/casestudies/lexer.effekt.md: 34.89 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 3.20 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 1.04 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 2.63 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 12.41 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 4.10 ms,
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 34.21 ms
Total: 212.29 ms
Percentage: 7.19 %
3. box-unbox:
examples/casestudies/prettyprinter.effekt.md: 1.49 ms,
./examples/casestudies/parser.effekt.md: 0.97 ms,
./examples/casestudies/lexer.effekt.md: 2.59 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 0.10 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.22 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 1.57 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 3.04 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 1.11 ms,
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 3.35 ms
Total: 14.44 ms
Percentage: 0.49 %
4. typer:
examples/casestudies/prettyprinter.effekt.md: 54.43 ms,
./examples/casestudies/parser.effekt.md: 39.01 ms,
./examples/casestudies/lexer.effekt.md: 37.85 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 1.28 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 2.84 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 10.48 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 193.95 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 30.90 ms,
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 70.91 ms
Total: 441.65 ms
Percentage: 14.96 %
5. wellformedness:
examples/casestudies/prettyprinter.effekt.md: 1.98 ms,
./examples/casestudies/parser.effekt.md: 1.34 ms,
./examples/casestudies/lexer.effekt.md: 0.90 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 0.18 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.26 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 0.40 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 3.27 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 3.46 ms,
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 9.48 ms
Total: 21.28 ms
Percentage: 0.72 %
6. explicit-capabilities:
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 0.82 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 4.28 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 2.89 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 1.12 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.35 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 4.58 ms,
./examples/casestudies/lexer.effekt.md: 1.45 ms,
./examples/casestudies/parser.effekt.md: 2.52 ms,
examples/casestudies/prettyprinter.effekt.md: 9.19 ms
Total: 27.19 ms
Percentage: 0.92 %
7. annotate-captures:
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 0.93 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 1.03 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 1.39 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 0.77 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.30 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 0.84 ms,
./examples/casestudies/lexer.effekt.md: 3.55 ms,
./examples/casestudies/parser.effekt.md: 3.33 ms,
examples/casestudies/prettyprinter.effekt.md: 9.64 ms
Total: 21.78 ms
Percentage: 0.74 %
8. transformer:
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 2.91 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 1.80 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 19.33 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 2.13 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.52 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 1.94 ms,
./examples/casestudies/lexer.effekt.md: 3.10 ms,
./examples/casestudies/parser.effekt.md: 3.84 ms,
examples/casestudies/prettyprinter.effekt.md: 38.85 ms
Total: 74.42 ms
Percentage: 2.52 %
9. direct style mutable state:
/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt: 0.47 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt: 0.30 ms,
/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt: 4.45 ms,
/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt: 0.42 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt: 0.18 ms,
/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt: 0.09 ms,
./examples/casestudies/lexer.effekt.md: 1.07 ms,
./examples/casestudies/parser.effekt.md: 1.21 ms,
examples/casestudies/prettyprinter.effekt.md: 8.89 ms
Total: 17.09 ms
Percentage: 0.58 %
10. core-optimizer:
examples/casestudies/prettyprinter.effekt.md: 13.32 ms
Total: 13.32 ms
Percentage: 0.45 %
11. stacksafe:
examples/casestudies/prettyprinter.effekt.md: 4.42 ms
Total: 4.42 ms
Percentage: 0.15 %
12. core-lambdalifting:
examples/casestudies/prettyprinter.effekt.md: 121.31 ms
Total: 121.31 ms
Percentage: 4.11 %
13. total:
examples/casestudies/prettyprinter.effekt.md: 2952.11 ms
Total: 2952.11 ms
Percentage: 100.00 %
JSON
{
"parser": {
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 129.07,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 42.44,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 26.39,
"./examples/casestudies/lexer.effekt.md": 78.98,
"./examples/casestudies/parser.effekt.md": 101.98,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 630.30,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 44.21,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 182.72,
"examples/casestudies/prettyprinter.effekt.md": 448.73
},
"namer": {
"examples/casestudies/prettyprinter.effekt.md": 5.22,
"./examples/casestudies/parser.effekt.md": 4.38,
"./examples/casestudies/lexer.effekt.md": 8.06,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 3.36,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 1.39,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 3.16,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 10.82,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 6.43,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 34.50
},
"box-unbox": {
"examples/casestudies/prettyprinter.effekt.md": 5.66,
"./examples/casestudies/parser.effekt.md": 2.65,
"./examples/casestudies/lexer.effekt.md": 0.90,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.14,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.29,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.67,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 2.37,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 2.18,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 3.25
},
"typer": {
"examples/casestudies/prettyprinter.effekt.md": 55.21,
"./examples/casestudies/parser.effekt.md": 150.92,
"./examples/casestudies/lexer.effekt.md": 44.31,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 1.13,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 3.12,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 11.12,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 378.82,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 12.81,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 80.48
},
"wellformedness": {
"examples/casestudies/prettyprinter.effekt.md": 2.11,
"./examples/casestudies/parser.effekt.md": 12.49,
"./examples/casestudies/lexer.effekt.md": 0.95,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.18,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.36,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.56,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 3.41,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 3.28,
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 8.75
},
"explicit-capabilities": {
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 0.69,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 0.39,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 2.09,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.77,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.46,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.16,
"./examples/casestudies/lexer.effekt.md": 10.92,
"./examples/casestudies/parser.effekt.md": 2.66,
"examples/casestudies/prettyprinter.effekt.md": 9.80
},
"annotate-captures": {
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 1.18,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 0.76,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 2.63,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.95,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.32,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.51,
"./examples/casestudies/lexer.effekt.md": 2.19,
"./examples/casestudies/parser.effekt.md": 2.11,
"examples/casestudies/prettyprinter.effekt.md": 7.15
},
"transformer": {
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 73.43,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 0.98,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 18.21,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 1.16,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.50,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 1.72,
"./examples/casestudies/lexer.effekt.md": 3.09,
"./examples/casestudies/parser.effekt.md": 8.51,
"examples/casestudies/prettyprinter.effekt.md": 45.61
},
"direct style mutable state": {
"/Users/david/Develop/effekt/effekt/libraries/js/effekt.effekt": 0.40,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/option.effekt": 0.21,
"/Users/david/Develop/effekt/effekt/libraries/js/immutable/list.effekt": 2.55,
"/Users/david/Develop/effekt/effekt/libraries/js/mutable/array.effekt": 0.45,
"/Users/david/Develop/effekt/effekt/libraries/js/text/string.effekt": 0.11,
"/Users/david/Develop/effekt/effekt/libraries/js/text/regex.effekt": 0.06,
"./examples/casestudies/lexer.effekt.md": 0.96,
"./examples/casestudies/parser.effekt.md": 1.48,
"examples/casestudies/prettyprinter.effekt.md": 10.78
},
"core-optimizer": {
"examples/casestudies/prettyprinter.effekt.md": 14.31
},
"stacksafe": {
"examples/casestudies/prettyprinter.effekt.md": 8.82
},
"core-lambdalifting": {
"examples/casestudies/prettyprinter.effekt.md": 45.40
},
"total": {
"examples/casestudies/prettyprinter.effekt.md": 3110.90
}
}
Otherwise looks very good to me.