<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: btrask</title><link>https://news.ycombinator.com/user?id=btrask</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 06 Apr 2026 08:42:27 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=btrask" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by btrask in ".NET 6 vs .NET 5 speedup"]]></title><description><![CDATA[
<p>I might be the last person to realize this, but did Microsoft name it .NET because they already had COM?</p>
]]></description><pubDate>Sun, 21 Nov 2021 13:59:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=29296255</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=29296255</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29296255</guid></item><item><title><![CDATA[New comment by btrask in "Willingness to look stupid"]]></title><description><![CDATA[
<p>This article does not undermine its own point. In fact, very, very few articles <i>ever</i> undermine their own point. In order to undermine your own point it means you've failed to construct a logical chain of thought. But that is what people do all the time in their daily lives. Maybe children would undermine their own points, or someone posting their first ill-thought comment on Facebook. But I think most people will learn how to construct an argument by their second time publishing one.<p>In this case, the article is not about 'the joys of being too dumb to breathe'. It's about how 1. looking stupid is not the same as being stupid, and 2. looking stupid can be beneficial in the long run. The author does not need to actually be stupid once in order to support this idea.<p>And I have to worry if you think he's "bragging" about merely <i>looking</i> stupid, as if that weren't bad enough. Maybe if you identify as stupid I could understand the offense.<p>To the author, Dan Luu: I like your article and I think you're on the right track!</p>
]]></description><pubDate>Thu, 21 Oct 2021 12:59:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=28943756</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=28943756</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28943756</guid></item><item><title><![CDATA[New comment by btrask in "Curl is C (2017)"]]></title><description><![CDATA[
<p>I didn't like Regehr's proposal because I don't want a friendly dialect of C. I mostly just want C the way it worked up until, say, GCC 4.x.<p>I don't know specifically how to fix the standard, although I've been thinking about it. A simple idea would be like the Linux mandate "don't break userspace." The language-lawyering has to stop, and more rules are unlikely to help.</p>
]]></description><pubDate>Thu, 18 Feb 2021 22:13:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=26186441</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=26186441</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26186441</guid></item><item><title><![CDATA[New comment by btrask in "Curl is C (2017)"]]></title><description><![CDATA[
<p>Or... the standard just has bugs which could be fixed. Bugs meaning: being out of line with the history of C and large amounts of C code in the wild.<p>The more people beat the standard drum, the worse things will get until the standard itself is fixed.<p>Other languages that don't have a standard don't have this problem (but they do have other problems).</p>
]]></description><pubDate>Thu, 18 Feb 2021 19:14:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=26184169</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=26184169</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26184169</guid></item><item><title><![CDATA[Tower of Babel]]></title><description><![CDATA[
<p>Article URL: <a href="https://en.wikipedia.org/wiki/Tower_of_Babel">https://en.wikipedia.org/wiki/Tower_of_Babel</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=26126632">https://news.ycombinator.com/item?id=26126632</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 13 Feb 2021 20:39:07 +0000</pubDate><link>https://en.wikipedia.org/wiki/Tower_of_Babel</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=26126632</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26126632</guid></item><item><title><![CDATA[New comment by btrask in "Defensive Programming"]]></title><description><![CDATA[
<p>Yeah, in C you need to use assertions (or simple checks) for things that might be null.<p>That said the compiler isn't infinitely smart (thank god) and complex null derefs will "safely" make it to runtime. (What a sad world we're in.)</p>
]]></description><pubDate>Thu, 24 Dec 2020 09:38:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=25526192</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25526192</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25526192</guid></item><item><title><![CDATA[New comment by btrask in "Defensive Programming"]]></title><description><![CDATA[
<p>If you are transferring ownership, you would do<p><pre><code>    p2 = p1; p1 = NULL;
</code></pre>
However if you are intentionally doing multiple ownership, then yes you can still have problems.</p>
]]></description><pubDate>Thu, 24 Dec 2020 09:16:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=25526115</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25526115</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25526115</guid></item><item><title><![CDATA[New comment by btrask in "Tokio 1.0 – async runtime for Rust"]]></title><description><![CDATA[
<p>Green threads.</p>
]]></description><pubDate>Wed, 23 Dec 2020 23:54:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=25523684</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25523684</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25523684</guid></item><item><title><![CDATA[New comment by btrask in "Tokio 1.0 – async runtime for Rust"]]></title><description><![CDATA[
<p>I see now, I misunderstood your original post. You were saying async/await is necessary because <i>futures</i> work badly, not because <i>all the alternatives</i> (i.e. locks) work badly.<p>Sorry, my mistake!<p>Edit to add: futures work badly in every language, so there's no shame in the borrow checker not working with them.<p>Edit 2: But in that case we're back to "why would Rust want async/await over (potentially green) threads with its first-class support for locks?"</p>
]]></description><pubDate>Wed, 23 Dec 2020 23:49:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=25523651</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25523651</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25523651</guid></item><item><title><![CDATA[New comment by btrask in "Tokio 1.0 – async runtime for Rust"]]></title><description><![CDATA[
<p>Whether it's kernel threads or green threads, the same patterns (locks, etc) are possible. Locks are supposed to be the borrow checker's bread and butter, because it can guarantee they are held before accessing shared state. But now you're saying "the borrow checker makes writing code without [async/await] difficult, inefficient, and unergonomic."<p>I'm not saying locks are better than async/await (although they are[1]). You're saying the borrow checker itself can't handle them in real world use?<p>[1] <a href="https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/" rel="nofollow">https://journal.stuffwithstuff.com/2015/02/01/what-color-is-...</a></p>
]]></description><pubDate>Wed, 23 Dec 2020 23:23:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=25523457</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25523457</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25523457</guid></item><item><title><![CDATA[New comment by btrask in "Tokio 1.0 – async runtime for Rust"]]></title><description><![CDATA[
<p>Wait, what? What happened to "fearless concurrency"? I thought this was supposed to be one of the borrow checker's selling points!<p><a href="https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html" rel="nofollow">https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.h...</a></p>
]]></description><pubDate>Wed, 23 Dec 2020 23:12:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=25523372</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25523372</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25523372</guid></item><item><title><![CDATA[New comment by btrask in "Ask HN: About Financial Inequity"]]></title><description><![CDATA[
<p>So over the last thousand years salt has been a hyper-inflationary asset, and you're trying to tell me I'm rich for owning some?</p>
]]></description><pubDate>Tue, 22 Dec 2020 17:02:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=25508442</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25508442</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25508442</guid></item><item><title><![CDATA[New comment by btrask in "Software Needs Philosophers (2006)"]]></title><description><![CDATA[
<p>This article is such a great opportunity for introspection ("what do we need in order to do better?"). It's too bad that the top comment has turned it into an opportunity for egotism ("they need us!").</p>
]]></description><pubDate>Mon, 14 Dec 2020 20:40:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=25422971</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25422971</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25422971</guid></item><item><title><![CDATA[New comment by btrask in "What is your favorite C programming trick? (2009)"]]></title><description><![CDATA[
<p>Very reasonable! Thank you for the discussion :)</p>
]]></description><pubDate>Tue, 24 Nov 2020 23:30:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=25204268</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25204268</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25204268</guid></item><item><title><![CDATA[New comment by btrask in "What is your favorite C programming trick? (2009)"]]></title><description><![CDATA[
<p>Taking a pointer-to-pointer is intentional to make it clear that the pointer will be modified. That's actually the most important difference from nn3's version IMHO.</p>
]]></description><pubDate>Mon, 23 Nov 2020 09:52:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=25185128</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25185128</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25185128</guid></item><item><title><![CDATA[New comment by btrask in "What is your favorite C programming trick? (2009)"]]></title><description><![CDATA[
<p>Good points, thank you for explaining!<p>I can see an argument for wrapping it in a macro so you can turn off nulling in debug builds (ASan might even have hooks so you can automate this, I know Valgrind does). But use-after-free is worse than just double-frees, and if you read a dangling pointer in production there's no real way to catch it AFAIK. Last I heard (admittedly been a few years since I checked), you're not supposed to deploy ASan builds because they actually increase the attack surface.<p>So, your program's memory is full of these dangling pointers, and at some point you <i>will</i> have a bug you didn't catch and use one. And you can't even write an assertion to check that it's valid. What do you propose?<p>And again to clarify, I'm not trying to advocate for hiding bugs. I want to catch them early (e.g. with assertions), but I also want to avoid reading garbage at runtime at all costs, because that's how programs get pwn'd.</p>
]]></description><pubDate>Mon, 23 Nov 2020 09:11:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=25184924</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25184924</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25184924</guid></item><item><title><![CDATA[New comment by btrask in "What is your favorite C programming trick? (2009)"]]></title><description><![CDATA[
<p>I tried making it a plain function at one point but ran into some weirdness around using void * * with certain arguments (const buffers?). You don't want to accept plain void * because it's too easy to pass a pointer instead of a pointer to a pointer. Using a macro is (ironically) more type safe.<p>Maybe someone else could figure out how to do it properly, since I'd definitely prefer a function.</p>
]]></description><pubDate>Mon, 23 Nov 2020 08:13:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=25184598</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25184598</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25184598</guid></item><item><title><![CDATA[New comment by btrask in "What is your favorite C programming trick? (2009)"]]></title><description><![CDATA[
<p>do {} while(0) is a common idiom for macros in C, because it consumes the trailing semicolon, which a bare {} block doesn't do.<p><pre><code>    if(x) MACRO();
    else something();
</code></pre>
expands to<p><pre><code>    if(x) { ... }; // Error!
    else something();</code></pre></p>
]]></description><pubDate>Mon, 23 Nov 2020 01:29:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=25182721</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25182721</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25182721</guid></item><item><title><![CDATA[New comment by btrask in "What is your favorite C programming trick? (2009)"]]></title><description><![CDATA[
<p>I appreciate you defending me, but I don't think he was trying to be dishonest.</p>
]]></description><pubDate>Sun, 22 Nov 2020 21:45:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=25181382</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25181382</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25181382</guid></item><item><title><![CDATA[New comment by btrask in "What is your favorite C programming trick? (2009)"]]></title><description><![CDATA[
<p>I don't think that's fair in this case because nulling out pointers isn't the first line of defense. If you forget to do it once, it's not going to cause a bug in and of itself. You can easily grep the code periodically to find any cases you missed.</p>
]]></description><pubDate>Sun, 22 Nov 2020 21:34:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=25181319</link><dc:creator>btrask</dc:creator><comments>https://news.ycombinator.com/item?id=25181319</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25181319</guid></item></channel></rss>