<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: Dr_Emann</title><link>https://news.ycombinator.com/user?id=Dr_Emann</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 13 May 2026 15:39:18 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Dr_Emann" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Dr_Emann in "Bugs Rust won't catch"]]></title><description><![CDATA[
<p>To be even fair-er, it wasn't actually memory unsafety, it was "just" unsoundness, there was a type, that IF you gave it an io reader implementation that was weird, that implementation could see uninit data, or expose uninit data elsewhere, but the only readers actually used were well behaved readers.</p>
]]></description><pubDate>Wed, 29 Apr 2026 06:20:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47944768</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=47944768</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47944768</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Upcoming Rust language features for kernel development"]]></title><description><![CDATA[
<p>Thats kinda the problem, there are concepts in rust that don't have equivalents in other common languages. In this case, rust's type system models data-race-safety: it prevents data races at compile time in a way unlike what you can do in c or c++. It will prevent getting mutable access (with a compile time error) to a value across threads unless that access is syncronized (atomics, locks, etc)</p>
]]></description><pubDate>Thu, 16 Oct 2025 13:44:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=45605267</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=45605267</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45605267</guid></item><item><title><![CDATA[New comment by Dr_Emann in "DARPA project for automated translation from C to Rust (2024)"]]></title><description><![CDATA[
<p>Rust has access control. Fields are private by default.</p>
]]></description><pubDate>Thu, 02 Oct 2025 01:38:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=45445577</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=45445577</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45445577</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Speeding up C++ code with template lambdas"]]></title><description><![CDATA[
<p>Wow the comments are.. Bad. Not all single instruction operations are the same.</p>
]]></description><pubDate>Sun, 16 Mar 2025 21:40:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=43382639</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=43382639</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43382639</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Asahi Linux lead developer Hector Martin resigns from Linux kernel"]]></title><description><![CDATA[
<p>"The common ground is that I have absolutely no interest in helping to spread a multi-language code base. I absolutely support using Rust in new codebase, but I do not at all in Linux." <a href="https://lwn.net/ml/all/20250204052916.GA28741@lst.de/" rel="nofollow">https://lwn.net/ml/all/20250204052916.GA28741@lst.de/</a><p>That doesn't sound like he's only talking about in his area to me</p>
]]></description><pubDate>Fri, 07 Feb 2025 13:36:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=42972351</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=42972351</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42972351</guid></item><item><title><![CDATA[Show HN: One Million Sliders]]></title><description><![CDATA[
<p>Inspired by onemillioncheckboxes.com, I made my own version, where everyone shares 1 million sliders, setting one to a value sets it for everyone.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40944633">https://news.ycombinator.com/item?id=40944633</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 12 Jul 2024 11:42:09 +0000</pubDate><link>https://onemillionsliders.com</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=40944633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40944633</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Mojo vs. Rust: is Mojo faster than Rust?"]]></title><description><![CDATA[
<p>Hi, I think even the remaining benchmark isn't showing what you're trying to show:<p><a href="https://rust.godbolt.org/z/r9rP6xohb" rel="nofollow">https://rust.godbolt.org/z/r9rP6xohb</a><p>Rust realizes the vector is never used, and so never does any allocation, or recursion, it just turns into a loop to count up to 999_999_999.<p>And some back of the napkin math says there's no way either benchmark is actually allocating anything. Even if malloc took 1 nanosecond (it _doesn't_), 999_999_999 nanoseconds is 0.999999999 seconds.<p>It _is_ somewhat surprising that rust doesn't realize the loop can be completely optimized away, like it does without the unused Vec, but this benchmark still isn't showing what you're trying to show.</p>
]]></description><pubDate>Thu, 15 Feb 2024 16:20:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=39384567</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=39384567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39384567</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Mojo vs. Rust: is Mojo faster than Rust?"]]></title><description><![CDATA[
<p>Rust optimizes factorial to be iterative, not using recursion (tail or otherwise) at all, and it turns `factorial(15, 1)` into `1307674368000`: <a href="https://rust.godbolt.org/z/bGrWfYKrP" rel="nofollow">https://rust.godbolt.org/z/bGrWfYKrP</a>. As has been pointed out a few times, you're benchmarking `criterion::black_box` vs `benchmark.keep` (try the newer `std::hint::black_box`, which is built into the compiler and should have lower overhead)<p>And no: in the example with `&String` and `usize`, the stack isn't growing:
<a href="https://rust.godbolt.org/z/6zW6WfGE7" rel="nofollow">https://rust.godbolt.org/z/6zW6WfGE7</a></p>
]]></description><pubDate>Tue, 13 Feb 2024 16:40:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=39359519</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=39359519</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39359519</guid></item><item><title><![CDATA[New comment by Dr_Emann in "A byte string library for Rust"]]></title><description><![CDATA[
<p>Honestly feels like a very, very different use case from utf8-ish strings, at a quick read?</p>
]]></description><pubDate>Thu, 08 Sep 2022 12:05:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=32764307</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=32764307</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32764307</guid></item><item><title><![CDATA[New comment by Dr_Emann in "The Bourne shell lets you set variables in if expressions"]]></title><description><![CDATA[
<p>For simple cases, I'll do that, but for longer commands, I've taken to doing<p>rc=0
long command || rc = $?
if (( rc == 0 ))...</p>
]]></description><pubDate>Sat, 15 May 2021 12:13:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=27164503</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=27164503</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27164503</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Rust in the Linux Kernel (Android Security Blog)"]]></title><description><![CDATA[
<p>Literally every file operation HAS to go through the kernel. This is implementing "what does it mean to read/write this special device file"</p>
]]></description><pubDate>Thu, 15 Apr 2021 12:50:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=26819807</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=26819807</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26819807</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Why asynchronous Rust doesn't work"]]></title><description><![CDATA[
<p>I believe they're asking for "this function returns a function of the same type (Fn/FnMut/FnOnce) as its first argument, but with different arguments. A generic way to write something like `fn bind<T, F: Fn(T,...) >(f: F, arg: T) -> Fn(...)`</p>
]]></description><pubDate>Wed, 10 Mar 2021 12:36:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=26410585</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=26410585</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26410585</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Go is not an easy language"]]></title><description><![CDATA[
<p>Yes it does exactly that. It returns an iterator over the removed items, but when that iterator is dropped, it modifies the collection. See <a href="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=207a1c4de84ed43608ab774c15c8e5db" rel="nofollow">https://play.rust-lang.org/?version=stable&mode=debug&editio...</a></p>
]]></description><pubDate>Tue, 23 Feb 2021 15:05:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=26238078</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=26238078</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26238078</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Go is not an easy language"]]></title><description><![CDATA[
<p>And for move to front, why not `a[..i+1].rotate_right(1);`, rather than moving to the back and then shifting everything?</p>
]]></description><pubDate>Mon, 22 Feb 2021 16:00:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=26225998</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=26225998</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26225998</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Go is not an easy language"]]></title><description><![CDATA[
<p>Expand does actually exist in the standard library, but it's a bit of a strange incantation...<p><pre><code>    vec.splice(i..i, std::iter::repeat(0).take(length));
</code></pre>
This replaces the values in range `i..i` (an empty range starting at i) with `length` copies of `0`.</p>
]]></description><pubDate>Mon, 22 Feb 2021 15:43:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=26225767</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=26225767</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26225767</guid></item><item><title><![CDATA[New comment by Dr_Emann in "State of Rust Survey 2020 results"]]></title><description><![CDATA[
<p>_Implementing_ a variadic function in rust requires nightly. I'm guessing that's what they meant. Calling one has been available for forever.</p>
]]></description><pubDate>Thu, 17 Dec 2020 03:47:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=25452225</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=25452225</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25452225</guid></item><item><title><![CDATA[New comment by Dr_Emann in "A Defer Mechanism for C"]]></title><description><![CDATA[
<p>I would absolutely support something to replace (<i>(</i>(<i>(</i>a).b).c).d).e with a->b->c->d->e, regardless of how much code had been written without that feature.<p>Do you not like the array subscript operator, either, since a[b] can be *(a+b)? How about a && b, you can replace that with (!!a) & (!!b), with an extra 'if' if you need the short circuiting.</p>
]]></description><pubDate>Tue, 15 Dec 2020 13:48:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=25430236</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=25430236</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25430236</guid></item><item><title><![CDATA[New comment by Dr_Emann in "A Defer Mechanism for C"]]></title><description><![CDATA[
<p>Of course. There should never be more than one way to do something in c, even if it makes things easier or less error prone. This is why the -> operator would never be included in c. You can already use (*x).y, it would be SILLY to introduce a whole operator which isn't orthogonal to all existing features of the language.</p>
]]></description><pubDate>Tue, 15 Dec 2020 03:46:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=25426729</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=25426729</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25426729</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Pointers Are Complicated II, or: We need better language specs"]]></title><description><![CDATA[
<p>Because there is no UB in the original program.<p>It constructs a pointer to the "one past the end" element, but that is fine, and the original program never dereferences that pointer. Again: there is no UB in the original program.</p>
]]></description><pubDate>Mon, 14 Dec 2020 21:10:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=25423354</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=25423354</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25423354</guid></item><item><title><![CDATA[New comment by Dr_Emann in "Pointers Are Complicated II, or: We need better language specs"]]></title><description><![CDATA[
<p>Your block of code can be (and absolutely is) optimized to output zero directly (in c, because the assembly is easier to read):<p><a href="https://c.godbolt.org/z/qe3f4K" rel="nofollow">https://c.godbolt.org/z/qe3f4K</a><p>`*(&i+1)` dereferences the pointer "one past the end" which is UB.</p>
]]></description><pubDate>Mon, 14 Dec 2020 20:56:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=25423174</link><dc:creator>Dr_Emann</dc:creator><comments>https://news.ycombinator.com/item?id=25423174</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25423174</guid></item></channel></rss>