Skip to content

Performance

Compiler speed is Fickl's first priority. Each release is benchmarked against the latest Fable, and the charts below are the ones the release workflow drew for the latest release. The gaps should close over time, as Fickl's changes are offered back to Fable.

Benchmarks

Fickl 0.10.0 against Fable 5.27.0: up to 8.5× faster end to end

Wall clock of a fresh process with --noCache, median of 5 interleaved runs on Ubuntu 24.04.5 LTS, measured by the release workflow. Raw timings are in notes/benchmarks/fickl-0.10.0.tsv.

Fickl 0.10.0 against Fable 5.27.0 in watch mode: up to 57.1× faster to respond

Time from saving a file to Watching in one --watch session per compiler. Raw timings are in notes/benchmarks/fickl-0.10.0-watch.tsv.

Where the time goes

Package cache

Type-checked package sources are cached per user, keyed by their contents and the compiler options, so a later compile, in any project, skips checking them again. --noPackageCache turns it off. It is off by default in CI builds; --packageCache turns it on there (see Compiler flags).

Compile server

--server, or FICKL_SERVER=1, compiles through a background server that keeps check results between compilations. Running the compiler again on the same project only rechecks what changed.

dotnet fickl src/App.fsproj -o dist --server

Watch mode

dotnet fickl watch recompiles what a change affects. The second chart above measures the time from saving a file to the compiler reporting Watching.

Timings

--timings prints a per-phase timing and allocation report after each compilation, to see where a slow project spends its time.

Edit this page