effekt icon indicating copy to clipboard operation
effekt copied to clipboard

Feature: tracing/timing of compilation phases

Open dvdvgt opened this issue 11 months ago • 3 comments

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, in namer 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 the typer.
  • 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,
    },
}

dvdvgt avatar Mar 12 '24 09:03 dvdvgt

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.

dvdvgt avatar Mar 12 '24 09:03 dvdvgt

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?

dvdvgt avatar Mar 12 '24 10:03 dvdvgt

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 :)

jiribenes avatar Mar 12 '24 15:03 jiribenes

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

dvdvgt avatar Mar 14 '24 13:03 dvdvgt

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
    }
}

dvdvgt avatar Mar 14 '24 13:03 dvdvgt

Otherwise looks very good to me.

b-studios avatar Mar 14 '24 16:03 b-studios