Crystal 1.7.0 released

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.

The full changelog is here: Release 1.7.0 · crystal-lang/crystal · GitHub

It is already available on the supported platforms, check the install page for details. That includes docker images :whale:, snapcraft, .deb and .rpm packages and the brew formula :beer:.

Happy Crystallizing!

22 Likes

Thanks for releasing this, it’s great! :beers: Happy to have my first two PRs included too. :smile: 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.

1 Like

Thanks for your contributions :rocket:

This forum thread highlights the problems.

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.

4 Likes

Running my regular set of apps as benchmark comparisons to 1.6.2 here are initial results:

The Good

  1. Compile times went down from ~16 secs to ~8secs

The Bad

  1. Compiled (stripped) binaries increased a little bit (nothing outrageous)

The Ugly

  1. 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.

Submitted:

1 Like

WOO! New Crystal :smiley:

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.

1.6.2:

Geometric Means:
  C       : 1.502356 seconds (12 runs)
  Crystal : 1.694380 seconds (12 runs)
  Sbcl    : 1.493850 seconds (12 runs)
  Ccl     : 9.429838 seconds (12 runs)
  Chez    : 8.220981 seconds (9 runs)
  Pascal  : 3.993425 seconds (12 runs)
  Mono    : 3.927321 seconds (12 runs)
  Vala    : 2.840213 seconds (12 runs)
  Go      : 1.940684 seconds (12 runs)
  Nim-Orc : 1.539074 seconds (12 runs)
  Nim-Refc: 1.552657 seconds (12 runs)
Overall geometric mean time: 2.653395 seconds
Total time: 731.782634 seconds

1.7.0:

Geometric Means:
  C       : 1.489629 seconds (12 runs)
  Crystal : 1.692107 seconds (12 runs)
  Sbcl    : 1.484805 seconds (12 runs)
  Ccl     : 9.373721 seconds (12 runs)
  Chez    : 8.267081 seconds (9 runs)
  Pascal  : 3.981649 seconds (12 runs)
  Mono    : 3.945261 seconds (12 runs)
  Vala    : 2.906695 seconds (12 runs)
  Go      : 1.924261 seconds (12 runs)
  Nim-Orc : 1.531541 seconds (12 runs)
  Nim-Refc: 1.531594 seconds (12 runs)
Overall geometric mean time: 2.648458 seconds
Total time: 728.224260 seconds

Not that the other results are wrong, but I think it might be pretty job-specific.

Overall: highly pleased with 1.7.0 ^_^

3 Likes

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!

4 Likes

Nope, it was I3oris · GitHub . Here’s the PR: Interpreter reply by I3oris · Pull Request #12738 · crystal-lang/crystal · GitHub

2 Likes

German IT news site has a small article about the new version: Programmiersprache: Crystal 1.7 führt neue Engine für reguläre Ausdrücke ein | heise online

5 Likes

Oh, nice that we’re on their radar. That’s the first mention of a Crystal release in a major news outlet since 1.0 that I’m aware of.

EDIT: Actually, they also covered 1.1 before

1 Like

Proper attribution can be found in the linked issue (it’s also linked in the release notes!) and the changelog.

But yeah, I think it also makes sense to mention contributors in the release notes.

1 Like

Keep 'em coming Mike! :heart:

1 Like