<story><title>Thoughts on Rust bloat</title><url>https://raphlinus.github.io/rust/2019/08/21/rust-bloat.html</url></story><parent_chain><item><author>burntsushi</author><text>Opinions on this are a dime a dozen. You often see the reverse of it too, for example, you might have heard that &amp;quot;Python&amp;#x27;s standard library is where things go to die.&amp;quot; You could just as easily call that a &amp;quot;terrible error.&amp;quot; The fact that Python&amp;#x27;s standard library has an HTTP client in it, for example, doesn&amp;#x27;t stop everyone from using requests (and, consequently, urllib3) for all their HTTP client needs. So despite the fact the standard library provides a lot of the same &lt;i&gt;functionality&lt;/i&gt; as a third party dependency, folks are &lt;i&gt;still&lt;/i&gt; using the third party dependency.&lt;p&gt;I think the size of the standard library is just one of possibly many contributing factors that leads to a large number of dependencies. I think a part of it is culture, but another part of it is that the tooling _enables_ it. It&amp;#x27;s so incredibly easy to write some code, push it to crates.io and let everyone else use it. That&amp;#x27;s generally a good thing, but it winds up creating this spiral where there&amp;#x27;s almost no backpressure _against_ including a dependency in a project. This means there&amp;#x27;s very little standing in the way of letting the fullest expression of DRY run wild. There are some notable examples in the NPM ecosystem where it reaches ridiculous levels. But putting the extremes aside, there&amp;#x27;s a ton of grey area and it can be pretty difficult to convince someone to write a bit more code when something else might work off the shelf. (And I mean this in the most charitable way possible. I find myself in that situation.)&lt;p&gt;I do hope we can turn the Rust ecosystem around and stop regularly having dependency trees with hundreds of crates, but it&amp;#x27;s going to be a long and difficult road. For example, not everyone even agrees with my perspective that this is actually a bad thing.</text></item><item><author>ajxs</author><text>At the risk of being slightly tangential, I&amp;#x27;ve been sorely wanting to air this particular grievance with Rust for some time. It&amp;#x27;s somewhat related, since the author mentions their package system. Its package ecosystem isn&amp;#x27;t nearly in the horrible state that node&amp;#x27;s is, but having a package system shouldn&amp;#x27;t be a substitute for designing a useful standard library for a language. I think that the attraction to &amp;#x27;small languages&amp;#x27; is very much misplaced. If I can&amp;#x27;t get through Rust&amp;#x27;s official documentation without being recommended the use of third party packages for basic functionality (getopt, interfacing with static libraries... Etc) then the designers have made a terrible error.</text></item></parent_chain><comment><author>mantap</author><text>Python&amp;#x27;s standard library is where things go to die because of the terrible adhoc versioning system (the module name &lt;i&gt;is&lt;/i&gt; the version number) and dynamic typing means they are afraid to change anything. But even then it&amp;#x27;s still better than having no standard library at all.&lt;p&gt;The advantage of a standard library is that you only need to learn one API instead of a dozen different APIs for doing the same thing, which means you can develop a degree of mastery over it. It also reduces the friction for using better abstractions. e.g. Every professional Python programmer knows defaultdict, whereas I rarely see that data structure used in other programming languages, it&amp;#x27;s too much of a leap to install a dependency to save a few if statements, but it all adds up.</text></comment>
<story><title>Thoughts on Rust bloat</title><url>https://raphlinus.github.io/rust/2019/08/21/rust-bloat.html</url></story><parent_chain><item><author>burntsushi</author><text>Opinions on this are a dime a dozen. You often see the reverse of it too, for example, you might have heard that &amp;quot;Python&amp;#x27;s standard library is where things go to die.&amp;quot; You could just as easily call that a &amp;quot;terrible error.&amp;quot; The fact that Python&amp;#x27;s standard library has an HTTP client in it, for example, doesn&amp;#x27;t stop everyone from using requests (and, consequently, urllib3) for all their HTTP client needs. So despite the fact the standard library provides a lot of the same &lt;i&gt;functionality&lt;/i&gt; as a third party dependency, folks are &lt;i&gt;still&lt;/i&gt; using the third party dependency.&lt;p&gt;I think the size of the standard library is just one of possibly many contributing factors that leads to a large number of dependencies. I think a part of it is culture, but another part of it is that the tooling _enables_ it. It&amp;#x27;s so incredibly easy to write some code, push it to crates.io and let everyone else use it. That&amp;#x27;s generally a good thing, but it winds up creating this spiral where there&amp;#x27;s almost no backpressure _against_ including a dependency in a project. This means there&amp;#x27;s very little standing in the way of letting the fullest expression of DRY run wild. There are some notable examples in the NPM ecosystem where it reaches ridiculous levels. But putting the extremes aside, there&amp;#x27;s a ton of grey area and it can be pretty difficult to convince someone to write a bit more code when something else might work off the shelf. (And I mean this in the most charitable way possible. I find myself in that situation.)&lt;p&gt;I do hope we can turn the Rust ecosystem around and stop regularly having dependency trees with hundreds of crates, but it&amp;#x27;s going to be a long and difficult road. For example, not everyone even agrees with my perspective that this is actually a bad thing.</text></item><item><author>ajxs</author><text>At the risk of being slightly tangential, I&amp;#x27;ve been sorely wanting to air this particular grievance with Rust for some time. It&amp;#x27;s somewhat related, since the author mentions their package system. Its package ecosystem isn&amp;#x27;t nearly in the horrible state that node&amp;#x27;s is, but having a package system shouldn&amp;#x27;t be a substitute for designing a useful standard library for a language. I think that the attraction to &amp;#x27;small languages&amp;#x27; is very much misplaced. If I can&amp;#x27;t get through Rust&amp;#x27;s official documentation without being recommended the use of third party packages for basic functionality (getopt, interfacing with static libraries... Etc) then the designers have made a terrible error.</text></item></parent_chain><comment><author>raphlinus</author><text>In my post, I specifically call on proc-macro support (syn and quote) plus rand (not all of rand though, just the &amp;quot;give me a random number&amp;quot; functionality that comprises 99% of the use cases but 10% of the implementation complexity) to be added to the Rust standard library. But I feel these are particularly justified because they&amp;#x27;re already present, just not accessible. Overall, I think Rust&amp;#x27;s &amp;quot;batteries not included&amp;quot; approach is a good tradeoff.</text></comment>