# Crystal in 2020

**URL:** <https://forum.crystal-lang.org/t/crystal-in-2020/1566>\
**Category:** News\
**Created:** [December 31, 2019, 3:03pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566 "2019-12-31T15:03:30Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![j8r](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/j8r/32/111_2.png) [@j8r](https://forum.crystal-lang.org/u/j8r)\
**Post date:** [December 31, 2019, 3:03pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/1 "2019-12-31T15:03:30Z")

</div>

First of all, happy new year everyone “Crystallers”!

2019 was a great year, and we all wish the best for the language and the community in the following year!

What do you like about 2019 and what’s your hopes for the next year?

- The most important parts that were improved
- The biggest lacks that remains to be done

Note: It is a long time we didn’t have a little survey, this would be a perfect time for this 😃

---

<div class="post-metadata">

**Author:** ![rishav.sharan](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/rishav.sharan/32/1323_2.png) [@rishav.sharan](https://forum.crystal-lang.org/u/rishav.sharan)\
**Post date:** [December 31, 2019, 3:10pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/2 "2019-12-31T15:10:02Z")

</div>

> What do you like about 2019

We made some headway on Windows support.

> and what’s your hopes for the next year?

Full Windows support.

> - The most important parts that were improved

Windows support

> - The biggest lacks that remains to be done

Windows support

😁

---

<div class="post-metadata">

**Author:** ![Farhad](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/farhad/32/676_2.png) [@Farhad](https://forum.crystal-lang.org/u/Farhad)\
**Post date:** [December 31, 2019, 4:24pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/3 "2019-12-31T16:24:46Z")

</div>

Interfaces maybe? I think this is one of the most important feature of every static typed lang. Yeah I know Crystal isn’t full static typed but it could be better to have interfaces

---

<div class="post-metadata">

**Author:** ![GaryMiller](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/garymiller/32/759_2.png) [@GaryMiller](https://forum.crystal-lang.org/u/GaryMiller)\
**Post date:** [December 31, 2019, 4:35pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/4 "2019-12-31T16:35:02Z")

</div>

What headway was made?

---

<div class="post-metadata">

**Author:** ![girng\_github](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/girng_github/32/571_2.png) [@girng\_github](https://forum.crystal-lang.org/u/girng_github)\
**Post date:** [December 31, 2019, 7:50pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/5 "2019-12-31T19:50:08Z")

</div>

A love2d like game framework but with Crystal on Windows. Bind imgui (or a pure c gui library) and SDL, and you’ve got a beast of a framework to utilize. However, particle systems, and other complex functionality might be a PITA, and probably not enough use cases to justify dev time.

I love Godot so much, it’s such a joy to use (especially the `AnimationPlayer`), but if I could code with Crystal on the client and target Windows and Linux… it would be like something from out of this world. Not only for me, but people who love Ruby/Crystal’s syntax and want to make games. Not only games, but performant desktop apps as well.

Lua is amazing and love2d is already a powerhouse, but I swear, Crystal’s OOP and syntax is a perfect fit for game programming. Unless there are performance issues I’m not aware of, I think it could be huge.

With all this said, take my post with a grain of salt, I have no idea what I’m talking about anymore.

---

<div class="post-metadata">

**Author:** ![straight-shoota](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/straight-shoota/32/36_2.png) [@straight-shoota](https://forum.crystal-lang.org/u/straight-shoota)\
**Post date:** [December 31, 2019, 8:17pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/6 "2019-12-31T20:17:55Z")

</div>

Crystal already has interfaces, they’re just called `module`. Or do you mean something else?

---

<div class="post-metadata">

**Author:** ![Farhad](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/farhad/32/676_2.png) [@Farhad](https://forum.crystal-lang.org/u/Farhad)\
**Post date:** [December 31, 2019, 10:12pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/7 "2019-12-31T22:12:54Z")

</div>

I meant real interface like we have on java or typescript :D

Something like

interface IWrite  
write(str : String)  
end  
Etc

---

<div class="post-metadata">

**Author:** ![Hentioe](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/hentioe/32/722_2.png) [@Hentioe](https://forum.crystal-lang.org/u/Hentioe)\
**Post date:** [December 31, 2019, 10:19pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/8 "2019-12-31T22:19:52Z")

</div>

- Reduce extra dependencies in the standard library
- Feature/Syntax enhancements, such as support for Ruby-like pattern matching
- The entire community is working together to promote the development of a Web/ORM framework, having a killer framework for the internet is great for language promotion. Just like Elixir and Phonenix/Ecto
- Better build tools to support custom tasks
- Better multi-threaded parallel scheduling (intelligent allocation of fibers based on thread load)
- A REPL

---

<div class="post-metadata">

**Author:** ![straight-shoota](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/straight-shoota/32/36_2.png) [@straight-shoota](https://forum.crystal-lang.org/u/straight-shoota)\
**Post date:** [January 1, 2020, 12:00am UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/9 "2020-01-01T00:00:22Z")

</div>

How’s that any different?

```auto
module Write
  abstract def write(str : String)
end

```

---

<div class="post-metadata">

**Author:** ![watsy0007](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/watsy0007/32/671_2.png) [@watsy0007](https://forum.crystal-lang.org/u/watsy0007)\
**Post date:** [January 2, 2020, 1:37pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/10 "2020-01-02T13:37:09Z")

</div>

intellij ide support.

---

<div class="post-metadata">

**Author:** ![jwoertink](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/jwoertink/32/50_2.png) [@jwoertink](https://forum.crystal-lang.org/u/jwoertink)\
**Post date:** [January 5, 2020, 11:56pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/12 "2020-01-05T23:56:06Z")

</div>

Main thing I’d like to see is the backlog getting cleaned up. There’s many PRs that are started and then just left dead. I’ll see 2 core member approvals, but so much time passes that things become out of date, or concepts and goals change. I think revisiting some of the oldest issues and seeing some “spring cleaning” as far as prioritizing, labeling, closing, or merging those would be great.

To help the community with these, having someone in charge of housekeeping might be nice. A simple tag added to PRs that says “this concept is good, just needs to be finished”. Then just closing out PRs that aren’t viable.

(and windows support, of course).

---

<div class="post-metadata">

**Author:** ![betelgeuse](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/betelgeuse/32/564_2.png) [@betelgeuse](https://forum.crystal-lang.org/u/betelgeuse)\
**Post date:** [January 6, 2020, 3:48pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/13 "2020-01-06T15:48:36Z")

</div>

My only hope is that the Crystal team is able to maintain the pace in 2020 and beyond. 🤩

I understand the appeal of native windows (desktop) support, but I’m also pretty happy being able to use Crystal from Windows 10 WSL (windows subsystem linux). On Debian and using the apt repo it takes literally about 30 seconds to install and start using.

Happy New Year

---

<div class="post-metadata">

**Author:** ![mavu](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/mavu/32/213_2.png) [@mavu](https://forum.crystal-lang.org/u/mavu)\
**Post date:** [January 6, 2020, 10:24pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/14 "2020-01-06T22:24:23Z")

</div>

Most liked in the current: Awesome standard library, incredibly helpful community.  
future wishes: Simple gui toolkit, cross platform if at all possible.

---

<div class="post-metadata">

**Author:** ![asterite](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/asterite/32/60_2.png) [@asterite](https://forum.crystal-lang.org/u/asterite)\
**Post date:** [January 7, 2020, 1:16pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/15 "2020-01-07T13:16:27Z")

</div>

Wanted in 2020 for me: require type annotations in all method signatures, introduce an `import` system, allow the compiler to compile single files on their own (modular compilation), remove enum autocasting, let `case` be exhaustive, remove `Symbol` type, remove splats and double splats (or make them use Array behind the scene, not Tuple), remove NamedTuple, introduce interfaces, remove macro run, macro finished, macro hooks and macro type introspection.

---

<div class="post-metadata">

**Author:** ![vlazar](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/vlazar/32/31_2.png) [@vlazar](https://forum.crystal-lang.org/u/vlazar)\
**Post date:** [January 7, 2020, 2:07pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/16 "2020-01-07T14:07:03Z")

</div>

Can you elaborate a bit on `import` system? Is it about explicit imports or something it this vein? I had a thought that maybe explicit imports would make Crystal more… hm… usable. Sure, we have private types so situation with module/class names is a bit better than in Ruby, but not by much.

---

<div class="post-metadata">

**Author:** ![asterite](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/asterite/32/60_2.png) [@asterite](https://forum.crystal-lang.org/u/asterite)\
**Post date:** [January 7, 2020, 2:43pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/17 "2020-01-07T14:43:41Z")

</div>

> [@vlazar](#):
>
> Can you elaborate a bit on `import` system?

No

---

<div class="post-metadata">

**Author:** ![bew](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/bew/32/113_2.png) [@bew](https://forum.crystal-lang.org/u/bew)\
**Post date:** [January 7, 2020, 9:44pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/18 "2020-01-07T21:44:15Z")

</div>

> [@asterite](#):
>
> require type annotations in all method signatures, introduce an `import` system, allow the compiler to compile single files on their own (modular compilation), remove enum autocasting, let `case` be exhaustive, remove `Symbol` type, remove splats and double splats (or make them use Array behind the scene, not Tuple), remove NamedTuple, introduce interfaces, remove macro run, macro finished, macro hooks and macro type introspection.

Interesting… I’ll just write a few things that come to mind, feel free to reply or not

> introduce an `import` system

This good I think, very much wanted on my side!

> allow the compiler to compile single files on their own (modular compilation)

This is going to be great, but maybe not at file level… I think it would be better at shard-level or “package” level (whatever that is) similar to golang

> let `case` be exhaustive  
> remove `Symbol` type

YES!!!

> require type annotations in all method signature

Yes? would be interesting to see how that plays out!

> remove splats and double splats (or make them use Array behind the scene, not Tuple)

Oh god… please no (removal or using Array instead) This is likely to generate a lot of discussion if you really intend to to that

> remove NamedTuple

I’d be interested to know why…

> remove macro run, macro finished, macro hooks and macro type introspection

These macro crazyness are such a wonderful things in Crystal, this would be pretty bad to remove them I think…  
I agree there’s a lot of corner cases and things that are hard to work with, but I believe we could improve the implementation of macros in general and maybe restrict this crazyness to be used in very specific stages of the compilation so that is enables safer/predictable/modular-compilation-compatible crazy modifications of the types… (discussion to be continued I guess!)

---

<div class="post-metadata">

**Author:** ![yxhuvud](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/yxhuvud/32/27_2.png) [@yxhuvud](https://forum.crystal-lang.org/u/yxhuvud)\
**Post date:** [January 8, 2020, 3:03pm UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/19 "2020-01-08T15:03:01Z")

</div>

What I want for 2020? Progress in the structured concurrency github issue, and with that, the deprecation of the `spawn` keyword.

---

<div class="post-metadata">

**Author:** ![stakach](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/stakach/32/58_2.png) [@stakach](https://forum.crystal-lang.org/u/stakach)\
**Post date:** [January 9, 2020, 1:14am UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/20 "2020-01-09T01:14:08Z")

</div>

> [@asterite](#):
>
> require type annotations in all method signatures

I feel like this would remove a major feature of crystal, especially when generics are involved.  
If I want to combine two Enumerables I don’t care if that’s an Array of Strings and a Set of Strings or Array of Int32s and an Array of Int32s. The compiler deals with that complexity.  
Macros and type inspection are also super useful.

In fact all of the things we’ve built with crystal would not work without those two features and would drag crystal a lot closer to being a slightly more pretty version of C++, way less productive than Ruby which we’ve moved from.

In my opinion the current type system and compile time introspection hits the perfect balance and is what makes the language amazing. Please don’t break this.

---

<div class="post-metadata">

**Author:** ![alexeypetrushin](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/alexeypetrushin/32/492_2.png) [@alexeypetrushin](https://forum.crystal-lang.org/u/alexeypetrushin)\
**Post date:** [January 9, 2020, 2:42am UTC](https://forum.crystal-lang.org/t/crystal-in-2020/1566/21 "2020-01-09T02:42:40Z")

</div>

> [@stakach](#):
>
> > require type annotations in all method signatures
> 
> I feel like this would remove a major feature of crystal, especially when generics are involved.  
> If I want to combine two Enumerables I don’t care if that’s an Array of Strings and a Set of Strings or Array of Int32s and an Array of Int32s.

Maybe it could it be like that?

```auto
def combine(a : Enumerable(A), b : Enumerable(B)) : Array({A, B}) forall A, B

```

[Next page](https://forum.crystal-lang.org/t/crystal-in-2020/1566.md?page=2)
