Crystal blost post Object Oriented October

Crystal blog post 2023/9/30

The Crystal track is hitting its featured month during 12in23 and a bunch of content has been wrapped up for this. In the last 10 months, a lot of changes have happened and this month is no different. The highlights for the update before 12in23 are a brand new analyzer and 4 new concept exercises. And another update is planned to go alongside Crystal 1.10 in mid/late October.

New Analyzer

The first iteration of an analyzer has been implemented, it has 2 key points at the moment, the first is an integration of ameba, which is a static Crystal linter, which will pick up general comments in the code. The 2nd part is a custom-made exercise analyzer, which currently has comments for 4 exercises including Two-Fer, Arys-Amazing-Lasagna, Sieve, and Navigation-Computer. More content in the analyzer is planned and is mentioned in the coming soon section.

New Concepts

An additional 4 concepts were released this month focusing on: Chars, which is a datatype representing a 32-bit Unicode point, Nil, which is a datatype that represents the absence of a value, Ranges, which is a data type that represents an interval between 2 values and finally modules which is a way to create namespaces and mixins in Crystal. Together with this 4 new concepts exercises with new stories were released. With themes all the way from a library system to medieval dinner.

Another 2 concepts are almost ready and I am hoping for them to be released the following week, these concepts include: Case and Union types.

New exercises

I want to thank @kahgoh for creating (for the track) all of the following exercises:

I want to thank @ryanplusplus for creating (for the track) all of the following exercises:


Thanks to @Is1955 for making a pretty large change in the test generator by doing the following:

  • Refactor GeneratorHelp#to_capitalized
  • Remove GeneratorHelp#to_snake
  • Replace GeneratorHelp#to_snake with String#underscore across test_template.ecr

This aimed to help maintainability of the templates we are using by using more in-built methods.


  • had an incorrect link which is now fixed.
  • Some other smaller fixes

What is coming?

October is a big month not only from a content perspective in the 12in23 update launching now and the later update for 1.10. There is a very short period between these 2 updates, even though we are aiming for both of these updates to be rather large.

Also, October is the month for Crystal conference hosted in Berlin which I will be attending and holding a speech about exercism.


With the first implementation of the analyzer and as a proof of concept are more content planned for it. The analyzer has been designed for supporting concept tags so when/if that releases will support it be hassle-free. The most noticeable change is comments for more exercises, but also work has gone into making the solutions being runed through the representer to be able to compare a solution against an exemplar solution.


As mentioned in the analyzer section the representer planned to be integrated in the analyzer. There is no easy way to do this in a nice way at the moment. Either the whole source code needs to be copied or the “semi-cli” representer will have to be incorporated into the analyzer. Therefore I have decided to turn the representer into a library (or shard in crystal-lang), I have decided to do a bit more than just make it a shard. I have decided that the representer should include a fully fleshed API and CLI. This mostly just makes it easier if somebody else would like to use the tooling in their own library. But also includes adding more documentation for current/future maintainers. A sneak peek at the new in-development docs:

Test Runner

I am planning a smaller change for the test runner but nothing but from a user’s perspective the change won’t be noticeable.


As mentioned earlier 2 more concepts are planned to be released in the near future. And I am hoping for around 2 more concepts to be released with the 1.10 update, which likely will be: Arrays and Arrays-methods