Hacker News new | past | comments | ask | show | jobs | submit | more sdogruyol's comments login

We use Crystal at RainforestQA to replace our heavy-load / slowish Ruby microservices. It's been great so far and we love it. We're also increasing the adoption to Crystal inside the organization.

Also Crystal has a dedicated a wiki page for production users

Used in production: https://github.com/crystal-lang/crystal/wiki/Used-in-product...


Interesting! I’m surprised you didn’t move to Elixir given the syntax similarities to Ruby


While elixir's syntax is inspired by ruby, the semantics are vastly different. That change in semantics is really good for elixir, because it means it can take advantage of the unique properties of the erlang vm, but it's worth noting that crystal is far far closer to ruby than elixir. For better and for worse.


The syntax similarities between Elixir and Ruby stop as soon as one moves on from reading short blog post to writing real code. They are extremely different languages. Knowing Ruby helps only to remember the names of some standard library modules and functions, which were designed on purpose to match the name of the corresponding Ruby modules and methods, but not all of them. A vanilla example:

    $ iex
    > "1 2 3" |> String.split |> Enum.map(fn x -> String.to_integer(x) * 2 end)
    [2, 4, 6]

    $ irb
    > "1 2 3".split.map {|x| x.to_i * 2}
    [2, 4, 6] 
which by the way highlights the extra verbosity of Elixir compared to Ruby. It's less verbose on more complex examples, mainly because of pattern matching, but the proof would be too long for this reply.


Kotlin syntax:

"1 2 3".split(' ').map { it.toInt() }


Your example doesn't do the same thing.

The same as grandparent, in crystal:

  "1 2 3".split.map &.to_i.*(2)


I believe that Ruby also has that & shortcut (or similar) but it's totally unreadable. I never used it and I don't even want to check the exact syntax. Is it the only way it works in Crystal?


It being readable is a matter of getting used to it. I find it more readable than the block version as there is less syntactic boilerplate. YMMV.

Ruby has a similar version using colon instead of dot but that version isn't chainable and doesn't take arguments so it can't do the *2.

And no, you can write out the full block just as you did in the Ruby version.


Whoops, you're right.

    "1 2 3".split(' ').map { it.toInt() * 2 }


I hear this a lot but I keep seeing more and more Ruby devs moving to it trivially and as someone who reads-not-writes Ruby code I find it just as trivial to grok it.

So I think the differences are there but they’re being overstated from a transfer of skills standpoint.


Differences don't necessarily make it hard to move to another language. Many developers moved from Java to Ruby between 2006 and 2010, including me, and Ruby is pretty different.


Elixir would probably not have been a huge improvement over Ruby if they switched languages for performance reasons. Elixir is great for many things, but raw number-crunching performance is not one of them.


What drew you to Crystal?

If you'll forgive the snark, you've moved from one obscure language, to an even more obscure language that even fewer developers know.

What is it about Crystal that outweighs the very boring practical downsides of production use of obscure and immature languages?


How is Ruby an obscure language...?

Their developers are already proficient in Ruby. Crystal is a very, very close cousin of Ruby, syntactically and structurally. This isn't like jumping from Java to Haskell.


I didn't know it was that similar. Neat idea for a language.

The 'Boo' language does the same for Python.


I'd say Nim is for Python what Crystal is for Ruby.


On closer inspection I agree - hadn't realised Boo uses the Common Language Infrastructure.


>What is it about Crystal that outweighs the very boring practical downsides of production use of obscure and immature languages?

Tons of startups, and tons of billion dollar companies, run on Ruby / Rails. How is it "obscure"?

Crystal sure.

Then again, PG who created Hacker News used Common Lisp, which at the time had about the same developer pool as Crystal give or take (well, not really, but close enough, compared with industry favorite languages).


I think many tens-of-thousands of developers would not agree that Ruby is obscure.


In silicon valley and among most of the startup community, Ruby still dominates the landscape, even when compared with Node.js, Python, etc. There's plenty of talk of companies re-writing their infrastructure in node, but why would you do that when you can have Rails and/or Crystal? Furthermore, if you ever need something from NPM, you can just throw it in a Google Cloud Function or in Lambda.

https://medium.com/@yoelblum_45935/demand-for-ruby-on-rails-...


It's interesting that everyone's still using rails in silicon valley. Here in the UK, Laravel (PHP) and Django (python) are both more popular than Rails for new projects. But I hear that PHP isn't popular at all in the US?


PHP in the U.S., especially in the startup world, is seen as "oh, you develop in third world countries". That's the perception these days unfortunately.

That said, I was an avid PHP developer in the U.S. about 10-15 years ago and I always liked the language. There's just no one learning PHP anymore since all the kids just learn js, and no one trying out "hipster" languages like ruby/crystal/go/python/elixr/d/nim/rust/etc is going to try crusty old PHP.

I will say though that PHP, without any frameworks, is probably my favorite thing to develop a simple standalone site specifically because it lets you break all conventions and just output some damn content possibly with some simple logic involved and without using classes/mvc/etc.


Probably because they loved the language. Humans are humans, and not everything is made with a rational financial decision. If you use the language, and like ruby and static typing, you'll find that there's a lot to love.


I see your point, but I sympathise with it less and less as time goes on. Programming languages are just tools. Software development should strive to be a proper, rational, engineering discipline.

