Why people leaving crystal?

NOTE: This thread was written on the phone by a non-native English user, with love for Crystal.

I consider this is a discuss we have to faceing, but i found no one discuss on this.

All following content is just a guess, no evdience, but, i hope this can be the start point.

All begin from i am watching a video from Manas Technology Solution in Youtube, name: Crystal Language Hangout, recorded about six years ago.

three core-member answer question about community.

The first discussed question is: supported on windows.

AS said in video, this is a big challenge:

  1. none of core member use windows daily
  2. UTF-16 support instead of UTF-8
  3. IO issue
    …

And, for now, six years past, i even couldn’t know some of core-member what it looks like because years past, changes in their appearances.

we are still blocked on windows support, instead of, many many (probably very useful) feature still not implemented.

following is some i consider is useful

  1. Incremental compilation, as said in this video, we hope compile code quickly, don’t want waiting for 5 seconds to compile and run even on a very small kemal project.
  2. barely LSP support, i use several static type language, Dart, Rust, Go, Haskell,
    both of them have good support on LSP. e.g. code completion, jump to definition, auto-format, auto import, show document,
    rename refactor, code action, and more…
    but, for crystal, i use crystllize, bascially only format before save feature is useful, even, this feature is
    not work on macro. see this
  3. multi-thread support in fiber.
  4. REPL support, like irb/pry in ruby.
  5. compile to static in libc based linux with musl, we have to use alpine.
  6. WASM
  7. A normalized center package manager. as gem for ruby, cargo for Rust.
  8. After a quick search and experience, except lucky, none of web-framework is both mature and live maintain. most of them just like toy, kemal is maintain by crystal core maintainer, but, it exists bugs like this was fixed recent days, that prove one thing, only a few people use it.
    …

Okay, back to this thread topic, why people leaving crystal?

my answer is WINDOW SUPPORT, as said early, this is just a guess, because i am a newcomer, don’t know history.

core members probably spent too many times for support window, delayed others more import features, it delay the
release of crystal 1.0 for several years, which missed the golden period, no better LSP support, make more and more people
choice to use rust, even golang, a language designed for 15 years ago’s programmer, except, awesome concurrent CSP support.

If this is true, we have to consider if worth it. in fact, i search window after:2019-01-01 in:title in our forum,
for the threads which title include “windows”, i only get 15 results, do we do some serious investigation or survey
before we spend times on windows ? those people hope add windows support, if still leave on community?

3 Likes

Interesting discussion, but I don’t think Windows support is the reason here.
Actually, Windows support is one of the things I absolutely require for my current main project.

One of the more plausible reasons might be the lack of libraries, which are able to offset Crystal from other languages. The still recent 1.0 milestone will likely change this (but not instantly), but without a Ruby-like ecosystem I don’t expect too many people migrating from other languages to Crystal right now.

This might just take some time and flagship libraries like Rails.
We have some cool libraries like Kemal, Lucky and similar, but that’s about it for now.
Crystal is also still quite centered around web dev, while other languages excel in other fields of work as well (media, AI, science, numerics, graphics, even games :slight_smile: ).

I personally think a broader ecosystem would benefit Crystal extremely.
Currently, it’s mostly “Compiled Ruby with static types”, but eventually it might get its own identity and draw in more people.

5 Likes

