<story><title>How Rust Is Tilde’s Competitive Advantage [pdf]</title><url>https://www.rust-lang.org/pdfs/Rust-Tilde-Whitepaper.pdf</url></story><parent_chain><item><author>notheguyouthink</author><text>&amp;gt; Using a language for a large project without some kind of async&amp;#x2F;await notation seems painful. How bad is it using only combinators for async (assuming you want to stay on stable)? And is there a date yet when async&amp;#x2F;await will be stabilized?&lt;p&gt;Can someone explain to me what async&amp;#x2F;await is, in the context of a language like Go? I&amp;#x27;ve used Rust a fair amount, but Go has been my native language for ~5 years now.&lt;p&gt;With that said, aren&amp;#x27;t both languages synchronous languages where you can drop into another thread (or green thread) whenever you want?&lt;p&gt;What UX is improved by async&amp;#x2F;await?&lt;p&gt;Eg, in Go I never felt the need for async&amp;#x2F;await (as I&amp;#x27;ve used in JavaScript at least). If anything, Go&amp;#x27;s is &lt;i&gt;better&lt;/i&gt; than async&amp;#x2F;await to me, because if I call `foo := bar()`, I don&amp;#x27;t have to know if `bar()` is an asynchronous function.. it just works. Is there something missing there?&lt;p&gt;Again, I use Rust and Go similarly in this post because Go is my frame of reference. I &lt;i&gt;thought&lt;/i&gt; they were the same on this front, though. No?&lt;p&gt;What&amp;#x27;s missing here? What am I missing here?</text></item><item><author>Nelkins</author><text>So, I&amp;#x27;ve been eyeing Rust for a while and have messed around with it a bit in my free time.  Here are some things I&amp;#x27;d want to know before trying it out on a large project:&lt;p&gt;1. What development environment are other developers using with very large code bases?  Is the tooling responsive?&lt;p&gt;2. Using a language for a large project without some kind of async&amp;#x2F;await notation seems painful.  How bad is it using only combinators for async (assuming you want to stay on stable)?  And is there a date yet when async&amp;#x2F;await will be stabilized?&lt;p&gt;3. Most of the code I write is in F#.  The nice thing is, there is basically .NET library for everything under the sun.  For example, over the weekend I was looking for a library that could decode OBD-II data from a car, and with a quick DuckDuckGo search I was able to find three or four.  In a large-ish project, how often do Rust users typically find themselves coming up short for that kind of stuff?  Obviously it varies a ton by domain, but maybe someone could tell me whether the answer is &amp;quot;you&amp;#x27;ll probably write all wrappers for 3rd party APIs yourself&amp;quot; or &amp;quot;there&amp;#x27;s a decent chance there&amp;#x27;s a library out there that you can adapt.&amp;quot;</text></item></parent_chain><comment><author>steveklabnik</author><text>Yeah, you are missing some details. But this is a &lt;i&gt;huge&lt;/i&gt; area, and it&amp;#x27;s hard to explain in a single HN comment. Basically, yes, the convenience of not needing to write async&amp;#x2F;await is useful, but in order to accomplish that, you need a bunch of other supporting decisions. These decisions make sense for Go, but do not make sense for Rust.&lt;p&gt;The first thing to say on this topic is that virtually all of this (including async&amp;#x2F;await) is a library in Rust, not a part of the language. You can build whatever model you want on top. The one I&amp;#x27;m describing is the futures&amp;#x2F;tokio model, which is becoming the de-facto, default one. But if you want something else, you can do it! This already is a divergence from Go, where you have what the runtime gives you, and that&amp;#x27;s it.&lt;p&gt;Fundamentally, Go&amp;#x27;s model is cooperative coroutines, where the runtime does the pre-emption for you. (You can also call it yourself but as you note, this isn&amp;#x27;t usual.) It&amp;#x27;ll do this when you request something from the network, when you sleep, or when you use a channel.&lt;p&gt;Tokio&amp;#x27;s model, on the other hand, is single-threaded. Instead of a ton of gorutines, there&amp;#x27;s an event loop, and you place a chain of futures onto it. Each chain of futures can sort of be thought of as a goroutine, but it&amp;#x27;s also different. For example, Rust can know at compile time exactly how big each futures&amp;#x27; stack is, and so can do a single, exactly correct allocation. Anyway, each future in the chain handles yielding for you.&lt;p&gt;Async&amp;#x2F;await, in Rust, is about making those chains easier to write.&lt;p&gt;Anyway, I hope that helps. Maybe someone else will have a good comparison too. There&amp;#x27;s a &lt;i&gt;lot&lt;/i&gt; of options in this space, and similar terminology that means the same, but slightly different things, so it can be hard to get your head around.</text></comment>
<story><title>How Rust Is Tilde’s Competitive Advantage [pdf]</title><url>https://www.rust-lang.org/pdfs/Rust-Tilde-Whitepaper.pdf</url></story><parent_chain><item><author>notheguyouthink</author><text>&amp;gt; Using a language for a large project without some kind of async&amp;#x2F;await notation seems painful. How bad is it using only combinators for async (assuming you want to stay on stable)? And is there a date yet when async&amp;#x2F;await will be stabilized?&lt;p&gt;Can someone explain to me what async&amp;#x2F;await is, in the context of a language like Go? I&amp;#x27;ve used Rust a fair amount, but Go has been my native language for ~5 years now.&lt;p&gt;With that said, aren&amp;#x27;t both languages synchronous languages where you can drop into another thread (or green thread) whenever you want?&lt;p&gt;What UX is improved by async&amp;#x2F;await?&lt;p&gt;Eg, in Go I never felt the need for async&amp;#x2F;await (as I&amp;#x27;ve used in JavaScript at least). If anything, Go&amp;#x27;s is &lt;i&gt;better&lt;/i&gt; than async&amp;#x2F;await to me, because if I call `foo := bar()`, I don&amp;#x27;t have to know if `bar()` is an asynchronous function.. it just works. Is there something missing there?&lt;p&gt;Again, I use Rust and Go similarly in this post because Go is my frame of reference. I &lt;i&gt;thought&lt;/i&gt; they were the same on this front, though. No?&lt;p&gt;What&amp;#x27;s missing here? What am I missing here?</text></item><item><author>Nelkins</author><text>So, I&amp;#x27;ve been eyeing Rust for a while and have messed around with it a bit in my free time.  Here are some things I&amp;#x27;d want to know before trying it out on a large project:&lt;p&gt;1. What development environment are other developers using with very large code bases?  Is the tooling responsive?&lt;p&gt;2. Using a language for a large project without some kind of async&amp;#x2F;await notation seems painful.  How bad is it using only combinators for async (assuming you want to stay on stable)?  And is there a date yet when async&amp;#x2F;await will be stabilized?&lt;p&gt;3. Most of the code I write is in F#.  The nice thing is, there is basically .NET library for everything under the sun.  For example, over the weekend I was looking for a library that could decode OBD-II data from a car, and with a quick DuckDuckGo search I was able to find three or four.  In a large-ish project, how often do Rust users typically find themselves coming up short for that kind of stuff?  Obviously it varies a ton by domain, but maybe someone could tell me whether the answer is &amp;quot;you&amp;#x27;ll probably write all wrappers for 3rd party APIs yourself&amp;quot; or &amp;quot;there&amp;#x27;s a decent chance there&amp;#x27;s a library out there that you can adapt.&amp;quot;</text></item></parent_chain><comment><author>sagichmal</author><text>&amp;gt; Can someone explain to me what async&amp;#x2F;await is, in the context of a language like Go?&lt;p&gt;As far as I know:&lt;p&gt;&lt;pre&gt;&lt;code&gt;    c := make(chan int)
    go func() { c &amp;lt;- 1 }() &amp;#x2F;&amp;#x2F; async
    i := &amp;lt;-c               &amp;#x2F;&amp;#x2F; await&lt;/code&gt;&lt;/pre&gt;</text></comment>