<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: _old_dude_</title><link>https://news.ycombinator.com/user?id=_old_dude_</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 09 Sep 2026 03:24:29 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=_old_dude_" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by _old_dude_ in "Why is Arrays.fill 265 times slower on G1GC?"]]></title><description><![CDATA[
<p>All Java GCs are generational collectors,  they reduce the marking time (for young collection) by tracking if there is a reference from the old generation to the new generation.<p>The benchmark creates an array in the old generation (by being big enough) and stores an object (allocated in the new generation). This triggers the GC barrier for <i>every writes</i>. Something rare in real application.<p>The G1 barrier before Java 26 is slow because:<p>- the GC barrier and some GC threads do concurrent operations on the same memory zone (the card table)<p>- the barrier is big (a lot of assembler instructions) so it also troubles the loop unrolling optimization performed by JITs<p>Parallel GC has a simple barrier and do not care about latency (no GC check inside the loop).<p>The barrier implementation of G1GC was changed in Java 26, so update your Java runtime version and move on.</p>
]]></description><pubDate>Fri, 04 Sep 2026 15:26:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=49566050</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=49566050</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49566050</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Virtual Threads for a scripting language in Java 8 without Loom"]]></title><description><![CDATA[
<p>Nice article.<p>I think this is similar to the way Kotlin implements coroutine.<p>I believe Kotlin goes to the extra miles to also capture parts of the stack frames when creating the Continuation object so even when the runtime resume the continuation, the exceptions thrown later get the "correct" stack trace (not the one that shows that you come from a call through a MethodHandle).</p>
]]></description><pubDate>Fri, 04 Sep 2026 07:28:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=49561612</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=49561612</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49561612</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Zig’s Io.Threaded is neat"]]></title><description><![CDATA[
<p>Just here to say that Java as interruptible channels since the beginning of 2000.<p>You can interrupt a blocking IO operation with either interrupt() or close().<p><a href="https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/InterruptibleChannel.html" rel="nofollow">https://docs.oracle.com/en/java/javase/25/docs/api/java.base...</a></p>
]]></description><pubDate>Sat, 22 Aug 2026 08:41:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49397819</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=49397819</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49397819</guid></item><item><title><![CDATA[New comment by _old_dude_ in "What I love about Django"]]></title><description><![CDATA[
<p>It's not hate, it's not wanted to be associated with:<p>see <a href="https://victorwynne.com/dhh/" rel="nofollow">https://victorwynne.com/dhh/</a></p>
]]></description><pubDate>Thu, 06 Aug 2026 10:20:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=49194787</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=49194787</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49194787</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28"]]></title><description><![CDATA[
<p>For me, the difference is that if methods are inlined, the compiler is still required to do a copy for structs but not for value classes.<p>I do not know how this is called.</p>
]]></description><pubDate>Fri, 19 Jun 2026 09:13:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=48596537</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=48596537</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48596537</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28"]]></title><description><![CDATA[
<p>I think pass by copy is a consequence of being modifiable.<p>The other solution is to stack allocate and pass a pointer but as i said, unlike in C#, i do not think it's possible to do that in Java.<p>In Go, you can stack allocate but when you send a pointer (that escapes), the compiler will heap allocate the object.</p>
]]></description><pubDate>Fri, 19 Jun 2026 08:39:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48596311</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=48596311</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48596311</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28"]]></title><description><![CDATA[
<p>The article has a section about that.<p>For me, a struct in C/C# can be modified and is passed by copy while a value class can not be modified and is passed by value.<p>I do not think you can do stack allocation in Java.</p>
]]></description><pubDate>Fri, 19 Jun 2026 08:12:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=48596120</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=48596120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48596120</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Python 3.14 garbage collection rigamarole"]]></title><description><![CDATA[
<p>The usual GC tradeoff is between memory and CPU performance.
If you set the memory max high, the GC will run less often, you get less pause time.<p>So I do not understand why it's a surprise that minimizing the pause time requires more memory. Is it because there is no knob to set either the max pause time or the max memory ?</p>
]]></description><pubDate>Sun, 14 Jun 2026 08:29:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48525326</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=48525326</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48525326</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Python JIT project was asked to pause development"]]></title><description><![CDATA[
<p>I agree.
And the next section is very clear that they want to kill the project.<p><pre><code>  > For example, rather than proposing one single concrete JIT implementation,
  > it may make more sense for the PEP to describe a JIT infrastructure that
  > can support multiple implementation strategies.
  > Since many different and promising JIT tracing approaches continue to be proposed,
  > we believe the infrastructure should make it easy to experiment with and evaluate
  > those approaches within CPython rather than be highly coupled with a single strategy.
