<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: jcmoyer</title><link>https://news.ycombinator.com/user?id=jcmoyer</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 21 Jun 2026 16:57:50 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jcmoyer" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jcmoyer in "Unsigned sizes: A five year mistake"]]></title><description><![CDATA[
<p>There is a really convincing set of arguments against this idea by Robert Seacord[1]. I used to be in the signed size camp, but I've come around to preferring unsigned as much as possible because it's much easier to reason about. I think there are far more footguns than people realize when it comes to signed integers.<p>[1] <a href="https://www.youtube.com/watch?v=82jVpEmAEV4" rel="nofollow">https://www.youtube.com/watch?v=82jVpEmAEV4</a></p>
]]></description><pubDate>Sun, 03 May 2026 01:39:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47992453</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=47992453</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47992453</guid></item><item><title><![CDATA[New comment by jcmoyer in "Greg K-H: "Writing new code in Rust is a win for all of us""]]></title><description><![CDATA[
<p>> logical operators do not short-circuit (so both sides of an or will execute even if the left side is true)<p>There are two syntaxes: `and` which doesn't short circuit, and `and then` which does. Ditto for `or` and `or else`.</p>
]]></description><pubDate>Fri, 21 Feb 2025 03:27:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=43123687</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=43123687</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43123687</guid></item><item><title><![CDATA[New comment by jcmoyer in "Cve-rs: Fast memory vulnerabilities, written in safe Rust"]]></title><description><![CDATA[
<p>>Without compiler bugs, on stock Linux, you can achieve the same thing via /proc/self/mem.<p>The documentation addresses this case specifically: <a href="https://doc.rust-lang.org/stable/std/os/unix/io/index.html#procselfmem-and-similar-os-features" rel="nofollow">https://doc.rust-lang.org/stable/std/os/unix/io/index.html#p...</a><p>"Rust’s safety guarantees only cover what the program itself can do, and not what entities outside the program can do to it. /proc/self/mem is considered to be such an external entity..."</p>
]]></description><pubDate>Tue, 20 Feb 2024 21:00:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=39446838</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=39446838</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39446838</guid></item><item><title><![CDATA[New comment by jcmoyer in "Google has removed Conversations_im from the Play Store"]]></title><description><![CDATA[
<p>Anecdotally, Chrome used to pin my hard drive at 100% usage until I killed a process called "software_reporter_tool.exe." I still have a version of the binary located at "%localappdata%\Google\Chrome\User Data\SwReporter\107.294.200" last modified 2022-11-02.</p>
]]></description><pubDate>Wed, 14 Feb 2024 19:12:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=39373853</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=39373853</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39373853</guid></item><item><title><![CDATA[New comment by jcmoyer in "Who Needs Haskell? Straight to Rust Hell"]]></title><description><![CDATA[
<p>Is the Rust compose backwards? Normally I would expect compose(f,g)(x) = (f∘g)(x) = f(g(x)), but in this post it's g(f(x)).<p>In Haskell for instance,<p><pre><code>    (+2) . (*10) $ 2
    => 22</code></pre></p>
]]></description><pubDate>Sat, 07 Jan 2023 11:56:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=34287248</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=34287248</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34287248</guid></item><item><title><![CDATA[New comment by jcmoyer in "I wrote a Ruby extension in Zig"]]></title><description><![CDATA[
<p>Reading the manual, searching the stdlib for terms related to what I'm trying to do and reading tests, searching the issue tracker, and accidentally discovering things via LSP autocomplete. For higher level concepts that aren't implemented in language (like runtime polymorphism), I try to find examples of how it's done in the stdlib and copy that.</p>
]]></description><pubDate>Mon, 26 Dec 2022 12:48:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=34137244</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=34137244</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34137244</guid></item><item><title><![CDATA[New comment by jcmoyer in "A 2020 Vision of Linear Algebra"]]></title><description><![CDATA[
<p>The same concept applies in 2D, which might help you build the intuition to understand it in 3D.<p>If you have a vector v=(1,0) that points to the right, you can scale this vector infinitely in that direction by multiplying it by a positive scalar.<p>5v = (5,0)<p>62.1v = (62.1,0)<p>Similarly, you can scale that vector infinitely in the opposite direction (i.e. left) by multiplying it by a negative scalar:<p>-987v = (-987,0)<p>If we call this scalar c, the expression cv allows us to represent any point along the X axis simply by varying c, meaning that cv defines a line along that axis.<p>Similarly, we can do the same for a vector w=(0,1) along the Y axis, scaling it by d.<p>Now we have a method for moving to any point on the XY plane simply by varying c and d in the linear combination: cv + dw, meaning that we've defined a plane using two vectors.<p>Two caveats:<p>- this won't work if v and w are parallel; for example, if v = -w (and neither are zero) then we can only move along a line instead of a plane<p>- it also won't work if either of the vectors are zero, because no matter what you multiply by, a zero vector can only represent a single point</p>
]]></description><pubDate>Tue, 12 May 2020 12:57:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=23153436</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=23153436</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23153436</guid></item><item><title><![CDATA[John Frum and the Cargo Cults (2007)]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.damninteresting.com/john-frum-and-the-cargo-cults/">https://www.damninteresting.com/john-frum-and-the-cargo-cults/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=16486826">https://news.ycombinator.com/item?id=16486826</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 28 Feb 2018 20:56:33 +0000</pubDate><link>https://www.damninteresting.com/john-frum-and-the-cargo-cults/</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=16486826</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=16486826</guid></item><item><title><![CDATA[Guaranteeing memory safety in Rust [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://air.mozilla.org/guaranteeing-memory-safety-in-rust/">https://air.mozilla.org/guaranteeing-memory-safety-in-rust/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=7781735">https://news.ycombinator.com/item?id=7781735</a></p>
<p>Points: 53</p>
<p># Comments: 26</p>
]]></description><pubDate>Thu, 22 May 2014 01:54:11 +0000</pubDate><link>https://air.mozilla.org/guaranteeing-memory-safety-in-rust/</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=7781735</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7781735</guid></item><item><title><![CDATA[New comment by jcmoyer in "Rust for C++ programmers – part 4: unique pointers"]]></title><description><![CDATA[
<p>>1 - If memory management is a serious problem for the software you work on, I've never found the boost library lacking. This seems like the main selling point for RUST. Given the scope of the project: you guys must be doing something that is so different that it couldn't be rolled into a library - so I'm looking forward to your future posts to see if there is something here that I really am missing out on.<p>I would say that Rust's defining feature is the borrow checker[1], which eliminates an entire category of pointer related errors at compile time.<p>>3 - A lot of things are renamed. auto->let, new->box, switch->box You get the feeling that effort was put in to make the language explicitly look different from C++<p>Rust is strongly influenced by the ML family of languages. I believe that's where some of the keywords came from.<p>>4 - the Rust switch statement don't fall through... This one was truly mind blowing. The one useful feature of switch statement got ripped it out! If you don't really need the fall through, I'd just avoid using them completely...<p>Rust doesn't have a classical switch statement. Instead, it has a 'match' keyword that performs pattern matching on the input so you can easily destructure a complicated blob of data into more manageable pieces. This is also a concept borrowed from the ML family. If you really wanted to, you could write a macro that emulates the C style switch statement.<p>>5 - I've never really seen an equivalent to boost (in combination to the STL) in other languages (maybe I didn't look hard enough). Could you maybe make a post about the RUST standard library? Libraries are always the deal breaker<p>There's a great overview[2] of what the standard distribution contains on the Rust website.<p>[1] <a href="http://static.rust-lang.org/doc/master/rustc/middle/borrowck/doc/index.html" rel="nofollow">http://static.rust-lang.org/doc/master/rustc/middle/borrowck...</a><p>[2] <a href="http://static.rust-lang.org/doc/master/index.html#libraries" rel="nofollow">http://static.rust-lang.org/doc/master/index.html#libraries</a></p>
]]></description><pubDate>Tue, 29 Apr 2014 06:41:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=7665383</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=7665383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7665383</guid></item><item><title><![CDATA[New comment by jcmoyer in "Rust by Example"]]></title><description><![CDATA[
<p>Breaking changes still happen, but commits to the rust repo are tagged with [breaking-change] so you can easily do a `git log --grep breaking-change` and (hopefully) get a good idea of how to fix your code. For more gradual breaking changes, the developers have been good at adding lints to rustc so you're told how to fix your code via compile-time warnings. Vec migration and crate attribute syntax are two recent examples of this.</p>
]]></description><pubDate>Sat, 26 Apr 2014 12:59:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=7651224</link><dc:creator>jcmoyer</dc:creator><comments>https://news.ycombinator.com/item?id=7651224</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7651224</guid></item></channel></rss>