Glad to hear , I hope it inspired you to give it another look .
It definitely takes a different, non Ruby inspired approach, especially if you never worked any languages that make use of them.
I think there is a lot of merit in them tho. The most impactful benefit of them that I touched on in the interview was that they are shard agnostic. In the end you’re just working with types, methods, and instance variables. You can think of it as just applying metadata to standard Crystal concepts as opposed to each shard/framework implementing their own custom macro DSL specific to each project. That’s not to say you can’t do both.
As I also mentioned, another benefit is that the features I can provide from the framework’s point of view can only improve as macros and annotations mature within the language. There is some exciting stuff on the horizon when https://github.com/crystal-lang/crystal/issues/8148, https://github.com/crystal-lang/crystal/issues/9246 and especially https://github.com/crystal-lang/crystal/issues/8835 are resolved/implemented.
There are definitely places where they can work well, but as with any language feature it’s knowing what your options are, and using the right tool for the job. Annotations excel for just wanting to store data tied to a specific thing that you can later read and use in a macro.
I wrote https://dev.to/blacksmoke16/utilizing-macros-annotations-in-a-web-framework-3abk a while ago, probably could use an update but I imagine the information there is still valid (even the syntax isn’t). I think I’ll write a new article related to some of the patterns I learned in the past year while working on Athena that have been working quite well for me.