<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>Thu, 09 Apr 2026 03:46:21 +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 "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><item><title><![CDATA[New comment by _old_dude_ in "CheerpJ 4.1: Java in the browser, now supporting Java 17 (preview)"]]></title><description><![CDATA[
<p>Java Almanac has a list of all features
  <a href="https://javaalmanac.io/features/" rel="nofollow">https://javaalmanac.io/features/</a><p>And the main page let you compare API versions
  <a href="https://javaalmanac.io/" rel="nofollow">https://javaalmanac.io/</a></p>
]]></description><pubDate>Wed, 28 May 2025 11:16:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=44114754</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=44114754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44114754</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Android and Wear OS are getting a redesign"]]></title><description><![CDATA[
<p>> at least I know that the phone will be supported for at least 4 years<p>It's 4 (mid) to 7 years (flagship) for Samsung.<p><a href="https://www.androidauthority.com/samsung-android-updates-1148888/" rel="nofollow">https://www.androidauthority.com/samsung-android-updates-114...</a></p>
]]></description><pubDate>Tue, 13 May 2025 20:34:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=43977410</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=43977410</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43977410</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Strings Just Got Faster"]]></title><description><![CDATA[
<p>OOP is great for libraries but leads to overly complex codes for applications.<p>For a long time, Java was like, every classes is a library, i do not think it's a failure of OOP, it's a failure of Java.<p>But I'm optimistic, I choose to see recent additions like records and pattern matching has a step in the right direction.</p>
]]></description><pubDate>Sat, 03 May 2025 10:18:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=43878047</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=43878047</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43878047</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Strings Just Got Faster"]]></title><description><![CDATA[
<p>I've just tried to change a field of an instance of a record using reflection, and it's not possible, even with setAccessible(true).</p>
]]></description><pubDate>Fri, 02 May 2025 21:27:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=43874765</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=43874765</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43874765</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Strings Just Got Faster"]]></title><description><![CDATA[
<p>In Java, constants are declared as static final.<p><pre><code>  static final Complex CONSTANT = new Complex(1, 2);
</code></pre>
If you want a lazy initialized constant, you want a stable value<p><pre><code>  static final StableValue<Complex> STABLE_VALUE = StableValue.of();

  Complex getLazyConstant() {
    return STABLE_VALUE.orElseGet(() -> new Complex(1, 2))
  }
</code></pre>
If you want the fields of a constant to be constant too, Complex has to be declared has a record.</p>
]]></description><pubDate>Fri, 02 May 2025 21:25:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=43874744</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=43874744</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43874744</guid></item><item><title><![CDATA[New comment by _old_dude_ in "On JavaScript's Weirdness"]]></title><description><![CDATA[
<p>In JavaScript,
a 'let' inside the initializer of a for loop is captured by value, all the others are captured by reference.<p>I think it's fair to call that semantics "implicit".</p>
]]></description><pubDate>Fri, 04 Apr 2025 14:08:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=43582648</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=43582648</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43582648</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Tail Call Recursion in Java with ASM (2023)"]]></title><description><![CDATA[
<p>Parroting something i have heard at a Java conference several years ago, tail recursion remove stack frames but the security model is based on stack frames, so it has to be a JVM optimization, not a compiler optimization.<p>I've no idea if this fact still holds when the security manager will be removed.</p>
]]></description><pubDate>Sun, 30 Mar 2025 15:20:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=43524861</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=43524861</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43524861</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Oracle justified its JavaScript trademark with Node.js–now it wants that ignored"]]></title><description><![CDATA[
<p>I'm sympathetic to the points being made but the argument that Oracle does not have its own JavaScript runtime does not hold.
An OracleBD is able to execute triggers written in JavaScript since quite some time.<p>see <a href="https://blogs.oracle.com/java/post/multilingual-engine-executing-javascript-in-oracle%C2%A0database" rel="nofollow">https://blogs.oracle.com/java/post/multilingual-engine-execu...</a></p>
]]></description><pubDate>Wed, 05 Feb 2025 09:25:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=42946083</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=42946083</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42946083</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Mixin is a trait/mixin and bytecode weaving framework for Java using ASM"]]></title><description><![CDATA[
<p>Is their a design document, somewhere about this new library ?<p>The jep does not explain how to prepare to new Java bytecodes and future enhancements. Am i suppose to only run with the latest version of Java if i want to use that library ?</p>
]]></description><pubDate>Sat, 28 Dec 2024 15:45:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=42531808</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=42531808</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42531808</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Java 24 to Reduce Object Header Size and Save Memory"]]></title><description><![CDATA[
<p>> the default is trivial, it just returns the object's address<p>This was trivial a long time ago. Now, all Java GCs move objects in memory.</p>
]]></description><pubDate>Fri, 22 Nov 2024 18:32:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=42216223</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=42216223</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42216223</guid></item><item><title><![CDATA[New comment by _old_dude_ in "Bottles of OOP now available in Python"]]></title><description><![CDATA[
<p>Very true, in Java, at least in the last 20 years, inheritance is de-facto deprecated, all new bits and bolts like enums, annotations, lambdas or records do not support inheritance.<p>So you have to use composition.</p>
]]></description><pubDate>Wed, 20 Nov 2024 11:08:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=42192756</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=42192756</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42192756</guid></item><item><title><![CDATA[New comment by _old_dude_ in "COBOL has been “dead” for so long, my grandpa wrote about it"]]></title><description><![CDATA[
<p>COBOL changes very slowly, once in a decade or two.
Python does not offer support of a release for more than 3 years and a half [1].<p>[1] <a href="https://en.wikipedia.org/wiki/History_of_Python" rel="nofollow">https://en.wikipedia.org/wiki/History_of_Python</a></p>
]]></description><pubDate>Tue, 01 Oct 2024 20:20:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=41713653</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=41713653</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41713653</guid></item><item><title><![CDATA[New comment by _old_dude_ in "A Java language cumulative feature rollup"]]></title><description><![CDATA[
<p>I'm using Java Almanac [1].<p>[1] <a href="https://javaalmanac.io/" rel="nofollow">https://javaalmanac.io/</a></p>
]]></description><pubDate>Thu, 29 Aug 2024 16:11:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=41392338</link><dc:creator>_old_dude_</dc:creator><comments>https://news.ycombinator.com/item?id=41392338</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41392338</guid></item></channel></rss>