<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: not_a_bijection</title><link>https://news.ycombinator.com/user?id=not_a_bijection</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 13 Jun 2026 10:21:08 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=not_a_bijection" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by not_a_bijection in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>I think fork() is more of a PDP-7 mistake than a PDP-11 mistake.
On the original UNIX system, memory was so limited that the only sane partitioning was to write the running program's memory image to disk, then reuse the running image as the child. An immediate consequence is the UNIX I/O model, where disk I/O is always synchronous (can't swap processes while waiting for disk I/O because swapping processes requires disk I/O). Anyway, as soon as the UNIX group got a PDP-11, the model broke down, because they had enough memory for multiple processes, but fork() didn't allow them to run concurrently, because their first PDP-11 didn't have an MMU. So they whined until they got one with an MMU instead of fixing their broken design.</p>
]]></description><pubDate>Sat, 06 Jun 2026 19:34:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48428189</link><dc:creator>not_a_bijection</dc:creator><comments>https://news.ycombinator.com/item?id=48428189</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48428189</guid></item><item><title><![CDATA[New comment by not_a_bijection in "Int a = 5; a = a++ + ++a; a =? (2011)"]]></title><description><![CDATA[
<p>Not in C, unless at least one of the pointers were marked `restrict`.</p>
]]></description><pubDate>Thu, 14 May 2026 20:53:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48141089</link><dc:creator>not_a_bijection</dc:creator><comments>https://news.ycombinator.com/item?id=48141089</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48141089</guid></item><item><title><![CDATA[New comment by not_a_bijection in "XOR'ing a register with itself is the idiom for zeroing it out. Why not sub?"]]></title><description><![CDATA[
<p>That's even more useful because of x86's braindamanged "setcc", which only affects the lowest byte of the destination, AFAIR, and so always has to be combined with a zeroing idiom before the setcc or a zero extension after it in practice.</p>
]]></description><pubDate>Wed, 22 Apr 2026 14:31:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47864211</link><dc:creator>not_a_bijection</dc:creator><comments>https://news.ycombinator.com/item?id=47864211</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47864211</guid></item><item><title><![CDATA[New comment by not_a_bijection in "XOR'ing a register with itself is the idiom for zeroing it out. Why not sub?"]]></title><description><![CDATA[
<p>You can do better. X86 has both "op [mem], reg" and "op reg, [mem]" variants of most instructions, where "[mem]" can be a register too. So you have two ways to encode "xor eax, eax", differing by which of the operands is in the "possible memory operand" slot, the source or the destination.</p>
]]></description><pubDate>Wed, 22 Apr 2026 14:22:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47864090</link><dc:creator>not_a_bijection</dc:creator><comments>https://news.ycombinator.com/item?id=47864090</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47864090</guid></item></channel></rss>