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!
Oldest comments (106)
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
What's the relationship between Crystal and Manas.Tech?
Manas.Tech is the company where Crystal was born and one of the main contributors. We are leading the core team and trying to build a community and supporter network strong enough to carry this effort forward.
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.
Glad to hear 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.
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.
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!
In the shortest steps possible, how does one go about creating a new programming language?
That's at least for a compiled language. Steps 4 and 5 would be replaced with an interpreter.
There are plenty of tutorials on the web on how to write you own language. What I always like to say is that a language is just a tool like "ls", "cat", or any application you develop: you take some input, analyze it and produce some output.
The tricky parts are:
That's at least the technical part of it. The community part is a whole world of its own, tackling issues and PRs, and I'd say it's even more challenging (but also rewarding!) than developing the language itself :-)
Wow, one of the best answers I've ever heard about creating a programming language :) Thanks Ary!
Yeah, loved it!
In the Manas.Tech team there are around 5 or 6 devs pretty involved, but their dedication fluctuates. We try to spend at least 2 or 3 times the amount of hours funded by through Bountysource, but some months we accumulate budget in order to have longer sprints. On top of that there are 3 other core team members outside Manas.Tech that spend time depending on their personal circumstances. The same goes for the larger community.
The main non-technical challenge right now is finding a sustainable way to fund (at least partially) the effort to complete 1.0. You can help by spreading the word and/or chipping in.
The main technical goals for 1.0 are multi-threading, better debugging tools, modules and generics.
How many people are there in the core team? What does the core team think about the biggest hurdles before 1.0?
dev.to/crystal-lang/we-created-the...
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.
How important is compilation time to the team? My biggest worry is that speeds will become unbearably slow as a project gets bigger and bigger. What are your thoughts on this. Is it possible to make things faster, maybe via incremental compilation?
I love using Crystal. Thanks for all the hard work!
It is very important, and one of the reasons we slowed down development. Our main concern is to get to a point where we know whether we'll have to make any breaking changes to the language to keep compilation times at a satisfactory level. That question is quite hard to answer without a formal specification of the language, but then again formal specification of the language is by itself a huge endeavor.
The good news is we haven't explored the solution space, we're confident that we can make it.
About incremental compilation, I'm not sure to what extent that will be possible without some "big change" to the language. Right now the "type inference magic" of Crystal depends on knowing all the source code ahead of time, and that makes it difficult to identify proper compilation units.
Thanks for the reply. I'm glad to hear it's a priority and that you're being careful about the language :+thumbsup:
You could look at what Rust is doing with incremental compilation. They do type inference in a similar way (though less insane) and they've been working on getting incremental compilation for a few years now.
We do a look a lot at Rust, not only regarding incremental compilation. We really like how they organized the community, for example. And given they also use LLVM, we sometimes can leverage some of their findings, tooling or advances, so if there's any member of the Rust team seeing this: thank you for being a source of inspiration :).
I wonder if requiring all public api (input params and return types of every public method) of a file to be typed would allow incremental compilation. In that case, you could add a switch to the compiler to warn you of any typing required to allow incremental compilation. That way, if you want to speed up compilation, you could add the required type. Is it feasible?