<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: aw1621107</title><link>https://news.ycombinator.com/user?id=aw1621107</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 15 Oct 2026 00:47:20 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=aw1621107" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by aw1621107 in "11 year old unsoundness bugs found in Rust borrow checker"]]></title><description><![CDATA[
<p>> but given these bugs, Java blows Rust away in memory safety.<p>It's not like Java is immune to memory safety-related implementation bugs either (e.g., [0]):<p>> A resource area allocated object is probably passed/used outside of the scope of the corresponding ResourceMark (similar to JDK-8325672).<p>So "blows Rust away in memory safety" doesn't seem quite supported enough?<p>[0]: <a href="https://bugs.openjdk.org/browse/JDK-8336095" rel="nofollow">https://bugs.openjdk.org/browse/JDK-8336095</a></p>
]]></description><pubDate>Wed, 14 Oct 2026 06:56:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=50083483</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50083483</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50083483</guid></item><item><title><![CDATA[New comment by aw1621107 in "11 year old unsoundness bugs found in Rust borrow checker"]]></title><description><![CDATA[
<p>> Given the type declarations it's "obvious" it should not compile as it directly contradicts the types 'static lifetime. You don't deliberately write code that doesn't compile.<p>You don't need 'static to trigger the bug [0]<p>[0]: <a href="https://github.com/rust-lang/rust/issues/164250#issuecomment-6142409734" rel="nofollow">https://github.com/rust-lang/rust/issues/164250#issuecomment...</a></p>
]]></description><pubDate>Wed, 14 Oct 2026 06:48:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=50083398</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50083398</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50083398</guid></item><item><title><![CDATA[New comment by aw1621107 in "11 year old unsoundness bugs found in Rust borrow checker"]]></title><description><![CDATA[
<p>> however the ability to leak memory is pretty demonstrable, no?<p>This bug wouldn't be nearly as interesting if it "just" resulted in a memory leak. Memory leaks aren't considered unsafe in Rust because they can't result in UB in the same way as e.g., OOB writes. In fact, there are APIs accessible in safe Rust which <i>explicitly</i> leak memory! [0]<p>This bug is effectively a use-after-free, which is <i>definitely</i> something that the Rust compiler should catch.<p>> Would be cool to see clippy pick up on this bug in older versions!<p>No need for that. A future version of the Rust compiler that incorporates a fix should reject the incorrect code, so all you'd need to do is compile older code with that new compiler.<p>[0]: <a href="https://doc.rust-lang.org/std/mem/fn.forget.html" rel="nofollow">https://doc.rust-lang.org/std/mem/fn.forget.html</a></p>
]]></description><pubDate>Wed, 14 Oct 2026 06:42:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=50083340</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50083340</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50083340</guid></item><item><title><![CDATA[New comment by aw1621107 in "11 year old unsoundness bugs found in Rust borrow checker"]]></title><description><![CDATA[
<p>> In fact, C is even safer, because it actually does have a specification that lists all the invariants that the programmer has to uphold themselves because the compiler doesn't check them.<p>The difference is that the C spec intentionally frees the compiler from upholding those invariants. In this case the Rust compiler is failing to catch something it is required to catch.<p>A more accurate analogy would be a C compiler incorrectly failing to reject an assignment through a pointer to const without a cast. The spec requires that such a thing be rejected, so it's a compiler bug.</p>
]]></description><pubDate>Tue, 13 Oct 2026 18:07:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=50076016</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50076016</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50076016</guid></item><item><title><![CDATA[New comment by aw1621107 in "C for Rust programmers"]]></title><description><![CDATA[
<p>Yeah, it's one of those things that is not exactly intuitive if you didn't already know about it. The menagerie of other byte-ish-sized types added in recent versions of C and C++ probably doesn't help either.<p>Bit of a (not so?) fun fact: char* being a universal alias can lead to some potentially unexpected slowdowns [0], especially if the char* bit is behind a typedef.<p>[0]: <a href="https://travisdowns.github.io/blog/2019/08/26/vector-inc.html" rel="nofollow">https://travisdowns.github.io/blog/2019/08/26/vector-inc.htm...</a></p>
]]></description><pubDate>Sun, 11 Oct 2026 05:35:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=50040099</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50040099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50040099</guid></item><item><title><![CDATA[New comment by aw1621107 in "C for Rust programmers"]]></title><description><![CDATA[
<p>> The linked-to essay points out that char is only "at least 8 bits", and links to <a href="https://cppreference.com/c/language/arithmetic_types" rel="nofollow">https://cppreference.com/c/language/arithmetic_types</a> which confirms that point.<p>Yes, but in C standardese a "byte" is not necessarily the 8 bits that it's normally thought to be these days. From C89 Section 2.2.4.2 Numerical Limits [-1]:<p>> maximum number of bits for smallest object that is not a bit-field (byte) CHAR_BIT 8<p>i.e., CHAR_BIT is the number of bits in a byte. C23 has a similar definition, and further defines CHAR_WIDTH that is defined to expand to the same value as CHAR_BIT.<p>> So I don't believe your statement "sizeof(char) is guaranteed to always be 1" is correct.<p>From C89 section 3.3.3.4 The sizeof operator [0]:<p>> When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1.<p>This wording remains basically identical through C23 [1].<p>> Where does the spec say that a char* can be used to address any point in an object?<p>From C89 section 3.3 Expressions:<p>> An object shall have its stored value accessed only by an lvalue that has one of the following types:<p>> <snip><p>> * a character type.<p>This also remains the case up through C23.<p>I think you're thinking of the strict aliasing rule with your example, but character types are one of the exceptions to said rule so I think your example is actually fully defined. It'd be UB if you casted to an incompatible type like a float, I believe.<p>[-1]: <a href="https://port70.net/%7Ensz/c/c89/c89-draft.html#2.2.4.2" rel="nofollow">https://port70.net/%7Ensz/c/c89/c89-draft.html#2.2.4.2</a><p>[0]: <a href="https://port70.net/%7Ensz/c/c89/c89-draft.html#3.3.3.4" rel="nofollow">https://port70.net/%7Ensz/c/c89/c89-draft.html#3.3.3.4</a><p>[1]: <a href="https://port70.net/%7Ensz/c/c23/n3220.html#6.5.4.4" rel="nofollow">https://port70.net/%7Ensz/c/c23/n3220.html#6.5.4.4</a><p>[2]: <a href="https://port70.net/%7Ensz/c/c89/c89-draft.html#3.3" rel="nofollow">https://port70.net/%7Ensz/c/c89/c89-draft.html#3.3</a><p>[3]: <a href="https://port70.net/%7Ensz/c/c23/n3220.html#6.5.1" rel="nofollow">https://port70.net/%7Ensz/c/c23/n3220.html#6.5.1</a></p>
]]></description><pubDate>Sat, 10 Oct 2026 22:01:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=50037626</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50037626</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50037626</guid></item><item><title><![CDATA[New comment by aw1621107 in "C for Rust programmers"]]></title><description><![CDATA[
<p>> I've never been on a system where sizeof(char) != 1<p>And you never will, since sizeof(char) is guaranteed to always be 1.<p>I'm guessing you were thinking of CHAR_BIT != 8, but even then I'm not sure it would make a difference since malloc takes its argument size in bytes and a char more or less is a byte in C.<p>(Consider that char*s are also how you access the byte-level representation of objects in C. If chars were not the minimum addressable unit then that use wouldn't work)</p>
]]></description><pubDate>Sat, 10 Oct 2026 19:13:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=50036134</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50036134</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50036134</guid></item><item><title><![CDATA[New comment by aw1621107 in "C for Rust programmers"]]></title><description><![CDATA[
<p>What would you have preferred the devs work on instead?</p>
]]></description><pubDate>Sat, 10 Oct 2026 18:29:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=50035709</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50035709</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50035709</guid></item><item><title><![CDATA[New comment by aw1621107 in "C for Rust programmers"]]></title><description><![CDATA[
<p>> And then it often turns out that Rust is not memory safe in practice. <a href="https://news.ycombinator.com/item?id=49697392">https://news.ycombinator.com/item?id=49697392</a><p>For what it's worth, in that <i>specific</i> instance there's no memory safety issue since Rust is guaranteed to crash on stack overflow on Ubuntu (and probably other supported Linux distros)</p>
]]></description><pubDate>Sat, 10 Oct 2026 18:28:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=50035701</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50035701</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50035701</guid></item><item><title><![CDATA[New comment by aw1621107 in "Reducing undefined behavior in the C language"]]></title><description><![CDATA[
<p>IIRC Filip said that Fil-C can be modified fairly easily to catch those overflows, but that breaks a fair bit of C code.</p>
]]></description><pubDate>Fri, 09 Oct 2026 07:13:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=50017121</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50017121</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50017121</guid></item><item><title><![CDATA[New comment by aw1621107 in "Show HN: Quake ported to safe Rust, playable in browser"]]></title><description><![CDATA[
<p>Rust doesn't check for integer overflow in release builds <i>by default</i> (ignoring the explicitly-checked methods, of course). At least when building with Cargo whoever builds the binary sets overflow behavior.</p>
]]></description><pubDate>Fri, 09 Oct 2026 07:10:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=50017100</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50017100</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50017100</guid></item><item><title><![CDATA[New comment by aw1621107 in "Reducing undefined behavior in the C language"]]></title><description><![CDATA[
<p>In the case of C++ initialization is (currently) only done for automatic variables, so you're not likely to be zero-initializing multiple megabytes of stack. There's also [[indeterminate]] for opting out of initialization, though that has to be done per variable.</p>
]]></description><pubDate>Fri, 09 Oct 2026 06:57:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=50016991</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=50016991</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50016991</guid></item><item><title><![CDATA[New comment by aw1621107 in "Rust's derive often implies inline"]]></title><description><![CDATA[
<p>For what it's worth, according to the PR that added the annotation [0] doing so generally resulted in decreases in compile times and binary sizes on benchmarks. Furthermore, an additional experiment that avoided emitting the inline attribute on structs with >5 fields resulted in benchmark regressions compared to always emitting the attribute [1]. I'd guess this is one of those things which may help in aggregate but hurts for specific cases.<p>That being said, one of the Rust devs indicated in the corresponding lobste.rs discussion [2] that they're open to revisiting/rebalancing things if they get enough bug reports indicating something is up, so it might not hurt to tag onto the bug report the author will (hopefully) eventually submit.<p>[0]: <a href="https://github.com/rust-lang/rust/pull/117727" rel="nofollow">https://github.com/rust-lang/rust/pull/117727</a><p>[1]: <a href="https://github.com/rust-lang/rust/pull/118031" rel="nofollow">https://github.com/rust-lang/rust/pull/118031</a><p>[2]: <a href="https://lobste.rs/s/dldhpw/rust_s_derive_often_implies_inline" rel="nofollow">https://lobste.rs/s/dldhpw/rust_s_derive_often_implies_inlin...</a></p>
]]></description><pubDate>Wed, 07 Oct 2026 13:19:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=49992415</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=49992415</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49992415</guid></item><item><title><![CDATA[New comment by aw1621107 in "Emitting metadata early makes building/checking Rust up to twice as fast"]]></title><description><![CDATA[
<p>The commenter there is the OP, for what it's worth</p>
]]></description><pubDate>Sun, 04 Oct 2026 17:15:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=49955788</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=49955788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49955788</guid></item><item><title><![CDATA[The complement of true is true, except when it's false]]></title><description><![CDATA[
<p>Article URL: <a href="https://dryperspective.github.io/posts/complement-of-true/">https://dryperspective.github.io/posts/complement-of-true/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49953344">https://news.ycombinator.com/item?id=49953344</a></p>
<p>Points: 77</p>
<p># Comments: 28</p>
]]></description><pubDate>Sun, 04 Oct 2026 12:28:55 +0000</pubDate><link>https://dryperspective.github.io/posts/complement-of-true/</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=49953344</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49953344</guid></item><item><title><![CDATA[New comment by aw1621107 in "Vinix – A modern operating system written in V"]]></title><description><![CDATA[
<p>> The screenshot appears to be nothing to get repeatedly weird about.<p>> The picture given looks like Minecraft.<p>That is because you're looking at the picture <i>now</i>, after it has been fixed.</p>
]]></description><pubDate>Wed, 30 Sep 2026 12:08:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=49907728</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=49907728</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49907728</guid></item><item><title><![CDATA[New comment by aw1621107 in "Writing Efficient C++ Code (2013)"]]></title><description><![CDATA[
<p>I think that's basically clarifying the conditions under which C++11-style moves can be performed.</p>
]]></description><pubDate>Sun, 27 Sep 2026 18:30:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=49869432</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=49869432</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49869432</guid></item><item><title><![CDATA[New comment by aw1621107 in "Writing Efficient C++ Code (2013)"]]></title><description><![CDATA[
<p>The closest thing I can think of is trivial relocation [0] which matches the bitwise copy + no destructor on moved-from bits of Rust's moves, but that was only added to the draft for C++26 and was removed late in the process anyways [1].<p>[0]: <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2786r13.html" rel="nofollow">https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p27...</a><p>[1]: <a href="https://herbsutter.com/2025/11/10/trip-report-november-2025-iso-c-standards-meeting-kona-usa/" rel="nofollow">https://herbsutter.com/2025/11/10/trip-report-november-2025-...</a></p>
]]></description><pubDate>Sun, 27 Sep 2026 18:29:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=49869421</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=49869421</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49869421</guid></item><item><title><![CDATA[New comment by aw1621107 in "Platform-independent SIMD in Go"]]></title><description><![CDATA[
<p>> I define undefined behaviour as a bug in C++. Now C++ is memory-safe!<p>I mean, sure, insofar as such a thing would also imply that a) the standard would need quite a bit of cleanup/clarification work to not contradict your definition, and b) the main optimizing C++ compilers are miscompiling code, analogous to how cve-rs is a rustc miscompilation rather than an issue with Rust itself.<p>(Fil-C might be an interesting exception here, though IIRC its definition of memory safety is slightly different)</p>
]]></description><pubDate>Fri, 25 Sep 2026 19:03:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=49848565</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=49848565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49848565</guid></item><item><title><![CDATA[New comment by aw1621107 in "Platform-independent SIMD in Go"]]></title><description><![CDATA[
<p>> Isn't ten years enough to call something a feature of the language rather than a bug?<p>I suppose it depends on who is doing the classifying? From the developer's standpoint I'd imagine intent is all that matters: a bug is something that does not match developer intent and that is (eventually) expected to be changed to match the intent, while a feature is something that does match developer intent regardless of how old/new it is. From a user's standpoint I'd imagine it's a combination of developer intent and the user's reliance on said behavior, but IIRC in this particular case there's no known non-demo code that has organically run into this particular bug so there's little weight in favor of calling the bug a feature despite the devs' stance.<p>Also as GP said I think one needs to be careful to distinguish between the compiler and the language. IIRC the devs have known for basically this entire time exactly in what manner the Rust compiler fail to implement the rules of Rust the language, but a general fix has been blocked on long-running projects that have only recently been approaching the finish line [1].<p>[0]: <a href="https://news.ycombinator.com/item?id=40431444">https://news.ycombinator.com/item?id=40431444</a><p>[1]: <a href="https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/" rel="nofollow">https://blog.rust-lang.org/2026/08/21/enabling-next-solver-o...</a></p>
]]></description><pubDate>Fri, 25 Sep 2026 18:50:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=49848430</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=49848430</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49848430</guid></item></channel></rss>