I've been working full time with Rust this year for web development using postgres. The language and ecosystem have largely been sufficient for creating a robust platform. I have been working with the latest version of stable Rust all year and have never experienced breaking changes. Working with futures was unnecessarily difficult. Async/await is releasing next year, hopefully in Q1. This will simplify future asyncio development and make it much more legible, but regretfully trivializes hard work of the past. Aside from asyncio, though, my work doesn't seem vulnerable to future language improvements.
I strongly recommend anyone who is waiting for the right time to jump in, to not hesitate any further. By the time you have a handle on the language, the new and improved asyncio will be at your disposal in the stable version of the compiler.
https://rcoh.me/posts/rust-linked-list-basically-impossible/
A few times you are not so lucky and have an actual need that Rust makes harder. Those exist, like in any other language, and I'd be happy if I knew how to avoid them.
If you fight GC in Java then you have same troubles: all this stuff like weak pointers, byte array storages, reflection, etc, etc... If you are trying to write imperatively in haskell... And so on. If you fight language ideas, then your code becomes more complicated. The answer here is that you shouldn't have to do it often.
I also did the same puzzle with Go, it was such a breeze, it is as easy as to implement a doubly linked list in python/ruby/$yourfavoritescriptlanguage. But I start to dig Rust as it makes me think more and it feels like an eye opening experience.
I'm really looking forward to building something bigger with it in 2019. I don't know what it'll be yet, but it was such a satisfying experience working with a low-level language (which I haven't done in 15 years, or so), and having it be really pleasant. I think it's impossible to overstate how important having a good way to easily install libraries/modules/whatever is, and Cargo gets it right in ways that few systems languages ever have (that I'm aware of, anyway).
Can you elaborate on that? ("gets it right")
I started using some of the async/await syntax using https://github.com/alexcrichton/futures-await about 6 months ago. I had much problems with understanding the compiler errors because async functions were created using macros, and the compiler was not going a very good job at showing the errors (Or maybe I was missing some information about how to do this).
However, if you are willing to work with nightly Rust, you will be able to start using Futures 0.3 with async and await!. Using the async and await! syntax gave me such a huge boost to productivity that I am willing to walk on the edge and use the alpha version with nightly Rust (futures-preview = "0.3.0-alpha.10").
The integration with things like clocks and networking (The things you get from Tokio) are not yet perfect, but there is a compatibility layer you can use that works reasonably well. There is also the Romio project (https://github.com/withoutboats/romio) as an attempt to make a minimal Tokio that works with the new Futures syntax. I recently saw this post by jsdw, it might help you get started: https://jsdw.me/posts/rust-asyncawait-preview/
I already wrote large amounts of code using Futures 0.3 with async/await for the offst project (https://github.com/freedomlayer/offst). A very simple example you can start with is the Timer module, providing time ticks over channels to other parts of the system. It's code is pretty self contained and shows what could be achieved with the new async/await syntax. You can find it here: https://github.com/freedomlayer/offst/blob/master/components...
I am trying to create a scalable platform. Without having best practices to learn from, I had to discover what that required while trying to make the most of Rust. The discovery process involves many iterations of trying approaches out until a decent one emerges.
On the other hand, once I laid the tracks down, I found my usual hindrances to productivity: business logic and data modeling.
I am much more productive with Rust and raw SQL parameter binding than Python with SQLAlchemy query builder. Evidently, the costs associated with using an orm are greater than the benefits for someone who is fluent in SQL. Learning a dsl and then fighting the dsl and then asking for help repeatedly, just to accomplish the same task and no more, is a really bad use of time.
Mostly looking at react and redux for inspiration, as they try to champion unidirectional data flow. In theory, would let me avoid std::RefCell hell that I read about in the forums.