</code></pre>
Allowing multiple strategies is far harder and as far as I know, JIT tracing is still unproven.</p>
]]></description><pubDate>Sat, 06 Jun 2026 17:36:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48427144</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=48427144</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48427144</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>You need more than that for the example with setTimeout().
It requires to be able to freeze the stack and then go back later.<p>You need stackful coroutine (like goroutine) for that.</p>
]]></description><pubDate>Sat, 30 May 2026 10:23:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334660</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=48334660</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334660</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Anthropic Is Preparing for IPO and We Should Be Worried"]]></title><description><![CDATA[
<p>If you do not block 3rd party harness,
people will discover that a good harness is more important than a good model.</p>
]]></description><pubDate>Tue, 19 May 2026 14:35:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48193867</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=48193867</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48193867</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Where to buy a non-Apple, non-Google smartphone"]]></title><description><![CDATA[
<p>Yes, and let's not forget Stephen Elop's 'Burning Platform' Memo<p><a href="https://www.wsj.com/articles/BL-TEB-2031" rel="nofollow">https://www.wsj.com/articles/BL-TEB-2031</a></p>
]]></description><pubDate>Sat, 16 May 2026 12:09:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48159462</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=48159462</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48159462</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Want to Write a Compiler? Just Read These Two Papers (2008)"]]></title><description><![CDATA[
<p>Parser generators are great in Python (Lark for me) so you can iterate fast and get a runtime spec of your grammar.<p>A hand-written recursive descent parser is something you do later when you start to industrialize your code, to get better error messages, make the parser incremental, etc.<p>Bison/ANTLR are code generators, they do not fit well in that model.</p>
]]></description><pubDate>Wed, 15 Apr 2026 13:02:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47778414</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=47778414</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47778414</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Union types in C# 15"]]></title><description><![CDATA[
<p>In C#, all instances have a class, so there is already a discriminant, the class itself.<p>In the article, the example with the switch works because it switches on the class of the instance.</p>
]]></description><pubDate>Wed, 08 Apr 2026 12:41:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47689386</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=47689386</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47689386</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Scala 3 slowed us down?"]]></title><description><![CDATA[
<p>In Scala 3, the inline keyword is part of the macro system.<p>When inline is used on a parameter, it instructs the compiler to inline the expression at the call site. If the expression is substantial, this creates considerable work for the JIT compiler.<p>Requesting inlining at the compiler level (as opposed to letting the JIT handle it) is risky unless you can guarantee that a later compiler phase will simplify the inlined code.<p>There's an important behavioral difference between Scala 2 and 3: in 2, @inline was merely a suggestion to the compiler, whereas in 3, the compiler unconditionally applies the inline keyword. Consequently, directly replacing @inline with inline when migrating from 2 to 3 is a mistake.</p>
]]></description><pubDate>Sun, 07 Dec 2025 16:59:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=46183120</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=46183120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46183120</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Show HN: DBOS Java – Postgres-Backed Durable Workflows"]]></title><description><![CDATA[
<p>There is a modern equivalent based on Linux criu.<p><a href="https://github.com/CRaC/" rel="nofollow">https://github.com/CRaC/</a></p>
]]></description><pubDate>Fri, 14 Nov 2025 10:57:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=45925727</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=45925727</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45925727</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Ruby already solved my problem"]]></title><description><![CDATA[
<p>Yes, the version in Java is clearly less elegant.
Java has map+lambda and compareTo (<=>) but no tuple assignemnt and no splat.<p><pre><code>    record AppVersion(int major, int minor, int patch) implements Comparable<AppVersion> {
      public static AppVersion of(String version) {
        var array = Arrays.copyOf(Arrays.stream(version.split("\\.")).mapToInt(Integer::parseInt).toArray(), 3);
        return new AppVersion(array[0], array[1], array[2]);
      }

      public int compareTo(AppVersion other) {
        return Comparator.comparingInt(AppVersion::major)
            .thenComparingInt(AppVersion::minor)
            .thenComparingInt(AppVersion::patch)
            .compare(this, other);
      }

      public String toString() {
        return "%d.%d.%d".formatted(major, minor, patch);
      }
    }</code></pre></p>
]]></description><pubDate>Fri, 07 Nov 2025 22:58:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=45852267</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=45852267</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45852267</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Unexpected inconsistency in records"]]></title><description><![CDATA[
<p>For the record (sorry), I believe C# uses the clone operation because records support inheritance.<p>For me, this is where lies the design flaw, trying to support both inheritance and be immutability at the same time.</p>
]]></description><pubDate>Tue, 22 Jul 2025 13:07:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=44646412</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=44646412</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44646412</guid></item><item><title><![CDATA[New comment by _old_dude_ in "U.S. bombs Iranian nuclear sites"]]></title><description><![CDATA[
<p>> Libya was bombed primarily by France and then other NATO countries for no good reason<p><a href="https://en.wikipedia.org/wiki/Alleged_Libyan_financing_in_the_2007_French_presidential_election" rel="nofollow">https://en.wikipedia.org/wiki/Alleged_Libyan_financing_in_th...</a></p>
]]></description><pubDate>Sun, 22 Jun 2025 14:43:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=44347324</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=44347324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44347324</guid></item><item><title><![CDATA[New comment by _old_dude_ in "LLMs pose an interesting problem for DSL designers"]]></title><description><![CDATA[
<p>And AISQL is a thing ...<p><pre><code>  https://quickstarts.snowflake.com/guide/getting-started-with-cortex-aisql/index.html
</code></pre>
I'm glad i'm retired.</p>
]]></description><pubDate>Tue, 17 Jun 2025 21:50:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=44304328</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=44304328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44304328</guid></item></channel></rss>