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...<p>ANYWHO, I didn't come here to malign the author. I came here to ask a question.<p>( 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 )<p>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.<p>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.<p>I'm currently tore between three languages: Rust, Reasonml, and Scala<p>They have the following requirements:<p>- EXCELLENT type system
- Functional
- Productive
- Portable<p>My goal is to write GUI applications that help me design my board games.<p>* Scala<p>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.<p>Additionally, the story for writing GUI applications for Java isn't as slick as web technologies.<p>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.<p>Scala is not much of a departure from my previous languages, so I fear I wouldn't learn much.<p>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.<p>* Reasonml<p>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.<p>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.<p>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.<p>Reason has a language server implementation that hooks up to my Emacs config quite nicely, so I'm efficient in my development environment.<p>Reason uses OCaml's type system, which has 25 years of development and is extremely effective.<p>Reason has a compiler. After working with dynamic languages for so long, I have learned to love my compiler.<p>Reason is designed for productive Javascript interop, so I have access to the gigantic nodejs ecosystem.<p>The humans who are d<p>Reason ticks a LOT of my boxes, but it has some warts:<p>- 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?<p>* Rust<p>Rust is the language I WANT to learn and use, but I am hesitant for a number of reasons.<p>I want to learn rust because:<p>- 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.<p>I'm hesitant because:<p>- 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.