Finding such a bug was quite surprising to me as well, but it happens, even in heavily used software. But just to clarify: it refers to the content_for macro in kemal, not kemal itself. That’s an important distinction. Kemal is used for production grade web apps. You don’t need the content_for macro for that as it is not a core part of the framework, but a convenience tool for using Kemal with ECR templates (and you may be using any other kind of template engine with kemal).
And content_for may have actually worked correctly in previous versions of Kemal, before some refactoring in rather recent changes (Fix content rendering by matthewmcgarvey · Pull Request #631 · kemalcr/kemal · GitHub, Remove Kilt by sdogruyol · Pull Request #618 · kemalcr/kemal · GitHub).

6 Likes

Regarding Windows support, sure it has drawn resources from other feature. But I don’t think there has ever been any reasonable doubt about bringing Windows support to the language. I would’ve even preferred putting more focus on that, even if it means delaying other things.
At the point where we are now, there is definitely no arguing about Windows support because it’s already here, in large parts. We’re in the process of finalizing the IOCP based event loop (Windows: Event loop based on IOCP by straight-shoota · Pull Request #12149 · crystal-lang/crystal · GitHub) which is one of the major missing pieces. I think we can confidently expect to reach stable Windows support in the not so distant future.

5 Likes

media, AI, science, numerics, graphics, even games

almost all of those things only needed by people that primary use windows. so without proper windows support there won’t be any serious projects written in crystal for those subjects.

about webdev, while the performance of crystal program is superb, not that many projects really need that level of speed anyway, and there are so many competitors for that market so crystal hardly is a rational choice considering the state of the libraries.

Anyway, there is no point for a mainstream language without windows support.
you want to write a compiler (eg sass to css) in crystal? Pointless because it currently does not work as-is in windows. A p2p network, blockchain client, cli utilities? Also a big no.

Since there are ton of new exciting languages in the last decade, it’s hard to force people to contribute to crystal where there exist competitors who are better out of the box. Even meme language like V has more contributors than Crystal.

1 Like

I just want to add that the vision “people leaving Crystal” is not entirely accurate. I mean, there are people leaving the community, but there are also people joining it (you yourself are a good example). I don’t know which metrics to take, but if it serves as such, OpenCollective donations have been linearly, steadily growing.

This is not to diminish the problem. We do want more people in, of course, and we do need to get attention from developers from other communities. Getting full Windows support will certainly help.

7 Likes

Yes, my concerns is maybe window support delayed the release of 1.0, probably, for years, as said on some places by core member, none of them use windows at that time.

if we release 1.0(no windows support) 4 years ago, perhaps, current is 2.0 in 2022, with awesome windows support.

Sure, perhaps that may not happen, but, this could be probably a warning, for Crystal is better in the future.

The debugger does not support hot code replacement, restarting the method frame, which is very fatal. As a result, my current general project will not consider cyrstal.(With java I can debug a bug and fix it in one go without restarting the project,Repeatedly reproduce the bug side by side, but with crystal light start and compile times are crashing me)

1 Like

So what is the advantage of crystal? Graalvm already supports Native, and has truffleruby (already supports ruby3), so you can run ruby ​​on graalvm completely.
For me, the advantage of crystal is the ruby ​​syntax and native, but the disadvantage is the very hard to use debugger, the debugger will spend 90% of the working time. If this is not done well, then the cyrstal will always be just a vase(Too many features but still not practical).

1 Like

My 2c, after a profound research: Crystal is a jewel among the other programming languages.

  1. It brings an unprecedented balance between performance (it’s practically as fast as C) and easy of use / speed of development. It’s a dream that you can now have both. (this is huge)

  2. Regardless of the frequency with which new libraries are released, the fact is: they keep growing, both in number and in quality

  3. Every decision on the language is take with notorious care, making it keep following a solid path of quality and maturity (contrary to some “new” languages out there). You can build a lot of things with Crystal (even operational systems) and, at the same time, count on the quality of the result.

In short, it’s just a matter of time before Crystal becomes mainstream.

But becoming mainstream is not what matters for me the most. What matters is that Crystal provides what I need, like no other language.

13 Likes

I think you absolutely have a point here.
Programming languages becoming mainstream can actually take several decades.

JavaScript and Java were developed in 1995, Python in 1991 and C++ in 1983.
Still, these are some of the currently most popular programming languages.
Even Rust, which is in the process of becoming one of these extremely fast, was first released in 2010, with its 1.0 release in 2015.

If we apply this pattern to Crystal, it will still take several years for it to be actually used in a significant amount.
By acknowledging this, it becomes clear that is absolutely worth it to invest work into the language and especially its ecosystem, even if the reward might not occur at this point in time yet.

9 Likes

When Ruby was over 20 years old and well into v2.x, using it on Windows was still a terrible experience. The response to “how do I use Ruby on Windows?” was always “buy a Mac”. It’s apparently better now (though I haven’t seen it firsthand, and from what I’ve heard that’s true only if you use WSL), but it was very much a mainstream language that could not be used effectively on Windows until just a few years ago. And it’s probably not the only language with a similar story.

So, while the idea that Windows support not having parity with Mac and Linux support is holding it back from its absolute potential isn’t technically false (more people would almost certainly use it if it did), it certainly won’t keep it from being broadly useful enough to keep it alive.

If you want to see better Windows support for your own purposes, PRs that improve it would be a lot more helpful than armchair commentary that boils down to “you should build this thing instead”.

8 Likes

you are right about “you should make PRs instead of complaining”. it’s essentially the spirit of OSS.
the thing is crystal is not the only language in the world, people have choices, and they will pick one that fit their need the most.

But I think what you said about ruby is utterly wrong. before rails, nobody in the west cared about ruby, the pickaxe book did help introduce ruby to the english speaking community, but until rails there wasn’t any real use for ruby in real world.

also, before rails you only have few choices for web servers: php, python, perl, java, c#, some weird lisp dialect… the option is limited enough that you can actually count them by hand. nowadays almost all popular languages can do webdev.

about “windows support for ruby”, believe or not Gnome was actually a decent DE in 200x, and Linux desktop was good enough to replace Windows as a developer main operator system. Stuff was way more convenience in Linux anyways, with bash, gcc and other gnu coreutils. and since ruby was mostly used to make webapp, it didn’t really matter.

the situation has changed since then, using ruby as example is just misleading.

1 Like

Can you help me understand what this has to do with how poor an experience development with Ruby was on Windows? I’m not seeing the connection.

I just found a interest story, mint lang, a new static language for write SPA, is possible the biggest project write use Crystal for now, was support LSP official.

It still not works on windows because crystal still not support it, though, that seem like never be a issue, perhaps, because mint-lang not a general-purpose programming language.

But anyway, the point is, nowaday, the LSP give us the really nice development experience, whatever you use VSCode, Emacs or Vim or whatever editor, it more important for the existing linux/mac developer use crystal.

Let the the user which using this language happy, work efficient, is a VERY VERY important things, than the still non-exists windows user.

In fact, i even can draw a conclusion in advance, even after windows version is release, still many windows user will leaving after do a quick try, because crystal really need more professional skill than others languages, extra, no better editor support, this issue overload-matches error which created on 08/2021, this really a big deal when use with shards like lucky avram, which have many and long union type, but it’s seem like no core member care about it and consider it as a issue, because it not updated almost one year before i reply to it, for a more easy to fix issue(at least, i think so), those users, who used to use Java, Go, Dart, Rust … in VSCode, will leaving.

Those user even consider this language is dead, because consider a language start to development about 10 years ago(basically same as Go Rust), with syntax inspired by ruby(not need do decision on this, right?), still a terrible(from the beginning user point of view) editor developmet experience, why use it?

Anyway, from my point of view, i want to point out the error decision or mistakes which made by crystal core developer over those years.

Because there is no other reasonable reason can explain why a WONDERFUL AWESOME programming language only get so little user use it since decade, and still keep leaving from it(since i added two months past, i don’t see any sign that the community is growing)

Final, what i want never blame, just for causes thought in how to make decisions, what is the community really needs.

One more thing, i don’t consider there is a position for Crystal for now in any domain known to me, it lose it best chance, maybe 2017~2018? there is no chance to next mistake.

I wanted to write a Windows app that have a server counterpart “talking” REST/JSON with a local DB, users could set a server somewhere, and install multiple Windows clients to query it. But for a solo user, they could set a local server in their machine and the client would just “talk” to localhost in a single windows machine. The current status of Crystal makes the creation of such server part for solo Windows users impossible.

I’m new to Crystal and have no intention in leaving Crystal, instead I’m trying to do any new project in Crystal.

But every time I decide against Crystal then it is for one of the following reasons:

  • I’m missing some shard which either doesn’t exist yet (but there is a library for some other language) or it exists and I simply can’t find it (maybe it’s just me, but for me finding (existing!) shards in Crystal seems more difficult than in many other languages (but there are also some for which it is as hard or even harder); I’m not blaming Crystal that some shards simply don’t exist (yet), this obviously will improve over time. Most of the time the shard I’m looking for, exists already, I’m usually just not able to find it (or its most recent version).

  • The application is meant for a system I can’t or don’t want to compile for, but has python or ruby available, e.g. some SOHO nas systems or router or TV and such (I don’t want to blame Crystal here at all, and don’t suggest or see any possible improvement for such cases; just mentioned for completeness)

  • I’m writing some library

  • I don’t want to deal with static typing. I’m amazed by the speed of crystal applications, but sometimes speed isn’t relevant at all and then I simply don’t want to bother with typing. This is actually the most common reason for me to not choose Crystal (or any of the other compiled options). I do like Crystal’s ruby-nes, but I probably wouldn’t even like ruby as much as I do in the first place if it wasn’t for its duck-typing.

I don’t mind whether Windows is supported or not. Whenever I have to write something to run on Windows, it’s usually a GUI application and then I would anyway go with whatever MS supports the best at that moment. This doesn’t mean I don’t want the Crystal team to care about Windows, it’s just a feedback that this one Crystal user in particular, doesn’t care about it.

Well, that hits the OP point. A reason to give up and move towards options, differently from your case, some people can go towards Windows solutions and simply don’t return, writing the front and backends using what’s available there.

1 Like

The state of Windows support has been discussed many times and I don’t think I have ever seen anyone hostile to the idea of it beeing improved. So may I suggest that those of you who really care about it assist in moving it along, as campaigning on the forums for someone else to do it has yet to work at the expected speed. You can of course do both.

9 Likes

media, AI, science, numerics, graphics, even games

almost all of those things only needed by people that primary use windows.

TIL every Linux/OSX only company I’ve worked at DNE.

TIL every steam game I’ve been playing on Linux and OSX for almost a decade DNE.

1 Like