<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: gingerBill</title><link>https://news.ycombinator.com/user?id=gingerBill</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 28 Oct 2026 18:45:03 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=gingerBill" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Casey Muratori – The Root of the Root of All Evil – BSC 2026 [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=hpj6r6CjJf8">https://www.youtube.com/watch?v=hpj6r6CjJf8</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49445418">https://news.ycombinator.com/item?id=49445418</a></p>
<p>Points: 16</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 26 Aug 2026 07:56:01 +0000</pubDate><link>https://www.youtube.com/watch?v=hpj6r6CjJf8</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49445418</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49445418</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>1. I don't think I am overselling rexcode, rather there isn't anything like it in the first place as a single library with that many ISAs and IRs. That's what I love about it, since I can now trivially make (non-optimizing) compilers without needing to use LLVM or use another external tool (including outputting C or assembly). Also all of those tables become binary blobs, so you could just use them in your favourite language any way.<p>2. That was a bug and it has now been fixed, along with many other analysis bugs.<p>3. The sorting algorithms are getting an overhauls soon to be a lot faster.</p>
]]></description><pubDate>Mon, 24 Aug 2026 09:17:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=49417213</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49417213</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49417213</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>I haven't fully thought out that syntax yet, but it's a problem with AVX-512 in terms of its predicate operands too.<p>My hunch would be the following:<p><pre><code>        sve_ld1d_scalar :: asm(base: [^]u64, idx: i64, #mask pred: u16) -> (dst: #simd[vscale * 4]f32) [
                dst  = %z0,
                pred = #predicate(indirect=zeroing) %p0,
                dsth: u16 = dst,
        ] {
                ld1d dsth, pred, [base + idx<<3]
        }

        sve_ld1d_gather :: asm(base: [^]u64, #mask pred: u16) -> (dst: #simd[vscale * 4]f32) [
                dst  = %z0,
                pred = #predicate(indirect=zeroing) %p0,
                dsth: u16 = dst,
        ] {
                ld1d dsth, pred, [base + dsth<<3]
        }

