Denis Defreyne

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 subclass Novel, then an array of Novels is not an array of Texts. In mathematical terms: A <: B unfortunately does not imply A[] <: B[]. This has gotten in my way many times before.

Initially documented in Week­notes 2025 W05: Best performance.


  1. Ruby, which Crystal is distinctly inspired by, doesn’t have one either. ↩︎

Note last edited February 2025.