Why people leaving crystal?

I’m doing my part. Had a job interview a couple months ago at a local ISP. I mentioned my passion and experience with Crystal. During the final interview, the CEO mentioned he threw it on homebrew and the senior dev of over 17 years mentioned it’s cool and he has used it before. However, I haven’t incorporated Crystal yet as I’m mostly working with MSSQL 2000 and PHP written in 2005, lol.

Just try to spread the word whenever you can. The language might not be as popular as the more mainstream languages, but I feel it doesn’t really need to be.

I also want to add: I’ve noticed a consistent pattern across the years: The core developers have maintained positivity and a passion for this project for almost a decade now. That in and of itself is also a great incentive for other programmers to get on board.

16 Likes

I really hope that the Crystal core team can give crystalline more technical support, as we discussed earlier, LSP support for editor is very very important for young developer to use a static type language.

Crystal community is very small, we don’t have a lots of resources to reinvent the wheel, Some people used to work hard on scry, but that project current under unmaintained. now although crystalline is basically available, but, some exist issues make me have to disable it, because the disadvantages of enable it outweigh the advantage.

4 Likes

Well, I’m one of the newer ones…

I think the point Hadeweka made about most of the “currently mainstream” languages being quite old is an important one.

Besides, we have more languages to choose from now than ever before, so I think it takes longer for new ones to mature. I think more developers are polygot, thus more likely to grab an existing solution in a language they know rather than write a new library for their new favorite language (but it happens).

Crystal will get there eventually, but it’ll take time.

11 Likes

I’m monitoring crystal development for at least four years now, but I see no major progress in the following subjects:

  1. Crystal just haven’t reached critical mass yet.
    Crystal is not mature enough for production use and nave not enough libraries, so many developers just CAN’T use it, regardless if they like language itself. More devs use the language, more improvements to the language are done and more libraries are developed.

  2. Syntax is not mature enough. IMHO, Crystal haven’t reached 1.0 state yet.
    I encountered several instances of strange behaviour, but remember only one example: It is possible to define fun with varargs in lib block, but it is not possible to define a pointer that function.
    Also, when you call fun, defined in lib, types are casted to_unsafe automatically, but when you call pointer to that fun (it becomes Proc), types are not casted and you get segfault.
    Proc is used for Crystal methods, Lambdas and C functions. Proc is two pointers, C function is only one. It should use separate type, that have same behaviour as fun declared in lib block, including varargs and type cast

  3. Compilation speed - incremental compilation is hard in Crystal, but is absolutely required.

  4. Language tools - Language is very complex. Only compiler can know the type of the variable, unless either it is statically defined or external tool reimplements all the type inference logic. But compiler is slow, and LSP is not well supported.
    Incremental compilation is also required for this.

  5. Macros - existing macros are crippled as hell, hard to use and are not well documented. Macros are intended to replace runtime reflections and all runtime metaprogramming, so they must be good. Procedural macros similar to Rust is also required.
    Crystal Interpreter should help with it.

  6. Compiler complexity - it is very, very hard to understand what does compiler do from the code. There are a lot of methods without type declarations and way too little comments. I tried to investigate how the compiler runs JIT in tests and I gave up, I spent too much time and got no clues.
    It’s very hard to contribute, especially to ruby devs like me, who is most interested in the language

Additional issue, not related to language itself is that Crystal is kinda faceless language. It is “marketed” to ruby devs who need speed and better typing, but ruby devs are too used to the superb ruby infrastructure. A lot of people I asked have no idea why anybody even needs this language, when Go and similar already exists.

3 Likes

Yes, there may still be many questions, but, once the compilation is successful, the app is still very stable, production ready.

Ruby part is quite mature, the fun, lib, are not the mainstream usage in Crystal, you can create issue.

This is probably the most discussed question in this thread, But this may be a trade-off that has to be sacrificed. the benefit is that you can write code like Ruby.
But, anyway, i still consider we can(and should) improve those experiences.

I consider macro in Crystal is quite powerful, and easy to use. though, we need port more methods from std-lib to macro.

If i understood correct, procedural macros is basically same as crystal macro?

2 Likes

