loading...
Cover image for We created the Crystal language, ask us anything!
Crystal Language

We created the Crystal language, ask us anything!

matiasgarciaisaia profile image Matías García Isaía with Brian J. Cardiff and Martin VerzilliUpdated on ・1 min read

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!

Discussion

pic
Editor guide
Collapse
drujensen profile image
Dru Jensen

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?

Collapse
bcardiff profile image
Brian J. Cardiff Ask Me Anything

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.

Collapse
ben profile image
Ben Halpern

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.

Collapse
mverzilli profile image
Martin Verzilli Ask Me Anything

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 ;).

Collapse
watzon profile image
Chris Watson

And they did a spectacular job

Collapse
niko profile image
Niko 👩🏾‍💻

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?

Collapse
mverzilli profile image
Martin Verzilli Ask Me Anything

Hey community, if you're reading this:

  1. You're awesome, thank you!
  2. Feel free to chime in.

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!

Collapse
niko profile image
Niko 👩🏾‍💻

Thanks for sharing the organic nature of this sounds super fun. Would you say that Crystal is beginner friendly regarding Open Source Contributions?

Thread Thread
sdogruyol profile image
Serdar Dogruyol

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 :)

Thread Thread
niko profile image
Niko 👩🏾‍💻

Thanks Serdar, will do. I've been looking for a friendly Open Source community to get involved with.

Collapse
sdogruyol profile image
Serdar Dogruyol

"a few people crazy enough" that makes big difference :)

Thread Thread
mortezakcode profile image
morteza jahangard

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 ?

Collapse
bcardiff profile image
Brian J. Cardiff Ask Me Anything

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.

Collapse
sdogruyol profile image
Serdar Dogruyol

Thank you Brian :) I'm just trying my best to share how awesome Crystal is with everyone!

Collapse
niko profile image
Niko 👩🏾‍💻

Thanks that's great advice!

Collapse
fridgerator profile image
Nick Franken

Has crystal approached any larger companies for support / backing ?

Collapse
nditada profile image
Nico

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.

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

Feel free to share the word if you know of any other one that could be interested in supporting!

Collapse
maestromac profile image
Mac Siri

In the shortest steps possible, how does one go about creating a new programming language?

Collapse
asterite profile image
Ary Borenszweig
  1. Create a repository
  2. Start with a very basic language, with very few features (maybe only support numbers)
  3. Write a lexer, parser and AST for it
  4. Write semantic analysis over the AST
  5. Turn the AST into executable code (this is relatively easy if you use LLVM)

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:

  • Ending up with a language you like, but others like too
  • Ending up with a consistent language (this is really hard)
  • Thinking about all the language pieces at the same time

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 :-)

Collapse
sdogruyol profile image
Serdar Dogruyol

Wow, one of the best answers I've ever heard about creating a programming language :) Thanks Ary!

Thread Thread
ben profile image
Ben Halpern

Yeah, loved it!

Collapse
andy profile image
Andy Zhao (he/him)

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?

Collapse
sdogruyol profile image
Serdar Dogruyol

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

Collapse
bcardiff profile image
Brian J. Cardiff Ask Me Anything

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.

Collapse
mverzilli profile image
Martin Verzilli Ask Me Anything

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

Collapse
andy profile image
Andy Zhao (he/him)

Did the name of the language come from "gee, what's a gemstone that starts with the letter C?"

Collapse
mverzilli profile image
Martin Verzilli Ask Me Anything

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.

Collapse
andy profile image
Andy Zhao (he/him)

Haha nice! Totally a fan of good file extensions.

Collapse
rapidnerd profile image
George Marr

What was the biggest obstacle you had to overcome when creating Crystal?

Collapse
bcardiff profile image
Brian J. Cardiff Ask Me Anything

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.

Collapse
nditada profile image
Nico

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.

Collapse
jgaskins profile image
Jamie Gaskins

How do you determine how closely to align with Ruby?

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

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 🙃

Collapse
ivobalbaert profile image
ibalbaert

Could you give us some insights, visions and facts of the road of Crystal towards v 1.0 ? Such as:

  • what is the current view on the timeline?
  • what is the state of parallellization?
  • how is the Windows port going, what are the problems?

This is not to be critical, we want Crystal to succeed.

Collapse
nditada profile image
Nico

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.

Collapse
dougeverly profile image
Doug

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.

Thread Thread
nditada profile image
Nico

Agreed. It's not blocking 1.0.

