Hi there!
I'm Matias Garcia Isaia, and together with Brian Cardiff and Martin Verzilli, we're part of the Crystal Team working at Manas.Tech.
Manas.Tech is a software company from Buenos Aires, Argentina, that develops unconventional tech projects for people around the world. And, after being involved in Crystal's development for a while, I can assure you there are not that many conventional things in developing a programming language!
Crystal is a programming language that aims to be friendly for both humans and computers alike - make developers enjoy writing code, and make code run as efficiently as it can. Statically typed, compiled language with a really heavy type inference to make it feel as scripting - the best of both worlds. And did I say it's open source?
Its first commit has just turned 5, and it has changed from an individual's hobby back then into an amazing language supported by Manas.Tech and an amazing community. To celebrate that, we are doing this AMA. Starting today, at 2PM EST, we'll do our best to share with you everything we know about the project, life, the universe, and everything!
So - don't be shy, ask us anything!
Top comments (106)
Go (GC), Rust (ownership model) and Swift (ARC) have different strategies for handling parallelism and memory management. Node and the Javascript community have been promoting immutability and functional programming.
Can you discuss Crystal's approach to solving this problem and some of the advantages/pitfalls that we may encounter using it?
I don't see the GC going away. It could change the which GC is used though.
Regarding parallelism, currently, something that could happen is to go something more like Ruby's Guild and do runtime checks. And it would be great to have some built in constructs for some well-known patterns.
Doing runtime would add some overhead to the operations. That is something to try to minimize.
As I see it Crystal's goals is the type safety, type inference and syntax. I am not confident enough to innovate with something like rust ownership model. I still lack the rust experience I would like to compare that.
Could you tell me more about your community, your resources for it look incredibly robust. How did it grow in the many branches it is now ( reddit, chatroom, repo, etc) and how do you manage it? Also in hindsight how would you suggest a newbie go about creating a language and growing a community around a new lang go about it?
Hey community, if you're reading this:
Honestly, it just sort of happened. I think we never imagined Crystal would make it this far. It started as an experiment to see what compiled Ruby would look like. The next thing we knew there were a few people crazy enough to try it and report issues. One day someone posted it to Reddit and people got interested. Step by step.
From time to time someone from the community says "hey, it'd be cool to have X, would you mind if I do it?" and we're like "Yes, go for it!". Then if the thing picks up steam we link it from the official site. I think that happened with reddit, the chatroom, gitter, etc.
For example, recently a group of crystallers joined forces and created github.com/crystal-lang-tools to tackle all editor support projects under the same umbrella. They let us know and we transferred our Sublime plugin. That's great because we currently have more on our plates than we can manage!
Thanks for sharing the organic nature of this sounds super fun. Would you say that Crystal is beginner friendly regarding Open Source Contributions?
It definitely is! We are a small yet really friendly community which is always open for everyone.
Please feel free to join our Gitter channel gitter.im/crystal-lang/crystal :)
Thanks Serdar, will do. I've been looking for a friendly Open Source community to get involved with.
"a few people crazy enough" that makes big difference :)
selamlar abi , abi senin haberin var mi bunlar ne zaman windows ichin bir shey'ler yapacaklar ? ya ELIXIR teamiyle koshushtuk bize buyuk destek oldular ve baazi ishlerimizi elixir'le yaptik amma bunlara ne kadar email falan atiyorum konushuyorum hich bir shey soylemiyorlar ve belli ki 2025 ancak bunlar windows ichin bir sheyler verir ! windows 10 da kullana bilmiyoruz ve bu beni childiriyor ! benim bildighim kadar sen KEMAL'i yazansin sende luft et bunlardan bir konush sor ne zaman bunlar windows ichin bir shey yapacak ?
I don't think a single person could handle all the community channels and communications.
There are some of us (in the whole community) that are more skilled and eager to share, curate and prepare content.
For a management perspective he have some hooks into Slack to avoid constant querying all the channels. But that is the smallest part.
First we have a website, some docs people and read, then we added the mailing list as a way to users reach us and start conversating (besides from github). But then IRC emerged and @jhass created a service to cross post to Gitter. A Slack was also created, but IRC+Gitter worked better for here.
Some people like to spend and collaborate there a lot in the chat <3
I think that constant conversation & sharing in that channel is important to a community. Yet, is not always easy. Serdar and Matias do great job in the community nowadays #Kudos.
An online playground and a share code service (even a basic one) is agreat resource.
As with any open source project there is a challenge (and joy) in trusting people with who you will be able to delegate and even share resposibilities.
Tips: Start little by little. Do something is useful for you. Be patient.
Thank you Brian :) I'm just trying my best to share how awesome Crystal is with everyone!
Thanks that's great advice!
I imagine adoption isn't just about the technical details and Crystal has a really slick presence. How do you approach the branding/marketing elements of the whole thing? Like, who's job is this, how often do you meet about these kinds of things, etc.
Apart from Crystal, at Manas.Tech we've been working on end-to-end projects for the last ~15 years. So we have some Graphics and Interaction designers we're very proud of in the team :). They designed the logo, fonts, branding, website and, yes, they programmed the famous spinning logo from scratch ;).
And they did a spectacular job
Has crystal approached any larger companies for support / backing ?
Yes, Manas.Tech, as host of Crystal, is approaching a few companies that are interested in seeing a 1.0 release for support. It's part of our plan to speed up that timeline.
Feel free to share the word if you know of any other one that could be interested in supporting!
Did the name of the language come from "gee, what's a gemstone that starts with the letter C?"
It was more "gee, what's a gemstone that would make for a good file extension?" cr sounded kind of nice and... we don't like to bike shed on this sorts of things too much :P, so it ended up being Crystal.
Haha nice! Totally a fan of good file extensions.
As someone who just knows Ruby, how would you recommend learning Crystal? Is there some knowledge of C that would help a lot in order to learn Crystal?
As a Rubyist, you're good to go. I wrote a small book titled "Crystal for Rubyists" it's free and you can read it online :)
crystalforrubyists.com/book/index....
Rather than some knowledge of C the biggest initial gap would be to work with value types (stored in stack), using some mandatory type annotations and working with generics for containers like Arrays, Hashes, etc.
Any experience in a statically typed language could be useful: C, C#, Java.
But if you just want to have an experience learning Crystal itself it could help to fill the gaps in some areas to allow others with similar backgrounds.
As someone who just knows Ruby you're probably already an intermediate Crystal programmer :). You can actually leverage one of the defects of the official docs: they sometimes assume you know Ruby to some extent. So you should be good to go with: crystal-lang.org/docs/
Recently we published some introductory videos with the folks at Daily Drip: dailydrip.com/topics/crystal
And for more hardcore materials you can download the slides and code examples from the CodeCamp we hosted at San Francisco this past May: codecamp.crystal-lang.org/Crystal-...
What was the biggest obstacle you had to overcome when creating Crystal?
When creating a new language you have tons of things to think about.
Knowing and being able to focusing on the right ones is the hardest I would say.
From "this feature would be so cool, I would love to use it" to "fix the stylesheet here or there" you have the whole spectrum of ideas, tasks and research. And sometimes the right ones are not the more entretaining ones :-)
A language is easier to toy around at the beginner and when the time goes by the decisions are sometimes harder because consensus is somewhat needed, compatibility is expected, etc.
Brian will post a technical perspective on this, but I wanted to offer a non-technical one. My perception of the team's biggest stumbling situations had to do with our own natural self-criticism. The classic mentality when tackling these sort of problems is "if this could be done, someone would have already done it". The easiest way to disarm those fears is to approach the problem with a humble but curious frame and to just follow the path to see where it leads.
How do you determine how closely to align with Ruby?
In the beginning, there was some idea to be Ruby-compatible. But, as always - you start developing your idea, and things change. We found there were concepts/patterns that didn't fit that well because of the differences between the languages (type system, mainly), and we found opportunities to do things in a way that we liked better than Ruby - so we did it.
I personally love Ary's talk at Øredev 2016 - I didn't even know some of those programming languages that actually are an influence in Crystal! Ruby's influence is the easiest to see, because of the syntax, but you can see Go's concurrency model, Swift's non-nilable types, you-name-it.
So, in a nutshell - "joy". We align as closely with Ruby as we feel it's wise to - just like with the other languages 🙃
Could you give us some insights, visions and facts of the road of Crystal towards v 1.0 ? Such as:
This is not to be critical, we want Crystal to succeed.
We have spent some time putting together an estimate for what’s pending for a 1.0 release that we could be proud of, an it comes to about 1.400 additional hours. At a pace of 2x the monthly hours we are currently covering with donations (~54hs) that means another extra 14 months which is way longer than what we want. We are trying to rally some other sponsors to shorten that time; it's looking positive for now, but we need a few more weeks to provide another update on that.
Parallelization is one of the main efforts for 1.0. We managed to run the multi-threading sieve of Eratosthenes sample with reasonable results on Linux and poor results in OS X.
Windows port is advancing thanks to the extended community, can't comment much else on that.
I wouldn't want Windows support to block 1.0! I think it would be important to get feature complete with 1.0, which, in turn, will expand the interest and base for Windows support.
Agreed. It's not blocking 1.0.
Glad to hear that!
What are the most practical applications of crystal at the moment? We're a Ruby/Rails shop that could probably jump in and be comfortable using it quickly, but I don't immediately have a practical use case in mind. What's a good place to start making it a worthwhile environment to jump in to?
I've been using Crystal for microservices/REST APIs in the last two months. It actually fits pretty well with those kinds of applications. The code ended up smaller and more well structured than the Node.js version, and it actually runs 2x-5x faster, depending on the endpoint complexity.
AFAIK there are also some folks working on more complex stuff such as machine-learning and game engines using Crystal, so its probably a good contender for those tasks too.
Cool, that could definitely be interesting.
You can use Kemal for building APIs and microservices. It's simple and fast. If you've ever used Sinatra before you'll feel right at home :)
P.S: I'm the author of Kemal.
Kemal is awesome! Makes creating services very easy! :) Kudos good sir!
Compilers and command line tools are for sure good fits. But we have also create bots (slack / twilio / telegram), some other microservices and small web apps with some UI.
Comparing to Rails, there is for sure a lot things to cover. ORM and a smooth assets management would be my top 2 things that I would like to see solved / documented and avoid reinventing the wheel in order to start participating more in the web apps market.
Depending on your interest crystal could be good enough for game dev, using c libs in a more friendly way, and data science.