Oh, I need Crystal all right. I did a very small project in Go (because: statically compiled binary you can just wget i CI) to get to know Go better. Then I did the exact same project in Crystal when I discovered it.

They do the same thing, which I’ve done many times before in other languages. They’re pretty much the same line count, the difference is that the Crystal version has spec tests while the Go version has no tests, because I spent all the time trying to get the thing to do what I want so I never got round to look into testing.

No, I don’t need Crystal because it can do something I couldn’t hack together in Go. I need Crystal because I enjoy writing Crystal far more than I enjoy writing Go.

Granted, Crystal needs more of an image of a language that’s designed to be pleasant to work with. That’s the killer feature for me.

18 Likes

I would like to second this. Fast is nice. But THIS is the reason I’m here.

1 Like

The only piece of the crystal code that seagfaults regularly for me is crystal compiler itself :grinning:
Actually, most instabilities I encountered was caused by incorrect bindings to C libraries, or incorrect usage of that libraries. But lack of Crystal libraries forces us to use C libraries and that is usually not as straightforward as gem 'rails' and requires some knowledge of C to do that right.

In Rust terms, Crystal has declarative macros. That macros is just a template engine. Procedural macros is also called compiler extensions. For example, they can call the DB to validate SQL queries and generate structs for response (GitHub - launchbadge/sqlx: 🧰 The Rust SQL Toolkit. An async, pure Rust SQL crate featuring compile-time checked queries without a DSL. Supports PostgreSQL, MySQL, SQLite, and MSSQL.)
IMHO, compiler should include interpreter and should interpret macros as regular Crystal code, without need of one more interpreter with custom syntax: https://github.com/crystal-lang/crystal/blob/master/src/compiler/crystal/macros/interpreter.cr
It will be much easier to write and understand, if macros will be the same as any other crystal code, not just ported subset

Completely agree. Crystal should be promoted as unique language, as something newer and better

1 Like

Crystal can also do that:

https://crystal-lang.org/api/1.6.0/Crystal/Macros.html#run(filename%2C*args)%3AMacroId-instance-method

At compile-time you can call any other Crystal program, provide it an input based on the current program’s state, or whatever argument you want to pass, and produce code that’s injected into the current program. With that you can read a DB, open files, do network connections, etc.

5 Likes

I’m not really sure it’s overall really a good thing. Especially if you do too much at compile time. It leaves you with barely reproducible state when the resulting program does not only depend on the code, but on any number of data gathered from the system environment or even completely external sources.

8 Likes

I would like to add two things to the discussion: data and my personal view.

Data

I asked myself if the statement that people are leaving Crystal is true, and after looking at two data sources, I think this could be plausible.

Google Trends

First, Google Trends shows a decline from 2019 to 2020 and also into 2021.
In 2022, it seems to have somewhat stabilized, but lower than in 2017-2019.

Stack Overflow Developer Survey

Second would be the Stack Overflow Developer Survey.

Most popular technology

Crystal was first listed in the “Most popular technology” category first in 2021.
Here is the data:

  • 2022 - 0.48% (340 reponses)
  • 2021 - 0.56% (466 responses)

Most loved, dreaded, and wanted

2022

2021

explanation

Personal data

When I looked at shards/repos over the past few weeks, I often found that the last contribution was 2 years ago. While this is not scientific, it made this statement feel true for me that people are leaving Crystal.
Examples:

Those are all examples of stuff I came across recently while trying to get into Crystal again, and I found these repos basically abandoned. That doesn’t feel great as an experience of a new user.

My personal view

I first discovered Crystal in 2018 and looked at it with interest, but then I say that it was all still under heavy development and that a 1.0.0 release should solidify everything, so I thought, I better wait and check back later. I kept it roughly on my radar, but eventually, I forgot about it.
Recently, I did something on an old project of mine from 2018 where I also used Crystal and had the need for a pleasant to work with language which can generate statically compiled binaries for portability. First I used Go, but when I had stuff to do with JSON, Go felt very cumbersome. I didn’t like the Nim Syntax, and Rust is also not something I want to learn for that.
Then I remembered Crystal and what can I say it was a very nice experience working with it from a syntax perspective.
Static compilation was a bit tricky at first, but then I read the docs and with alpine in Docker it’s fine, but I guess Crystal has a bit of a way to go to reach the level of Go.

