The downside being a relatively slow compiler. It's the necessary trade-off for the type inference.
The downside being a relatively slow compiler. It's the necessary trade-off for the type inference.
So what is the performance like?
With the caveat of course being that benchmarks don't always reflect real world performance.
- tooling is abyssmal ( IDE etc ... )
- no mutli threading
- no real support, I'm not even sure if there is one paid guy anymnore on the project
- it's still immature
- they break the API all the time
As others have mentioned this is a side effect of how young it is.
> - no real support, I'm not even sure if there is one paid guy anymnore on the project
If paid support is all that counts then most languages would fall into that.
> - it's still immature
Tautological. Nothing can become mature without first being immature.
> - they break the API all the time
Isn't that what a 1.x is for? A stable major version?
Can you name another recent programming language that wasn't developed in-house at a major company. Go , Dart , and Rust all started out with paid teams of programmers working on them.
Not sure if Crystal will be able to progress at a rate fast enough to keep people interested. Likewise, you'd have to be insane to try and pitch this to your project manager. I consider myself to be a risk taker, but even for my own side projects I stick to older better known programming languages.
it feels like we keep trying to solve the same problems over and over again instead of utilizing solutions which already exist
Modern python has grown significantly from its first release in the 90s though. I don't think that can happen today, we all want too much out of our programming languages.
Unfortunately that’s not true at all - Python is far from simple. Sure, it’s no C++, but it’s very complex compared to languages like C, Go, Lua, even JavaScript.
- no multi threading: Crystal has lightweight green threads for lightweight concurrency. However, Crystal does have experimental native multi-threading guarded by a compiler flag. The ultimate goal is to have multiple native threads each running multiple green threads for maximum concurrency. Currently, with just green threads, Crystal is competitive with Go or Rust wrt throughput. You can checkout benchmarks on crystal-lang.org or search Google for "Go vs Crystal benchmark" blog posts.
- no real support: Manas Tech is the corporate sponsor for Crystal (https://manas.tech/projects/crystal/) and employs many of the core developers; the project also accepts donations on Open Collective. There is a crystal-lang IRC channel, Gitter, Discord, Discourse forum, sub-reddit, and even a "Matrix" channel where developers frequently ask and answer questions.
- still immature: a 1.0.0 version is a significant milestone for any project. Companies are already running Crystal in production, which was discussed during the Raw Crystal 2020 virtual-conference (videos on YouTube).
- API breakage: Crystal 1.0.0 was released to stabilize the API (SemVer)
The compile times are largely a side effect of the underlying language design, and it isn't likely to get significantly better, which is why I mentioned it.
I'm curious about that, MLs usually have fast compilers (OCaml for example) and have type inference. I thought that the slow compilation times were due to LLVM .
I believe you can speed up your compile times a bit by being explicit with annotations (which I often prefer anyway), but there's still a lot of overhead for the global type inference.
Compared to Haskell, Ocaml, Scala, F#, ...? Writing it like a dynamically typed language is standard for full type inference.
Scala has both, F# too (though function overloading is possible, I think it's not idiomatic), OCaml has named arguments, Haskell has overloading.