</code></pre>
So the parameter is marked as a predicate with zeroing or whatever, and then `pred` is just a normal operand as the binding section specifies everything.<p>This is not current behaviour yet but it I am considering it when I need to specify this for even AVX-512 and RISC-V behaviour (which has multiple different possibilities).</p>
]]></description><pubDate>Sun, 23 Aug 2026 12:58:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=49408507</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49408507</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49408507</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>How is this not an assembler?—even with your description which matches an assembler to a tee. It genuinely is an assembler, and I am not sure how you are thinking otherwise.<p>And where is the AT&T? Did you even look at the syntax or read the article? Is it just the use of `%rex` to prevent namespace collisions with parameters and constants which could hypothetically be named `rex` (and there could be good reasons they are named that too)? There are no other sigils in the grammar. The order of the operands is Intel-like. The memory operand syntax is Intel-like.</p>
]]></description><pubDate>Sun, 23 Aug 2026 11:58:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=49408107</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49408107</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49408107</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>Odin is never going to support SHARC nor Hexagon, so it is literally not a problem.<p>And I do not even seen why a universal syntax for such ISAs is impossible to support either at the syntax level. Hexagon's `.new`/`:sat`/`:<<1` stuff could be easily added into the universal syntax (with a better syntax), even if other ISAs do not support it. Same with SHARC's parallel-operation separators: you just pick a different syntax.<p>Even now, the full `[base + index<i>scale + disp]` syntax is not semantically supported for RISCV64 because they do not support `index</i>scale` in their memory operands.<p>Yes the prefix syntax is a quirk but if can tell me an alternative syntax that is context-free to solve this problem that is also not too stark nor dense too read, please do! I am open to new ideas, but it seems that even other assemblers like Plan9, Go, and D, all came to similar conclusion with `lock; xadd ...`.<p>And the article was not LLM written.</p>
]]></description><pubDate>Sun, 23 Aug 2026 11:55:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=49408073</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49408073</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49408073</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>> It supports x86, too<p>Well I assumed so because amd64 is a superset of x86. But nice to know you're working on arm64 too.<p>Regarding Intel-syntax, I think there is a little miscommunication here since I try to explain what I mean in the article. Intel-ordering is a good idea, but using nothing but the Intel-syntax wholesale is not universal enough, and needs modifying, especially for AMD64 and other ISAs. Odin's is Intel-like too, but fully Intel by design.<p>> That's so the source code can be tokenized and parsed without needing special behavior inside the asm { ... }.<p>This is why Odin's asm templates have their own universalized syntax. Thus the entire article.<p>> Not sure what you mean. RAX means register RAX. %RAX is not accepted.<p>This: <a href="https://github.com/dlang/dmd/blob/master/druntime/src/core/internal/atomic.d#L216-L231" rel="nofollow">https://github.com/dlang/dmd/blob/master/druntime/src/core/i...</a><p>It's why I referred to your "trick", which is something I wanted to need in the first place.<p>> That just makes it easier to parse!<p>For Odin's asm template syntax, it's not about being easier to parser, it's about having a context free grammar that is the same across ISAs. If I was to allow for prefixes directly in the grammar, either prefixes would have to have their special syntax or you'd need to have a context-sensitive grammar.</p>
]]></description><pubDate>Sun, 23 Aug 2026 10:26:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=49407643</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49407643</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49407643</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>Why is a bad thing that another language design and compiler writer compares his language as a point of comparison?<p>I really like it when he does because it allows me to see what he has done for D, and learn from it.</p>
]]></description><pubDate>Sat, 22 Aug 2026 18:44:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=49402535</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49402535</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49402535</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>D's approach is great, but it has a few limitations for my use case in Odin. It only supports x86_64/amd64 and uses Intel-style syntax, whereas I needed a solution that universalizes its syntax across multiple ISAs.<p>D's inline asm is also statement-based rather than a callable template. Though the mixin trick fixes this, it does mean it still uses %0-style parameters making it hard to read and write, something I want to remove completely.<p>It is great to see that we arrived at similar design compromises, especially regarding `lock` being treated as a separate instruction and thus separated with a `;` (which is automatically inserted by the Odin compiler).</p>
]]></description><pubDate>Sat, 22 Aug 2026 17:29:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=49401800</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49401800</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49401800</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>That's pretty much the quibble. Most people's narrow view of type system.<p>And we already track all of the basic side-effects and clobbering that each form of each mnemonic does. That's kind of the entire point of this being possible: it's all "typed".</p>
]]></description><pubDate>Sat, 22 Aug 2026 14:53:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=49400399</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49400399</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49400399</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>> the different operand sizes have a lot of side effects<p>Which we have massive tables for each form which track those side effects and clobbering information too.<p>> author/LLM<p>I am the author, and not an LLM.<p>> Tomorrow you need to pass a 128 bit int into two registers<p>Okay? There are no 128-bit integer registers on AMD64, ARM64, nor RISCV-64. So I have no idea what you are on about. And note they are templates, so if you want 128-bit integer support, you can just wrap that template in a procedure and handle the behaviour yourself.</p>
]]></description><pubDate>Sat, 22 Aug 2026 14:48:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=49400341</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49400341</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49400341</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>I know that "untyped" means a single-type, but assembly operands have multiple different kinds of types (as I state in the article). What makes it really interesting is what you can know about each instruction and what it does (what operands it excepts, what it clobbers, what side-effects its has, etc).<p>And from that huge table of type information, this can be used to give good error messages and suggestions to the user because the compiler actually knows all of this. The type constraints here allow for a lot more than information that normal assemblers just don't give.</p>
]]></description><pubDate>Fri, 21 Aug 2026 00:18:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=49382058</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49382058</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49382058</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>The equivalent Odin syntax looks like this:<p>add_three :: asm(my_in: u64) -> (my_out: u64) {
    add my_out, my_in, 3
}<p>out_var = add_three(in_var)<p>Which is already infinitely more readable and requires no parochial sigils nor the arcane clobbering syntax.</p>
]]></description><pubDate>Thu, 20 Aug 2026 22:25:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=49381121</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49381121</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49381121</guid></item><item><title><![CDATA[New comment by gingerBill in "Everyone says assembly is untyped—everyone is wrong"]]></title><description><![CDATA[
<p>TALs are not what I am referring to here. I am arguing that assembly is already typed and does not need extra annotation to be typed.<p>TALs are also solving an entirely different problem.</p>
]]></description><pubDate>Thu, 20 Aug 2026 22:02:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49380849</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49380849</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49380849</guid></item><item><title><![CDATA[Odin's New Inline Assembly Templates]]></title><description><![CDATA[
<p>Article URL: <a href="https://odin-lang.org/docs/inline-asm/">https://odin-lang.org/docs/inline-asm/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49351408">https://news.ycombinator.com/item?id=49351408</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 18 Aug 2026 19:35:41 +0000</pubDate><link>https://odin-lang.org/docs/inline-asm/</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=49351408</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49351408</guid></item><item><title><![CDATA[New comment by gingerBill in "Understanding the Odin programming language"]]></title><description><![CDATA[
<p>> STM32 microcontroller<p>The answer is "yes" depending on what you mean by STM32 :D<p>But if it's one we don't currently support officially, it should be pretty easy to support too, with probably a little extra assembly.</p>
]]></description><pubDate>Sun, 12 Jul 2026 20:52:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48884672</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=48884672</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48884672</guid></item><item><title><![CDATA[New comment by gingerBill in "Good Tools Are Invisible"]]></title><description><![CDATA[
<p>Vim does not have multiple cursors which can be placed ANYWHERE even multiple on the same line and at any offset. You are clearly not aware of what Vim actually offers.</p>
]]></description><pubDate>Fri, 10 Jul 2026 22:22:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48866055</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=48866055</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48866055</guid></item><item><title><![CDATA[New comment by gingerBill in "Good Tools Are Invisible"]]></title><description><![CDATA[
<p>> People don't use vim because they enjoy puzzle solving.<p>I didn't say that either nor even imply it, and you know that when you quote me afterwards. So huh?!?!<p>> People don't use Linux because they enjoy tweaking config files and everybody else has too busy a life to do that.<p>A lot of people, including younger myself, got into Linux and Android BECAUSE it was configurable and customizable. And even played around with all of the customizations because it was fun to do. But it didn't really make my general experience better because I was forever trying to correct something I should have to correct in the first place.<p>I am not sure how much clearer I can be in the article or in my replies to comments.</p>
]]></description><pubDate>Fri, 10 Jul 2026 15:22:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48861195</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=48861195</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48861195</guid></item><item><title><![CDATA[New comment by gingerBill in "Good Tools Are Invisible"]]></title><description><![CDATA[
<p>> You just edit as normal while recording, and replay those edits later.<p>And there is the problem. The first time you do the edit, it might be fine, but when you make a mistake in the edit, you then have to go back and correct all of the cases. With multiple cursors, I am seeing instant visual feedback on all instances of the cursor at once. I am getting literally 2D spatial information, compared to the 1D spatial information per each replay. The multiple cursors approach is better not because it's a different mindset or whatever, but rather it produces a different feedback loop to correct mistakes.<p>If you still prefer the macro approach over the multiple cursors approach, then you do you. But as an example in the article, I have seen people think they are being productive by their own standards, and they really aren't.</p>
]]></description><pubDate>Fri, 10 Jul 2026 14:38:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=48860640</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=48860640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48860640</guid></item><item><title><![CDATA[New comment by gingerBill in "Good Tools Are Invisible"]]></title><description><![CDATA[
<p>Which is kind of what I was arguing. Understand that having "fun" is not necessarily equivalent to being "productive". And even by an individuals own standards, the two can be completely different.<p>If you are having fun, and it's a hobby: who cares? If it's in the professional setting, make sure what you are doing is not actually wasting time and/or money, i.e. be productive.</p>
]]></description><pubDate>Fri, 10 Jul 2026 14:36:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48860597</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=48860597</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48860597</guid></item><item><title><![CDATA[New comment by gingerBill in "Good Tools Are Invisible"]]></title><description><![CDATA[
<p>> The things about multiple cursors is that you think about the processing while doing it<p>That visual feedback is EXTREMELY useful because I learn of the edge cases to what I am editing in bulk (usually formatting code or tables or whatever) as I am editing it. When you do a macro, you have to try and get it right, and then try again from the start each time to get it right. `dot` et al are not enough in that regard. So the multiple cursors approach is better not because it's a different mindset, but it produces a different feedback loop to correct mistakes.<p>If you still prefer the macro approach over the multiple cursors approach, then you do you. But as an example in the article, I have seen people think they are being productive by their own standards, and they really aren't.</p>
]]></description><pubDate>Fri, 10 Jul 2026 14:28:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48860486</link><dc:creator>gingerBill</dc:creator><comments>https://news.ycombinator.com/item?id=48860486</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48860486</guid></item></channel></rss>