I often dream about doing what the author is currently doing: Tooling around, writing software in a language I want to learn full-time. If I could get a patreon going...

ANYWHO, I didn't come here to malign the author. I came here to ask a question.

( For clarity, I'm an experience dev, computer science degree, been a developer full time for 6 years out of college and two years while in college )

I see a lot of discussion in here about developing GUIs in Rust. Writing native GUIs with Rust sounds awesome to me, and I'm drawn to it for the obvious benefits.

One of the things I want to do in 2018 is learn a new programming language. Last year I learned groovy, which is terrible, and Elixir, which is great and I highly recommend it.

I'm currently tore between three languages: Rust, Reasonml, and Scala

They have the following requirements:

- EXCELLENT type system
- Functional
- Productive
- Portable

My goal is to write GUI applications that help me design my board games.

* Scala

Scala has a nice type system, runs on the JVM so we get all of that sweet sweet Java interop, is functional with a mutable escape hatch, and is a "boring" language that is used extensively.

Additionally, the story for writing GUI applications for Java isn't as slick as web technologies.

Listen, I'm a millennial. We don't believe in anything. I don't mind opening up a web browser to interact with a graphical user interface, so languages with a better web technologies story is more attractive to me.

Scala is not much of a departure from my previous languages, so I fear I wouldn't learn much.

I already have Elixir for writing restful APIs and GoLang/Hugo for static sites, so Scala over-laps with these use cases making it less productive.

* Reasonml

Reasonml is a newer language from Facebook that compiles to the OCaml syntax tree, and then uses the OCaml compiler to produce the machine code.

Currently, Reason's only target is Javascript, but the community has already written a bunch of back-ends to have reason output to other formats.

There is a Facebook-developed React library called ReactReason, so targeting web technologies is Reasons JAM. A lot of Messenger.com has already been re-written using reason.

Reason has a language server implementation that hooks up to my Emacs config quite nicely, so I'm efficient in my development environment.

Reason uses OCaml's type system, which has 25 years of development and is extremely effective.

Reason has a compiler. After working with dynamic languages for so long, I have learned to love my compiler.

Reason is designed for productive Javascript interop, so I have access to the gigantic nodejs ecosystem.

The humans who are d

Reason ticks a LOT of my boxes, but it has some warts:

- Not a perfect story for async programming.
- Does not have a swagger-codegen back-end for stubbing out types based on my API docs.
- Special little snowflake language with a small community
- Really only good for front-end development
- Is the type system and other language primitives THAT MUCH BETTER than Typescript + ImmutableJS?

* Rust

Rust is the language I WANT to learn and use, but I am hesitant for a number of reasons.

I want to learn rust because:

- Aside from a teeny bit of C / C++ usage in college, I've not written in a low level language that requires me to think about garbage collection and I think it would be a useful exercise.
- It's extremely fast.
- It has some excellent concepts, like the borrow checker, that will expose me to new ways of programming.
- Will be nice to have a low-level language in my tool belt.
- Quickly growing community, a good opportunity to contribute FOSS.

I'm hesitant because:

- I'm concerned it doesn't fit my use case of writing GUIs.
- I want it to be a PRODUCTIVE langauge, and MAKE STUFF, not writing glue to get the stuff I want to work.