Conclusion

I think people might have left due to there not being a 1.0 release for a while, but since it is released I guess the data suggest the bleeding has stopped, now Crystal needs to build up momentum, maybe through social media to be picked up again like me. At least that is my opinion.

9 Likes

Data can be very deceptive. I don’t want to disregard any of your findings, but I think they’re not entirely conclusive.
2021 for example was a special year for Crystal due to the release of version 1.0, which probably sparked some interested which may have faded by now. Google trends may show trends, but there’s a lot of uncertainty.

Shards not being updated can mean they are no longer maintained. But it may also mean they’re feature complete and no bugs were discovered. Stdlib is backwards compatible, so there might not be a lot to do for maintenance. But it’s often hard to tell what the situation is.
And there is definitely a maintenance problem. There are many shards have been abandoned at some point because the authors lost interest. This happens in every ecosystem but Crystal’s just isn’t very big and many things are still missing or unfinished.

I agree on your conclusion. Many would have hoped for the 1.0 release to have a bigger impact in drawing in new users. But as far as I can tell, that hasn’t happened.
Increasing public awareness of Crystal would be great, be it through social media or other means. My recommendation for that: If you like using Crystal, build something productive and tell others about it, while having fun doing it.

15 Likes

I don’t like this whole thread.
It somehow misses the point.

Why should I care how many people like the music and musicians I love?
Why should it be important that as many people as possible play the games I like?
What does it matter that some people like Pizza Hawaii and others don’t.

Litterally the only people who should care about this are the core team that is actually payed to develop the language.
Yes, they are probably happy if their brain-child gets widespread praise, and adoption, but would any of you seriously stop using/developing it because your following is too small?

There are bands who have maybe one top 100 radio hit, and 50 hardcore fans, do you think their fans care if there is only 50 of them? Sure they would probably love it if more people came to the concerts but, oh well, we’ll can have fun anyway.

It feels a bit like the opposite of FOMO (“fear of missing out”), something like “fear of not following the hype”.

I don’t know, maybe I’m missing the mark here, but it feels weird to me that people bring up numbers, and stats, and graphs.
I just love the language, and i’ll keep using it whenever I can because it’s beautiful, and I just enjoy using it.

Yes, Crystal does not have shards for everything under the sun in 3 different flavours.
And yes, I did have to do things myself because I didn’t find a shard for it.
Thats life. Do it yourself, or chose a different tool for this one task, and look forward to the next you can do with crystal again.

I’m not good at putting theses thoughts into words in exactly the way I feel them, but I hope this can serve as an approximation
I didn’t intend to insult anyone’s opinion, I hope this can be understood as an expression of a rather vague feeling I have when this thread popps up with a new reply.

11 Likes

@straight-shoota fair enough, with the low amount of data we could also just see some normal fluctuation which would mean there will be a regression to the mean. Overall, it is hard to judge why the data is what it is; therefore you would need some kind of study/survey.
I strongly agree with your point about libraries which have become stable. In fact, I use one of the ones I listed, and it all works great.

My recommendation for that: If you like using Crystal, build something productive and tell others about it, while having fun doing it.

Great point. I did and showed it to my team, they were a bit interested, but also hesitant. I don’t know if it will lead to someone trying it out.

2 Likes

@mavu you are right that it is a fallacy called the social proof or herd instinct, I think it matters on a psychological level because it is something humans tend to do. It’s irrational, but still, it is an effect that exists.

Litterally the only people who should care about this are the core team that is actually payed to develop the language.
Yes, they are probably happy if their brain-child gets widespread praise, and adoption, but would any of you seriously stop using/developing it because your following is too small?

I disagree. I think everyone in the Crystal community should care about how the language is perceived. If it is perceived as “dying” people are more likely to “leave the sinking ship” than to adopt it regardless. Yes, people who have already invested a lot of time and effort into the language might stick around longer, but that would then just be the sunk cost fallacy.

For example, look at Blizzard deciding in 2015 not to publish their subscriber numbers to World of Warcraft any more. That was a response to the falling numbers and them wanting to stop the bleeding so that not even more people would leave.

