I don’t think most people realize how difficult and time consuming it is to navigate the US immigration system. I certainly didn’t until I worked with a few people who were going through it and heard their stories.
Rajiv Prabhakar lays out his immigration story in all the nerve wracking detail:
It sounds surreal to even say it out loud, but I’ve been living in America for the majority of my life, ever since I was a teenager. And for 18 of those years, I was legally a transient – hopping from one temporary visa to another.
I wish the US would do better at this. So many hard working and talented people want to live here. It seems to me we should make it easier for them to do so.
Rust, at it’s core, is a programming language of restrictions. These restrictions exist for good reason. Upon encountering a restriction, however, it’s common to attempt to find the easiest work-around, rather than understanding the why the restriction exists in the first place.
Operating from the perspective of needless restrictions, Rust’s limitations become annoyances to memorize: don’t make that mutable here, box that async future there, make sure that trait is sized, etc.. If you take a step back, however, and look at questions surrounding the core principles of Rust—e.g. ‘what would it take to implement borrow checking?’ or ‘why does Rust’s async implementation require boxing so often?’—you’ll soon find that a lot of these restrictions are a natural consequences of the design of the language and its compiler.