<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: virexene</title><link>https://news.ycombinator.com/user?id=virexene</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 09 Apr 2026 09:54:09 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=virexene" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by virexene in "Bloom Filters"]]></title><description><![CDATA[
<p>I may have missed something when skimming the paper, but it sounds like Xor filters are constructed offline and can't be modified efficiently afterwards, whereas Bloom filters can be inserted into efficiently. So they don't seem to be an exact replacement</p>
]]></description><pubDate>Fri, 02 May 2025 09:04:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=43867629</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=43867629</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43867629</guid></item><item><title><![CDATA[New comment by virexene in "Optimizing Heap Allocations in Go: A Case Study"]]></title><description><![CDATA[
<p>I wonder if the reason the escape analysis fails could be that, for small enough types, the concrete value is directly inlined inside the interface value, instead of the latter being "a smart pointer" as the author said. So when the compiler needs to take a reference to the concrete value in `vs.chunkStore`, that ends up as an internal pointer inside the `vs` allocation, requiring it to be on the heap.<p>Either that or the escape analysis just isn't smart enough; taking a pointer to an internal component of an interface value seems like a bit of a stretch.</p>
]]></description><pubDate>Tue, 22 Apr 2025 07:33:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=43759885</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=43759885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43759885</guid></item><item><title><![CDATA[New comment by virexene in "Gleam, Coming from Erlang"]]></title><description><![CDATA[
<p>I'll have to disagree here.<p>Leaking resources in Rust is pretty trivial: create an Rc cycle with internal mutability. By contrast, in languages with a GC, cycles will be properly collected.<p>And there is nothing preventing GC languages from tying their non-memory resources to the lifetime of a value like Rust. See Python files, which are closed when the file handle is collected (ie. when all variables holding it go out of scope), and if that's not explicit enough, there's the "with" keyword to explicitly introduce a scope at the end of which the file is closed.</p>
]]></description><pubDate>Fri, 28 Feb 2025 13:16:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=43205234</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=43205234</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43205234</guid></item><item><title><![CDATA[New comment by virexene in "In Zig, what's a writer?"]]></title><description><![CDATA[
<p>In Zig's case, you do what Rust/C++ do implicitly and create a table of function pointers</p>
]]></description><pubDate>Sat, 01 Feb 2025 09:41:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=42897183</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=42897183</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42897183</guid></item><item><title><![CDATA[New comment by virexene in "Using black magic to make a fast circular buffer (2017)"]]></title><description><![CDATA[
<p>Ah, you're right, I didn't see it's a more recent addition.</p>
]]></description><pubDate>Tue, 14 Jan 2025 18:14:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=42701358</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=42701358</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42701358</guid></item><item><title><![CDATA[New comment by virexene in "Apple will soon receive 'made in America' chips from TSMC's Arizona fab"]]></title><description><![CDATA[
<p>I think "packaging" here refers to the process of putting the silicon die in its plastic casing and connecting the die's pad to the case's pins, see <a href="https://en.wikipedia.org/wiki/Integrated_circuit_packaging" rel="nofollow">https://en.wikipedia.org/wiki/Integrated_circuit_packaging</a></p>
]]></description><pubDate>Tue, 14 Jan 2025 18:11:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=42701309</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=42701309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42701309</guid></item><item><title><![CDATA[New comment by virexene in "Using black magic to make a fast circular buffer (2017)"]]></title><description><![CDATA[
<p>The author claims that <i>mmap</i> is exposed by glibc whereas <i>memfd_create</i> is not, so they reimplemented it with <i>syscall</i>, but looking at the man page, did they just forget to <i>#define _GNU_SOURCE</i>?</p>
]]></description><pubDate>Sat, 11 Jan 2025 12:36:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=42665465</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=42665465</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42665465</guid></item><item><title><![CDATA[New comment by virexene in "Charset="WTF-8""]]></title><description><![CDATA[
<p>in what way is unicode similar to html, docx, or a file format? the only features I can think of that are even remotely similar to what you're describing are emoji modifiers.<p>and no, this webpage is not result of "carefully cutting out the complicated stuff from Unicode". i'm pretty sure it's just the result of not supporting Unicode in any meaningful way.</p>
]]></description><pubDate>Sun, 24 Nov 2024 22:16:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=42231109</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=42231109</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42231109</guid></item><item><title><![CDATA[New comment by virexene in "Implementing a Tiny CPU Rasterizer"]]></title><description><![CDATA[
<p>If you want that projection to still be expressible as a matrix transformation, I don't think that's possible.</p>
]]></description><pubDate>Sat, 02 Nov 2024 22:53:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=42029826</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=42029826</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42029826</guid></item><item><title><![CDATA[New comment by virexene in "Effective substring in Rust"]]></title><description><![CDATA[
<p>indeed, Rust <i>can</i> be fast, <i>if</i> you know what you're doing. this indeed means not making unnecessary allocations, but in my opinion, it also means... using byte-based indices instead of insisting on char-based indices, ie. Version 0, which OP so quickly dismissed.<p>using char-based indices means you have to convert back to byte-based indices, a <i>linear time operation</i>, every time you want to do much of anything with them. this is a silly performance loss, since you probably got those char-based indices by iterating over the string in the first place: you're doing redundant work, which could be avoided by using char_indices() in your initial iteration and keeping those byte-based indices for later manipulation. this is why that iterator exists, really.<p>you might ask: "but then if I do +1 to get the index of the next character, it might fall in the middle of a multibyte character and the substringing will panic!" yes, you will need to use char::len_utf8 or char_indices to offset your indices (forwards or backwards: CharIndices is a DoubleEndedIterator!). but this is less work than adding one... and then recounting characters from the beginning.<p>and importantly, +1 isn't even really appropriate to do with char-based indices either. there are many "characters" in the user-perceived sense of the word that are made up of multiple chars, and while cutting in the middle of one won't panic, it also won't give the user-friendly cutting you're expecting. just try your code with a flag emoji and see what happens: you'll split it into two weird "residual" characters.<p>if you care about that in your specific application, the solution is to iterate on an even bigger unit than chars: (extended) grapheme clusters, or EGCs. and because EGC segmentation is quite a bit more demanding than simple char-based iteration, using EGC-based numerical indices (which I believe Swift does by default?) is an even bigger waste of CPU time. in my opinion, <i>you need to fully let go of the assumption that characters can be given consecutive numerical indices in a performant way,</i> and once again, use byte-based indices along with the appropriate EGC-aware methods for acquiring and offsetting them.</p>
]]></description><pubDate>Tue, 11 Jun 2024 15:20:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=40647248</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=40647248</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40647248</guid></item><item><title><![CDATA[New comment by virexene in "Timekeepers may subtract a second in 2029 as planet spins slightly faster"]]></title><description><![CDATA[
<p>given that unix time specifically does not handle leap seconds well, i'm not sure i would say they "had it right" all along</p>
]]></description><pubDate>Wed, 27 Mar 2024 23:54:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=39846104</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=39846104</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39846104</guid></item><item><title><![CDATA[New comment by virexene in "A Quadrillion Mainframes on Your Lap"]]></title><description><![CDATA[
<p>how the hell do they get to a quadrillion? even multiplying the two factors of 100,000 that are mentioned with no regard for coherence doesn't get you that high</p>
]]></description><pubDate>Sat, 17 Feb 2024 14:40:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=39409803</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=39409803</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39409803</guid></item><item><title><![CDATA[New comment by virexene in "What's that touchscreen in my room?"]]></title><description><![CDATA[
<p>that was only the power to the energy measuring device i believe.</p>
]]></description><pubDate>Sat, 20 Jan 2024 01:40:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=39063792</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=39063792</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39063792</guid></item><item><title><![CDATA[New comment by virexene in "C++ needs undefined behavior, but maybe less"]]></title><description><![CDATA[
<p><i>your</i> compiler might choose to make that the "implementation-defined behavior", but another compiler could choose to always ignore it and give you no easy means of diagnosis.<p>my understanding is that the proposal of "erroneous behavior" limits the scope of the consequences of triggering the behavior (like implementation-defined behavior), while still clearly marking it as erroneous and something to be diagnosed (like undefined behavior).</p>
]]></description><pubDate>Fri, 24 Nov 2023 17:23:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=38406135</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=38406135</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38406135</guid></item><item><title><![CDATA[New comment by virexene in "There's Math.random(), and then there's Math.random() (2015)"]]></title><description><![CDATA[
<p><i>“the 2⁵² numbers between 0 and 1 that double precision floating point can represent”</i><p>it's a bit of a nitpick, but i believe there are 1023×2⁵² such numbers, which is quite a bit more. there are 2⁵² double precision floats in just [0.5;1)!</p>
]]></description><pubDate>Wed, 08 Nov 2023 17:15:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=38193561</link><dc:creator>virexene</dc:creator><comments>https://news.ycombinator.com/item?id=38193561</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38193561</guid></item></channel></rss>