Yes, Crystal does not have shards for everything under the sun in 3 different flavours.
And yes, I did have to do things myself because I didn’t find a shard for it.
Thats life. Do it yourself, or chose a different tool for this one task, and look forward to the next you can do with crystal again.

While doing it yourself can be fulfilling, Crystal is also competing on a vast market of different languages. It has to offer enough benefit to capture and hold minds, which in return will positively influence the way the language is perceived and a positive reinforcement loop beings.

In the end, all I’m saying is that I don’t think the situation for Crystal is dire, but there is definitely an effect on people how the state of a language is perceived and looking healthy can start a positive reinforcement loop.

8 Likes

In what way does it diminish my enjoyment of this tool, if other people don’t want to use it?

Is there a technical reason why crystal would suddenly become unusable if development stopped?
Someone with more in depth knowledge could probably give a timeframe in which it would still be possible to develop with crystal.
I currently don’t see any reason why it should stop working at all.
So, no “sinking”, no “sunk cost fallacy”. Right?

World of Warcraft is a product that Blizzard sells to people. They need the customers because they pay.
I’m not aware that anyone sells the Crystal compiler. Or the documentation. or actually makes any money from the development of the language.
Correct me if I’m wrong here.
Yes, the development is sponsored, and that pays people working on it.
Yes, it would be bad if that sponsoring stopped, because the people currently getting payed for working on it would need to find different work. That’s never nice. But that is it.
That is the only thing that would happen.

Blizzard could stop me form playing WoW by shutting down the servers, I don’t think anyone could keep me from using Crystal if development was shut down.

I think in the end, I just dislike the focus on competition.
Crystal needs to compete to be come more visible!
Crystal needs to compete for the first place as fastest language!
We need to increase PR so crystal can compete on the vast marketplace of languages!

No to all of that.

2 Likes

Personally, I like the Crystal language and I don’t think people will leave the Crystal language.
However, I often find it difficult to distribute tools made in the Crystal language.

Today, tools such as exa, bat, delta, and tokei created in Rust are very popular. They are very easy to install. Just type cargo install exa. People install cargo to use these tools even if they do not plan to write Rust themselves. This means that the Rust compiler is installed on their PC.

Compared to Rust, it is much more difficult to distribute tools made in Crystal. Usually, you have to download the code from github, make, and make install. Before that, you have to install the Crystal language.

It would be difficult to recommend these tasks to people outside of the Crystal language community. So, it would be nice if there was an easy way to access artifacts made in the Crystal language, even for those who are not directly interested in the Crystal language itself. As they use useful tools, they should become interested in the language in which they are written.

PS: I don’t mean that I want a package manager. Of course, it would be nice to have one. But if there was another way to distribute binaries and packages by platform easily with a few clicks, using GitHub Actions for example, I would be fine. I assumed a package manager because I don’t have much imagination, but there must be other solutions…

2 Likes

Ideally the shard would provide some way to distribute a pre-built binary. E.g. that you could just wget from GH releases, install via brew, snap, etc. This is pretty easy to do and to your point doesn’t require installing anything, other than the runtime deps of the underlying lib if they’re not statically linked.

3 Likes

Yes, and it has already been done. I remembered crystalline.

There you can install the binary on MacOS or Linux like this:

Linux (x86_64)

wget https://github.com/elbywan/crystalline/releases/latest/download/crystalline_x86_64-unknown-linux-gnu.gz -O crystalline.gz &&\
gzip -d crystalline.gz &&\
chmod u+x crystalline

They achieve that through GitHub Actions. Here you can see the release GitHub Action workflow.

You could just use that as a basis.

I understood @kojix2 means of package manager is, a normalized center package manager. no different github repo link, no the different way of wget internet download. user just need cargo install ??? or gem install ???, only name is required. to be honest, its really very convenient, personal for more personal player, it not so necessary, but for most of user, it’s a dessert. and search package based on name from a center server, is more efficient then current solution.

I think Crystal will have this feature in the future, for now, resource-based limits, it still not available.
But that’s just a guess, all depend on the input from Manas, community etc.

again my same point, maybe manas should start a foundation for Crystal, as Rust does, to attract more investment.

2 Likes