Gripes with Crystal
Up: Crystal
-
Whole-program compilation: The entire source code is compiled every single time. This makes compilation consistently slow for large projects. Crystal doesn’t really have a module system that would allow for good incremental compilation,1 and that might just be a fundamental flaw of the language itself.
-
Lack of covariance: Crystal doesn’t really have covariance. For example, if a
Text
class has a subclassNovel
, then an array ofNovel
s is not an array ofText
s. In mathematical terms:A <: B
unfortunately does not implyA[] <: B[]
. This has gotten in my way many times before.
Initially documented in Weeknotes 2025 W05: Best performance.