Humans aren't robots, but one's choice of development tools is steered by real forces, both technical and business. I don't see that whim, unconstrained by such forces, has any place in the decision. Same goes for curiosity.

If it were my decision to choose a language to use in production, I'd want to go with a safe boring choice like Python/Java. Mature and stable on lots of platforms, easy to hire for, plenty of libraries and tooling.

Taking a risk is sometimes the right thing to do, but I don't see choice of programming language as being one of those times.

It's not that I don't like neat languages like Crystal - I really do - and I'm certainly not trying to put them down. I just wouldn't want to try to argue to management that using it is in the company's best interest.


> Software development should strive to be a proper, rational, engineering discipline.

Well, to use an analogy from civil engineering, I don't think choosing a programming language is always as critical as which type of concrete you choose and how it's reinforced. While it's true you wouldn't choose just any language, there is more room for preference here. Especially because you can switch languages for a project, but practically can't switch the material used in the foundation of a building.

> I just wouldn't want to try to argue to management that using it is in the company's best interest.

In some companies you don't need to argue with management about that decision. Also, a language being less popular or obscure doesn't mean you can't evaluate it's stability and feel comfortable enough with where it's at to use it. I'm glad people do because otherwise we wouldn't even see any language as popular as it is.


> you can switch languages for a project

What do you mean? If you're 100kloc in, you pay a considerable price in jumping ship. Rewriting means throwing out your investment. Interfacing two different languages for one project is rarely a good move.

> I'm glad people do because otherwise we wouldn't even see any language as popular as it is.

Sure, me too. Like I said, I do like new programming languages, I just don't see myself using one for serious work.


It's always a tradeoff between having fun and accepted practice, and I'm glad for the brave souls who do use Crystal in production. After all, every mature language was once someone's toy, and you can never get from one to the other without many successive firsts.

I'm not here to recommend people use it in production, but I can understand the mindset of people who do.


>Software development should strive to be a proper, rational, engineering discipline.

That will never happen. Or when it did it will be all mechanized, with machines doing the programming.


Even today, a tiny proportion of software development is actually done with a respectable engineering process.

It's not a myth, and I don't see that it should be dismissed as a pipe-dream to think that this sort of serious engineering approach could be adopted outside the critical-systems industry.

https://www.fastcompany.com/28121/they-write-right-stuff


Crystal is a Ruby inspired compiled language, allowing it to run blazingly fast with a very low memory footprint. It uses LLVM for emitting native code, thus making use of all the optimisations built into the toolchain.

Website: https://crystal-lang.org/

Github: https://github.com/crystal-lang/crystal


Crystal uses Boehm GC https://github.com/ivmai/bdwgc


Crystal is a Ruby inspired compiled language, allowing it to run blazingly fast with a very low memory footprint. It uses LLVM for emitting native code, thus making use of all the optimisations built into the toolchain.

Website: https://crystal-lang.org/

Github: https://github.com/crystal-lang/crystal



Windows support is still WIP, recently we are making some good progress https://github.com/crystal-lang/crystal/pull/5339


Crystal is a Ruby inspired compiled language, allowing it to run blazingly fast with a very low memory footprint. It uses LLVM for emitting native code, thus making use of all the optimisations built into the toolchain.

Website: https://crystal-lang.org/ Github: https://github.com/crystal-lang/crystal


For me Crystal is what Ruby might have turned out to be, if its designers cared to take some inspiration from Dylan.


That makes no sense to me. Most of what makes Crystal different from Ruby results from the former being a static language and the later being dynamic.

I understand that dynamic languages are not popular these days on HN, but it's silly to suggest they should become static languages. They just offer different tradeoffs, a bit like screws and nails.


Dylan is a Lisp (thus dynamic) with Algol-like syntax.

Dylan supports AOT compilation like Crystal, and had optional type checking, so one could make it into Crystal if all variable declarations happened to be annotated.

Don't forget Dylan was intended to be used as Newton systems programming language and the team managed to create their own OS, even after C++ was decided to take Dylan's role.

Personally dynamic languages without AOT or JIT support were never popular with me beyond shell scripting tasks.


I thought NewtonScript took Dylan’s place in Newton development?


No, Dylan was supposed to be a systems language in the spirit of Lisp Machines.

But internal politics and battling between teams spoiled it.

Check the comments from mikelevins and wrs.

https://news.ycombinator.com/item?id=15106802


We have a dedicated wiki page for Crystal production users :) https://github.com/crystal-lang/crystal/wiki/Used-in-product...


Here's a great blog post about Kemal and Websockets :) http://kemalcr.com/blog/2016/11/13/benchmarking-and-scaling-...


Kemal: Fast, Effective, Simple web framework for Crystal Website: http://kemalcr.com/

P.S: I'm the author of Kemal :)


So cool! I really enjoy working with Kemal. :)

The State of Crystal at v0.21 article (https://crystal-lang.org/2017/02/24/state-of-crystal-at-0.21...) stated that multithreading with work stealing was coming "soon" and that you already managed to run kemal in parallel. Can you share anything about the current state of that project?


Even though it's experimental I've successfully compiled Kemal with multi-thread support. The throughput was OK. It's promising and will definitely help CPU bound apps :)

You can check the wiki for more info https://github.com/crystal-lang/crystal/wiki/Threads-support


Is it possible to pass a cookie (session id) using websockets with kemal? or do I have to manage authentication manually?


I use to send my JWT token to check validity of the user's session


Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: