New year, new release: Crystal 1.7.0 is released! - The Crystal Programming Language
While we have tested it against several known and sizeable projects, that doesn’t preclude the existence of regressions. If you find an issue, please check the issue tracker and file a bug: it will be fixed in the following patch version.
It is already available on the supported platforms, check the install page for details. That includes docker images , snapcraft, .deb and .rpm packages and the brew formula .
Thanks for releasing this, it’s great! Happy to have my first two PRs included too. I’ve just updated the crystal-docker-quickstart project template to 1.7.0 as well.
In the blog post, I see you mentioned that the interpreter is enabled only in the brew build by default “for technical reasons”. Just curious if there’s a Github Issue or similar tracking this? I couldn’t find it in a quick search.
TL;DR: The crystal is statically linked against musl libc. But static musl doesn’t have libdl available so we wouldn’t be able to load dynamic libraries at runtime. To work around that we would have to link at least libc dynamically, which requires major changes to the distribution workflow. The point of static linking is to make shipping for many linux systems simple because we can use the same binary everywhere.
Running my regular set of apps as benchmark comparisons to 1.6.2 here are initial results:
The Good
Compile times went down from ~16 secs to ~8secs
The Bad
Compiled (stripped) binaries increased a little bit (nothing outrageous)
The Ugly
Performance decreased (apps ran slower) across the board, especially for multi-threading.
These apps are prime sieves using single and multiple threads. The single core differences were close but 1.7.0 still a little bit slower. Much bigger regression for multi-thread versions.
I actually am getting completely different results from jzakiya for 1.6.2->1.7.0, so I suspect the difference depends highly on the actual workload. I used my own midi123 program as a benchmark.
My release compile times were about the same, but I’ll be honest and don’t usually pay attention to these. The stripped binary was slightly smaller now (20496 bytes), and performance is about 0.1 second faster (rendering 34 MIDIs to WAV using 20 worker threads on a Core i9-10850K).
When I run a set of more synthetic benchmarks (BinaryTrees, Mandelbrot, nBody, and SpectralNorm) that I use just to gauge differences between releases for multiple languages, I saw no real difference. None of these use fibers, however.
The REPL is now really very usable, the release notes doesn’t show who did it, @asterite?
Thank you very much! Also for all other improvement of cause!