Thread Thread
faustinoaq profile image
Faustino Aguilar

I want Windows support, but I agree with Doug. I think after 1.0, more people will join to Crystal community and do Windows port easier.

Collapse
ivobalbaert profile image
ibalbaert

Glad to hear that!

Collapse
ben profile image
Ben Halpern

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?

Collapse
kazzkiq profile image
Claudio Holanda

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.

Collapse
ben profile image
Ben Halpern

Cool, that could definitely be interesting.

Collapse
sdogruyol profile image
Serdar Dogruyol

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.

Thread Thread
jvarness profile image
Jake Varness

Kemal is awesome! Makes creating services very easy! :) Kudos good sir!

Collapse
bcardiff profile image
Brian J. Cardiff Ask Me Anything

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.

Collapse
faustinoaq profile image
Faustino Aguilar

For something like rails you can use Amber - amberframework.org/

For games you can use CrSFML - github.com/oprypin/crsfml

Other useful usecases and tools you can found here veelenga.github.io/awesome-crystal/

Collapse
megatux profile image
Cristian Molina

What language/s do you consider the one to beat?
What language do you consider the most similar to Crystal?

Do you consider the current GC algorithm good enough for v.1.0 ?

Do you consider web dev as the bigger use case or do you have other scenarios like native app-dev, games, IoT, etc as main use cases?

Collapse
asterite profile image
Ary Borenszweig

Excellent questions!

I don't think we want to beat other languages. We actually use other languages and love them all, like Ruby, Elixir and Go. With Crystal we try to provide an alternative that's fun to work with and performant when possible, but that of course depends on everyone's preferences (some like Ruby's syntax, others don't). We actually encourage others to combine Crystal with other languages.

It's hard to find other languages that are similar to Crystal. I'd say the syntax is very close to Ruby, the runtime maybe a mix of Ruby and Go (but just a bit), and since we have value types we are maybe similar to C#, D and Swift. And we have multiple dispatch, which Julia also has, so there's a similarity too. We use LLVM as a backend, which Rust and Julia do too. As you can see, we get inspiration from many, many languages.

I think the GC algorithm might be good enough for v1.0. Versions past 1.0 will be all about improving the performance and fixing potential bugs, while retaining backwards compatibility. For example Go improves their GC each time in every version, so maybe the one in 1.0 wasn't that good (if you compare it to the current one ;-)).

I'd personally love to see Crystal being used in other contexts than web apps. For example I'm a big fan of videogames, I play them every day, and I'm super happy when I see others creating games in Crystal (BlaXpirit is probably the one leading this effort).

Collapse
mverzilli profile image
Martin Verzilli Ask Me Anything

Manas.Tech is full of language geeks, and as such we don't like to frame Crystal's growth in terms of beating X language. We prefer to take inspiration from them, and think there's room in the world for everyone. Do The Beatles beat The Rolling Stones or vice-versa? I don't want to pick, I want to listen to them both!

Crystal will be appropriate in some contexts, and its syntax and philosophy might resonate better with you than other languages in those cases, then you'll use it.

As far as similarities go, I see it being most comparable to Go, Ruby, Python in different aspects or contexts.

The current GC is out of the box, and does a surprisingly good job for now. We might need to tweak it or write one from scratch if we stumble upon any limitations while getting to support parallelism; we still don't know.

Collapse
sdogruyol profile image
Serdar Dogruyol

I've some high scale APIs running for more than 1 year without any restarts and there's no memory leak at all. I can easily say that the current GC (Boehm GC) is pretty good enough.

Collapse
ragmaanir profile image
Ragmaanir
  • How many people are working on crystal? How much time do they spend?
  • What are in your opinion currently the biggest problems with crystal?
  • How can others support the project?
  • What are the next three big obstacles you want to tackle / goals to achieve?
Collapse
nditada profile image
Nico

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.

Collapse
vegai profile image
Vesa Kaihlavirta

How many people are there in the core team? What does the core team think about the biggest hurdles before 1.0?

Collapse
nditada profile image
Collapse
jess profile image
Jess Lee (she/her)

What's the relationship between Crystal and Manas.Tech?

Collapse
nditada profile image
Nico

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.

Collapse
ba7a7chy profile image
Bar Hofesh

How does it feel to have companies already using Crystal in production while it's in such an early stage ? (Officially, as technically we all know it's prod ready ;) haha )

Collapse
nditada profile image
Nico

