I don’t know what this phenomenon is called, but I believe when a repo reaches a certain point in time, there is a disconnect that can happen every once in a while. This disconnect is always between the core developers (working on the internals of the language), and the average user. I’ve seen it happen with Godot’s repository (been there for over half a decade), and starting to slightly see it in Crystal’s repo.
An example in Crystal: (Time.now -> Time.local)? Reason? “Because it makes more sense”
Maybe to the contributor / core developers who implemented the PR, but to me, Time.now is far more explicit and less ambiguous than “local” or “utc”. Time.local? Local to what? We already know it’s a local time because we looked at the API! We want the TIME! (.now). This is equivalent to the English language changing how a word is spelled, after 50 years, just because someone thought it sounded funny.
Similarly, in Godot, 5/2 = int
, and 5/2.0 = float
. Same in the C
language. Same for Ruby
!
Crystal utilizes several C
functions. And after reading this, a developer will inherently assume… this operation would work the same.
In Godot, the author (reduz), created GDScript
to be easy to use, have high readability, dynamically typed, dev friendly syntax, lightweight, etc. Over time, a new “warning system” was added which bombarded the developer with any kind of error. Then, static typing was introduced, which now it’s not even simple GDScript
anymore. Luckily, it’s optionable, and reduz is minimalist and very conservative about what PRs to merge, etc. That is the only thing protecting Godot from becoming a heap. Which is why I still use Godot, because I have faith in reduz and know Godot is going to be okay. I mean, they even had to create a separate repo (godot-proposals) because of the massive influx of ideas/PRs.
My point is it’s not about a feature creep of new additions to the language (Crystal removing markdown was a good thing). It’s about the use case a core developer might think is okay, compared to what an average user might do. I understand contributors are super important because of their knowledge of the inner-workings of the language. This is vital, however, this doesn’t necessarily mean PRs are objectively correct. PRs needs to make MORE SENSE to the community, not just several contributors.
For example, my issue reporting an arithmetic overflow. The arithmetic overflow error is a GREAT new exception because it makes the compiler stronger and more versatile detecting bugs. These kinds of changes will make Crystal prosper, not / -> // or Time.now -> Time.local.
“But but, girng is a newb, has not contributed at all to the language, why listen to him?”. Because I’m your average user!!