Same same but different: A Comparative Analysis of Static Type Checkers in Erlang
summary
Four static checkers (Dialyzer, Gradualizer, eqWAlizer, Etylizer) run against the union of their per-file test suites and show large disagreement: tools perform best on their own suites, many tests diverge (roughly 25–56% depending on suite), and about 354 cases have exactly one tool disagreeing. Differences come from design choices and limits: Dialyzer (success typing) reports only definite errors, Gradualizer (gradual typing) is noisy, eqWAlizer (local analysis) ignores some numerics, Etylizer (set-theoretic types) leaves features unimplemented. Timeouts and config differences also skew results.
AI-written summary · about
chapters (20)
- 0:00Static type checkers in Erlang
- 1:11Motivation for comparison
- 3:21Simple example discrepancies
- 4:26Type checkers compared
- 5:48Challenges in test data
- 7:32Adapting test suites
- 9:22Overall results
- 10:10Dialyzer results
- 11:38Equalizer results
- 12:44Aizer results
- 13:47Grula results
- 14:30Discrepancies and observations
- 15:33Quantifying discrepancies
- 17:45Key discrepancies and causes
- 19:33Checker design differences
- 21:19Conclusion and future work
- 22:33Q&A on specifications
- 24:59Q&A on type variables
- 25:42Q&A on false positives
- 28:11Q&A on test generation
related talks
49mDialyzer: Optimistic Type Checking for Erlang and Elixir
38mChemanalysis: Dialyzing Elixir
36mTypeCheck Effortless Runtime Type Checking
10mLightning talk: Typechecking Elixir
42mIf I unit test do I really need static typing
40mChoosing The Right Static Code Analyzers Based On Hard Data
47mTesting the Hard Stuff and Staying Sane
40mStatic Analysis in Go