Proud and with a sense of healthy responsibility :-). We've had conversations with a number of those companies and the positive feedback is super helpful at this stage. In general, knowing that what we are building is solving a real need is always nice.

Collapse
paulcsmith profile image
Paul Smith

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!

Collapse
mverzilli profile image
Martin Verzilli Ask Me Anything

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.

Collapse
tbodt profile image
tbodt

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.

Thread Thread
mverzilli profile image
Martin Verzilli Ask Me Anything

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 :).

Thread Thread
faustinoaq profile image
Faustino Aguilar

I like how Crystal community is learning from other languages, not just Ruby :)

Collapse
paulcsmith profile image
Paul Smith

Thanks for the reply. I'm glad to hear it's a priority and that you're being careful about the language :+thumbsup:

Collapse
opensas profile image
opensas

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?

Collapse
jwoertink profile image
Jeremy Woertink

In the PullRequests for the repo, there's a lot of PRs that have passed the travis build, and been reviewed and accepted. Is there anyone that goes through all of these PRs to either merge them, or reject them? Someone to do housekeeping on the PRs?

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

We try and review&merge the PRs whenever we can, but we have to decide between investing our energies on that versus developing other features or tasks for the project.

We love having all those PRs and community engagement, but it's our responsibility to prevent lots of little steps in the form of PRs from diverting the path we want the project to pursue.

So there are PRs hanging there because we didn't find time to merge them, but also because we want to have a more general view of the underlaying issues, and come up with a global solution to that - instead of adding a bunch of patches for special cases.

There's a great talk called Hammock Driven Development, by Clojure's Rich Hickey that explains this concept way better than me.

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

Re-reading the whole thing, if there's a PR with green CI + two core members' approvals, it should be merged. So, if you happen to find one that isn't - please ping us, because it's a mistake :)

Thread Thread
jwoertink profile image
Jeremy Woertink

Ok, that makes sense. I'll keep an eye out for any of those. Maybe that will help clean up some PRs.

Collapse
jwoertink profile image
Jeremy Woertink

There's things I'd like to contribute to the language, but some are some serious undertaking. What's the best way to know what features are more likely to be merged without having to spend weeks implementing something that could potentially just be rejected?

Collapse
mverzilli profile image
Martin Verzilli Ask Me Anything

The best you can do is propose the feature or enhancement and allow some time for discussions and points of view to mature. Then we have an "status:accepted" label that we use to signal that if you tackle this as it's been discussed, we'll merge it.

Collapse
jwoertink profile image
Jeremy Woertink

Ah, ok. That makes sense. So make an issue with a proposed feature, wait for it to be accepted, then tackle a PR. I think this would be a great flow for everyone to follow. Thanks!

Thread Thread
sdogruyol profile image
Serdar Dogruyol

I think we should document this flow in official Crystal wiki :)

Thread Thread
faustinoaq profile image
Faustino Aguilar

I think the same :)

Collapse
bcardiff profile image
Brian J. Cardiff Ask Me Anything

If it's a reported bug/enhancement, I would say to first discuss in the issue how it could be solved.
It might seems like an extra work other than coding, but is a way to avoid doing all the coding work that might not be merged.

We do value the efforts off everybody but sometimes is more that just writing code what is needed. Making decisions sometimes requires other kind of mindset, attention and time.

Collapse
sdogruyol profile image
Serdar Dogruyol

Crystal needs your feedback to get better, for anyone reading this please take our 2017 State of Crystal Survey :)

Collapse
sdogruyol profile image
Serdar Dogruyol

Do you plan to organize a CrystalConf with the release of 1.0 or before?

Collapse
elorest profile image
Isaac Sloan

Crystal Conf would be super exciting and I would try very hard to be there.

Collapse
jgaskins profile image
Jamie Gaskins

What is the team's vision for parallelism in Crystal? Do you intend actors to be fully parallelized?

Collapse
faustinoaq profile image
Faustino Aguilar

I think parallelism in Crystal is the main goal before 1.0

See: dev.to/crystal-lang/we-created-the...

Also: github.com/crystal-lang/crystal/wi...

Collapse
mr_sportsgeek profile image
Mr. Sports Geek

Crystal Conf would be totally exciting if it were true. I would do anything to make it happen.

TurboBuyer

Collapse
mortezakcode profile image
morteza jahangard

