Open mneumann opened 2 years ago
The biggest culprit is currently LLVM - I think we need to set up a two-stage build in the https://github.com/savi-lang/llvm-static repo to better optimize the LLVM build.
Most likely I am using a debug
build! Let me try again with gmake ci config=release
!
Or to have a savi check
command, that just does type checking without code generation. Most of the time that'd help.
I'm planning to add a watch
modes where the compiler can make use of its in-memory caching to speed up recompilation of the same program, whenever files change. I suspect this will help with the speed of the basic development workflow.
I'm definitely not opposed to having a mode that only runs compilation checks, though I personally wouldn't use it very often, because in my development workflow, whenever I get the program to compile i always want to run the tests next.
Let me try again with
gmake ci config=release
That won't build the release-mode compiler - you want to run gmake build/savi-release
.
Just for reference, with savi-release
it's 3x faster (10 seconds total instead of 32):
> time savi build --print-perf spec
1 ms : manifests
181 ms : load
0 ms : populate_types
1 ms : namespace
20 ms : reparse
2 ms : populate
14 ms : macros
7 ms : sugar
79 ms : refer_type
6 ms : lambda
35 ms : flow
35 ms : classify
26 ms : type_context
45 ms : refer
22 ms : jumps
12 ms : inventory
25 ms : pre_subtyping
337 ms : local
92 ms : pre_infer
7 ms : completeness
451 ms : infer_edge
619 ms : infer
201 ms : reach
13 ms : verify
148 ms : privacy
11 ms : paint
361 ms : type_check
806 ms : codegen
4922 ms : binary
11.711u 0.346s 0:09.81 122.8% 93895+1492k 0+20io 38pf+0w
And 50% of that time is spent in LLVM.
For an almost empty project, it takes about 32 seconds to compile.