<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: owlstuffing</title><link>https://news.ycombinator.com/user?id=owlstuffing</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 06 Apr 2026 02:12:08 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=owlstuffing" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by owlstuffing in "Cursor 3"]]></title><description><![CDATA[
<p>It’s not their code, and it’s not for them to understand. The endgame here is that code as we know it today is the “ASM” of tomorrow. The programming language of tomorrow is natural human-spoken language used carefully and methodically to articulate what the agent should build. At least this is the world we appear to be heading toward… quickly.</p>
]]></description><pubDate>Fri, 03 Apr 2026 02:03:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47622473</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47622473</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47622473</guid></item><item><title><![CDATA[New comment by owlstuffing in "Cursor 3"]]></title><description><![CDATA[
<p>There is a large and growing segment of executives in the software world that is pushing this model hard, like betting their career on it. To them the “dark factory” is an inevitability. As a consequence, not only are developers choosing this path, but the companies they work for are in varying degrees selecting this path for them.</p>
]]></description><pubDate>Fri, 03 Apr 2026 01:50:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47622423</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47622423</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47622423</guid></item><item><title><![CDATA[New comment by owlstuffing in "The Windows equivalents of the most used Linux commands"]]></title><description><![CDATA[
<p>Not having to run a mess of Linux commands to install software.</p>
]]></description><pubDate>Thu, 02 Apr 2026 06:01:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47610497</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47610497</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47610497</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>"Fat" runtime? Go? Nah.<p>Go's runtime is thin: goroutines, a GC specialized for concurrency, networking, and little else. Java, by contrast, assumes a JVM plus massive stdlibs to handle everything from enterprise apps to big-data, making its platform genuinely "fat" and layered. Other Java-tier languages, C# included, follow the same model.</p>
]]></description><pubDate>Thu, 19 Mar 2026 19:03:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47444256</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47444256</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47444256</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>Now that Go is styled as a Java competitor its framing is different. But here's an old golang.org archive for fun:<p><a href="https://web.archive.org/web/20091113154831/http://golang.org/doc/go_for_cpp_programmers.html" rel="nofollow">https://web.archive.org/web/20091113154831/http://golang.org...</a><p>The main page title *Go: a systems programming language*<p>It still sports all the low-level stuff too, pointer arithmetic and all.</p>
]]></description><pubDate>Thu, 19 Mar 2026 04:38:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47435014</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47435014</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47435014</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>It's replete with oddities and limitations that signal "ah, this is because systems language."<p>Go’s type system, for example, is very much a systems-language artifact. The designers chose structural typing because it was lighter weight, but provided enough type safety to get by. It sucks though for enterprise app development where your team (and your tooling) are desperate for nominal typing clarity and determinism.</p>
]]></description><pubDate>Thu, 19 Mar 2026 01:41:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47433731</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47433731</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47433731</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>> I think the reputation you mentioned. . .<p>Actually no. Go was designed from the beginning as a systems language as a C replacement.</p>
]]></description><pubDate>Wed, 18 Mar 2026 22:52:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47432409</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47432409</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47432409</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>Kotlin's "delegation" feature isn't <i>true</i> delegation, it's just call forwarding, which is better than nothing, but it falls down pretty quickly as an alternative to implementation inheritance.<p>The manifold project provides <i>true delegation</i>[1] for Java.<p>1. <a href="https://github.com/manifold-systems/manifold/blob/master/manifold-deps-parent/manifold-delegation/README.md" rel="nofollow">https://github.com/manifold-systems/manifold/blob/master/man...</a></p>
]]></description><pubDate>Wed, 18 Mar 2026 19:36:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47430413</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47430413</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47430413</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>> Maybe this is just a question of taste but I never could get along with Javas (or Kotlin's) tooling<p>Are you joking? IntelliJ is without a doubt the best dev tooling environment available.</p>
]]></description><pubDate>Wed, 18 Mar 2026 04:44:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47421672</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47421672</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47421672</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>"industry purposes" likely equates to "enterprise software development." And that assertion is 100% correct.</p>
]]></description><pubDate>Wed, 18 Mar 2026 02:51:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47421062</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47421062</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47421062</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>Go can't compete with Java bc it's not in the same category as Java.<p>- Java is a high-level, multi-paradigm programming language<p>- Go is designed as a systems language to supersede C projects at Google<p>Now Go identifies as a general purpose language that competes with Java? It's a free country, I guess.</p>
]]></description><pubDate>Wed, 18 Mar 2026 02:47:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47421049</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47421049</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47421049</guid></item><item><title><![CDATA[New comment by owlstuffing in "Java 26 is here"]]></title><description><![CDATA[
<p>> We now know that we prefer composition over inheritance<p>When people say "composition over inheritance" in Java discussions, they usually mean the trivial modeling rule: prefer has-a over is-a.<p>But that’s not what composition is really about.<p>The deeper idea is interface composition -- building types by composing multiple behavioral contracts behind a single cohesive surface.<p>Java provides inheritance and interfaces, but it doesn’t provide first-class delegation or traits. So most developers never really practice interface composition. They either subclass, or they wire objects together and expose the wiring.<p>The slogan survived. The concept mostly didn’t.<p>The manifold project, for example, experiments with language-level delegation to make interface composition practical with Java.<p><a href="https://github.com/manifold-systems/manifold/blob/master/manifold-deps-parent/manifold-delegation/README.md" rel="nofollow">https://github.com/manifold-systems/manifold/blob/master/man...</a></p>
]]></description><pubDate>Wed, 18 Mar 2026 02:25:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=47420938</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47420938</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47420938</guid></item><item><title><![CDATA[New comment by owlstuffing in "Rethinking Syntax: Binding by Adjacency"]]></title><description><![CDATA[
<p>Yes, the empty infix operator is often called the "juxt" operator, which is an apt term here.<p>However, I use the term "binding expressions" intentionally because there’s more going on than ordinary juxtaposition. In a normal juxt expression such as:<p><pre><code>    a b c
</code></pre>
the evaluation order is static and independent of the type system:<p><pre><code>    (a b) c
</code></pre>
With binding expressions the precedence is type-directed, so the type system determines which grouping is valid:<p><pre><code>    (a b) c
    a (b c)
</code></pre>
Additionally, the operation itself can be provided by either operand. For a given expression a b, the compiler may resolve it as:<p><pre><code>    a.prefixBind(b)
    b.postfixBind(a)
</code></pre>
For example:<p><pre><code>    10kg
</code></pre>
Here kg is a MassUnit, and MassUnit defines postfixBind(Number) returning Mass, so given there is no left-to-right binding, the expression resolves right-to-left as:<p><pre><code>    kg.postfixBind(10)
</code></pre>
So while juxtaposition is the syntactic surface, the semantics are type-directed binding.</p>
]]></description><pubDate>Tue, 10 Mar 2026 17:15:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47326107</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47326107</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47326107</guid></item><item><title><![CDATA[New comment by owlstuffing in "Florida judge rules red light camera tickets are unconstitutional"]]></title><description><![CDATA[
<p>> California's new speed camera pilot (AB 645) explicitly solves for this... like parking tickets<p>That makes the Florida judge's framing of red light cameras as a revenue generating scheme even <i>more</i> applicable. More than that, it ambiguates the crime.</p>
]]></description><pubDate>Tue, 10 Mar 2026 13:04:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47322740</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47322740</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47322740</guid></item><item><title><![CDATA[New comment by owlstuffing in "Rethinking Syntax: Binding by Adjacency"]]></title><description><![CDATA[
<p>> The drawback is that building an AST now requires a symbol table<p>Well, yes and no. During AST building a binding expression resolves as an <i>untyped</i> polyadic expression. Only later during the compiler's type attribution phase does a binding expression's structure resolve based on the operand types.<p><a href="https://github.com/manifold-systems/manifold/tree/master/manifold-deps-parent/manifold-ext#operator-precedence" rel="nofollow">https://github.com/manifold-systems/manifold/tree/master/man...</a><p>> in typical code you don’t have the case of constant values so often.<p>Agreed. It's not really useful with inlined expressions:<p><pre><code>   Schedule contacts.select(contactId) inputForm.getDateTime()
</code></pre>
but if you write it like:<p><pre><code>   var plumber = contacts.select(contactId)
   var date = inputForm.getDateTime()
   var building = findLocation(warehouse)
   Schedule plumber on date at building
</code></pre>
But, honestly, I can't say I personally use it that way ;)<p>Initially, I wrote it as a science extension to Java: <a href="https://github.com/manifold-systems/manifold/tree/master/manifold-deps-parent/manifold-science" rel="nofollow">https://github.com/manifold-systems/manifold/tree/master/man...</a></p>
]]></description><pubDate>Tue, 10 Mar 2026 05:38:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47319438</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47319438</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47319438</guid></item><item><title><![CDATA[New comment by owlstuffing in "Rethinking Syntax: Binding by Adjacency"]]></title><description><![CDATA[
<p>Author here.<p>Yes, technically this is a form of backtracking, similar to what a parser does. The key difference is that the search is drastically constrained by the type system: reductions are only attempted where the types actually support a binding operator. Unlike a parser exploring all grammar possibilities, this mechanism prunes most candidates automatically, so the compiler efficiently "solves" the expression rather than blindly exploring every syntactic alternative.<p>Here is the high-level explanation of the mechanism:<p><a href="https://github.com/manifold-systems/manifold/tree/master/manifold-deps-parent/manifold-ext#how-does-it-work" rel="nofollow">https://github.com/manifold-systems/manifold/tree/master/man...</a><p>But the short answer is that it’s not parser-style backtracking over a grammar.<p>The Java parser still produces a normal AST for the sequence of tokens. What happens afterward is a type-directed binding phase where adjacent expressions may bind if their types agree on a binding operator. The compiler effectively reduces the expression by forming larger typed expressions until it reaches a stable form.<p>The algorithm favors left associativity, but since a type can implement the binding operator as either the left or right operand, the overall structure of the expression can emerge in different ways depending on the participating types.<p>So rather than exploring grammar productions, the compiler is solving a set of <i>type-compatible reductions</i> across the expression.<p>For example:<p><pre><code>    2026 March 10
</code></pre>
reduces roughly like this:<p><pre><code>    (2026 (March 10))
    → March.postfixBind(2026)  // → LocalYearMonth
    → [retreat]                // → no binding with 10
    → March.prefixBind(10)     // → LocalMonthDay
    → .postfixBind(2026)       // → LocalDate
</code></pre>
And if `Month` binds with `Range<Integer>`:<p><pre><code>    2026 March 10 to 13
</code></pre>
can reduce as:<p><pre><code>    (2026 (March ((10 to) 13)))
</code></pre>
The meaning is therefore determined entirely by which types participate in binding e.g., `LocalDate`, `Month`, `Integer`, `Range`, etc. and which reductions they define.<p>If a competing interpretation exists but the types don’t support the necessary bindings, it simply never forms.<p>In that sense it behaves less like a traditional parser and more like a typed reduction system layered on top of the Java AST.</p>
]]></description><pubDate>Tue, 10 Mar 2026 04:54:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47319210</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47319210</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47319210</guid></item><item><title><![CDATA[New comment by owlstuffing in "If You Can't Own the PR, Please Don't Open One"]]></title><description><![CDATA[
<p>100% agree.<p>The frequency of primarily AI-guided PRs is getting out of hand, particularly the whole codebase oriented type: “this PR improves performance, fixes bugs, and refactors random chunks of code.” The cherry on top is the author never attempting to verify the claims of the PR.<p>A PR should be a focused, cohesive body of code that targets a predetermined, well articulated goal.<p>Personally, I do not review widely scoped PRs esp. the AI-driven ones. Wasted far too much time chasing down false positive claims and reviewing junk code.</p>
]]></description><pubDate>Sun, 08 Mar 2026 15:18:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47298012</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47298012</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47298012</guid></item><item><title><![CDATA[New comment by owlstuffing in "Optional/Named Arguments for Java"]]></title><description><![CDATA[
<p>Explores advanced optional parameters & named arguments as a Java compiler plugin. Complete IDE integration available with IntelliJ.<p>Key features<p>- Optional parameters -- Define default values directly in methods, constructors, and records<p>- Named arguments -- Call methods using parameter names for clarity and flexibility<p>- Flexible defaults -- Use expressions, reference earlier parameters, and access local methods and fields<p>- Customizable behavior -- Override default values in subclasses or other contexts<p>- Safe API evolution -- Add parameters or change defaults without breaking binary or source compatibility<p>- Eliminates overloads and builders -- Collapse boilerplate into a single, expressive method or constructor<p>- IDE-friendly -- Fully supported in IntelliJ IDEA and Android Studio</p>
]]></description><pubDate>Sun, 08 Mar 2026 14:21:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47297562</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47297562</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47297562</guid></item><item><title><![CDATA[Optional/Named Arguments for Java]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/manifold-systems/manifold/blob/master/manifold-deps-parent/manifold-params/README.md">https://github.com/manifold-systems/manifold/blob/master/manifold-deps-parent/manifold-params/README.md</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47297561">https://news.ycombinator.com/item?id=47297561</a></p>
<p>Points: 1</p>
<p># Comments: 1</p>
]]></description><pubDate>Sun, 08 Mar 2026 14:21:55 +0000</pubDate><link>https://github.com/manifold-systems/manifold/blob/master/manifold-deps-parent/manifold-params/README.md</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47297561</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47297561</guid></item><item><title><![CDATA[New comment by owlstuffing in "Rethinking Syntax: Binding by Adjacency"]]></title><description><![CDATA[
<p>What if these were real, type-safe expressions in Java:<p><pre><code>    2025 July 19   // → LocalDate  
    300M m/s       // → Velocity  
    1 to 10        // → Range<Int>  
    Schedule Alice Tues 3pm  // → CalendarEvent
</code></pre>
That's the idea behind binding expressions — a compiler plugin I built to explore what it would mean if adjacency had operator semantics. It lets adjacent expressions bind based on their static types, forming new expressions through type-directed resolution.<p>Details here: <a href="https://github.com/manifold-systems/manifold/blob/master/docs/articles/binding_exprs.md" rel="nofollow">https://github.com/manifold-systems/manifold/blob/master/doc...</a></p>
]]></description><pubDate>Sun, 08 Mar 2026 05:03:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47294573</link><dc:creator>owlstuffing</dc:creator><comments>https://news.ycombinator.com/item?id=47294573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47294573</guid></item></channel></rss>