I will die of waiting. Please release the version of Windows.
i work for iran goverment and i develop weather Station apps
no body here like me understand data loggers and i want to force our team to use CRYSTAL in production but because of havnt windows version they don't accept
the day i be happy is the day you release windows version . cause of many reasons we cant use windows 10 bash and i should wait for you :((

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

I hope you don't literally die because of this - that's not any of the language goals, for sure.

Windows support is definitely on the list of Things We Want To Do™, but it's not there yet. As we always repeat - instead of dying, you can try getting yourself involved in the efforts (there's been a couple of trials at this, you can ask on the forum for guidance if needed), and/or help the fundraising so the team can devote more time to develop Crystal itself and, at some point in time, Windows support specifically.

Good luck with the project!

Collapse
val_baca profile image
Valentin Baca

Are there any plans (or hesitations) about extending into areas other than backend servers where binary efficiency and ease of expressiveness matters?

For example, embedded or IoT?

Collapse
faustinoaq profile image
Faustino Aguilar

I also think Crystal would be very useful at IoT level.

Some useful links:

You can also use an empty prelude and implement your own standard library , write inline assembly executing low level code and binding C code.

Some benefits are faster compilation times and smaller binaries.

If you use a empty prelude the only disadvantage is no access to the standard library, but you still can use C bindings.

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

I think we're still trying to learn all the different use cases in which Crystal may be an awesome match, but I'm not that sure that's something you can plan - I feel it's a bit ecosystem-driven.

One awesome use case for Crystal that isn't that explored yet is all the command line tools made in Ruby (I'm thinking about fastlane, CocoaPods, Vagrant, Chef, you-name-it) that don't have to do with Ruby code. There's a great boost in performance if you run a command and you don't have to load the whole interpreter + parse + interpret live for a shortly-lived process - that, if you run it again, will go through the same overhead once again.

IoT and embedded systems are things we have on radar, but we still haven't found how that will play with the fact of being a GCed language, for example.

But you can toy with it as Faustino here says, and let us know how the language could fit your use cases better!

Collapse
faustinoaq profile image
Faustino Aguilar

Why blog page shows wrong date?

blog

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

Cause we haven't fixed that bug!

It's a statically-built site, but we don't rebuild it daily - so that post is from the day before the last build. Just a bug we have to fix.

Collapse
tonyvince profile image
Tony Vincent T.Y

What are some typical use cases of crystal lang?

Collapse
faustinoaq profile image
Collapse
faustinoaq profile image
Faustino Aguilar

Anything you don't like about Crystal?

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

We try to build the language we like to use, but of course there are always things that can be improved.

I think most of the things I can say I "don't like" about it as a user are due to the language not being "finished" yet - and that's why we haven't hit 1.0. Current compilation times are higher than what they could, parallelism and Windows support aren't here yet, debugging...

I kind of suffered when we made it mandatory to declare an instance variable's type instead of allowing it to be inferred, but it was a really well thought decision, and I think it's the correct one - even if it hurts a bit on programmer's happiness.

But I don't see anything I really dislike about the language we think we'll come up with for 1.0 -
we'll have to check then how it went 🙂

Collapse
bcardiff profile image
Brian J. Cardiff Ask Me Anything

Some things that bugs me a little bit in the language are:

  1. the lack of variance in generics.
  2. that some types can be expressed thanks to macros but not in the grammar (difference / substraction of types)
  3. that / should always be float division (instead of depending on the receiver/argument types).
  4. that the grammar type can't be blend with the language grammar.

So I am pretty happy with the language :-)

From the ecosystem, there are some stories to be improved in dependency management and development tools.

Collapse
elorest profile image
Isaac Sloan

Is an obsidian icosagon the official logo/stone for crystal. Will this ever change?

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

There was a time in which we had a different crystal on each release. Then we realised we needed to build "a brand", and settled on the current icosahedron.

I won't say "we're never going to change it" - but it's not on our plans for now.

Collapse
nditada profile image
Nico

Actually, it's an icosahedron (an icosagon is a polygon). We don't have plans of changing it :-)

Collapse
kazzkiq profile image
Claudio Holanda

Please, don't. It's beautiful. :-)

Collapse
stewartjarod profile image
Jarod Stewart

What packages / core libraries are highly sought after?

Collapse
matiasgarciaisaia profile image
Matías García Isaía Ask Me Anything

There's a community-driven repo to track libraries that are wanted - that's a nice place to start looking for!

You can also jump into any of the community channels to ask for more ideas 👍