<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: herrington_d</title><link>https://news.ycombinator.com/user?id=herrington_d</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 30 Apr 2026 04:46:10 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=herrington_d" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by herrington_d in "Kotlin creator's new language: talk to LLMs in specs, not English"]]></title><description><![CDATA[
<p>Isn't the case study.... too contrived and trivial? The largest code change is 800 lines so it can readily fit in a model's context.<p>However, there is no case for more complicated, multi-file changes or architecture stuff.</p>
]]></description><pubDate>Thu, 12 Mar 2026 16:28:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47353330</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=47353330</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47353330</guid></item><item><title><![CDATA[New comment by herrington_d in "Show HN: I ported Tree-sitter to Go"]]></title><description><![CDATA[
<p>I also have a tree-sitter Rust rewrite. Though I cannot find it more useful for end users... <a href="https://github.com/HerringtonDarkholme/tree-sitter" rel="nofollow">https://github.com/HerringtonDarkholme/tree-sitter</a></p>
]]></description><pubDate>Wed, 25 Feb 2026 23:11:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47159378</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=47159378</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47159378</guid></item><item><title><![CDATA[New comment by herrington_d in "Typed languages are better suited for vibecoding"]]></title><description><![CDATA[
<p>it does not always work in my experience due to complex type definitions. Also extra tool calls and time are needed to fix linting.</p>
]]></description><pubDate>Mon, 04 Aug 2025 02:44:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=44781665</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=44781665</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44781665</guid></item><item><title><![CDATA[New comment by herrington_d in "Typed languages are better suited for vibecoding"]]></title><description><![CDATA[
<p>There are researches backing some sort of "typed language is better for LLM".
Like <a href="https://arxiv.org/abs/2504.09246" rel="nofollow">https://arxiv.org/abs/2504.09246</a>, Type-Constrained Code Generation with Language Models, where LLM's output is constrainted by type checkers.<p>Also <a href="https://arxiv.org/abs/2406.03283" rel="nofollow">https://arxiv.org/abs/2406.03283</a>, Enhancing Repository-Level Code Generation with Integrated Contextual Information, uses staic analyzers to produce prompts with more context info.<p>Yet, the argument does directly translate to the conclusion that typed language is rigorously better for LLM without external tools. However, typed language and its static analysis information do seem to help LLM.</p>
]]></description><pubDate>Mon, 04 Aug 2025 01:46:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=44781397</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=44781397</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44781397</guid></item><item><title><![CDATA[New comment by herrington_d in "Typed languages are better suited for vibecoding"]]></title><description><![CDATA[
<p>The logic above can support exactly the opposite conclusion: LLM can do dynamic typed language better since it does not need to solve type errors and save several context tokens.<p>Practically, it was reported that LLM-backed coding agents just worked around type errors by using `any` in a gradually typed language like TypeScript. I also personally observed such usage multiple times.<p>I also tried using LLM agents with stronger languages like Rust. When complex type errors occured, the agents struggled to fix them and eventually just used `todo!()`<p>The experience above can be caused by insufficient training data. But it illustrates the importance of eval instead of ideological speculation.</p>
]]></description><pubDate>Mon, 04 Aug 2025 01:36:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=44781363</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=44781363</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44781363</guid></item><item><title><![CDATA[New comment by herrington_d in "AST-Grep [video]"]]></title><description><![CDATA[
<p>Hi, ast-grep author here. thanks for sharing the video!<p>production quality is amazing! I also did some youtube video recently. It is not easy and end product is far from polished.<p>Really appreciate your help introducing the tool to more people, thanks!</p>
]]></description><pubDate>Mon, 09 Jun 2025 21:27:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=44229709</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=44229709</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44229709</guid></item><item><title><![CDATA[New comment by herrington_d in "Why Algebraic Effects?"]]></title><description><![CDATA[
<p>One thing AE provides but not coroutines is type safety. More concretely AE can specify what a function can do and cannot do lexically in code. A generator/coroutine cannot.<p>For example, a function annotated with say `query_db(): User can Datebase` means the function can call database and the caller must provide a `Database` handler to call the `query_db`.<p>The constraint of what can do and not is pretty popular in other programming fields, most notably, NextJS. A server component CANNOT use client feature and a client component CANNOt access server db.</p>
]]></description><pubDate>Sat, 24 May 2025 19:23:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=44083228</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=44083228</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44083228</guid></item><item><title><![CDATA[New comment by herrington_d in "Better Error Handling"]]></title><description><![CDATA[
<p>the blog lacks the review of one critical player effect.ts
<a href="https://effect.website/docs/error-management/two-error-types/" rel="nofollow">https://effect.website/docs/error-management/two-error-types...</a></p>
]]></description><pubDate>Mon, 21 Apr 2025 00:55:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=43747694</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=43747694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43747694</guid></item><item><title><![CDATA[New comment by herrington_d in "CCL: Categorical Configuration Language"]]></title><description><![CDATA[
<p>Calling other languages like "none of the tooling" in the "why" section sounds like a huge self-roasting since CCL does not have, say, highlighting/LSP/FFI for adoption.</p>
]]></description><pubDate>Sat, 11 Jan 2025 16:59:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=42667155</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42667155</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42667155</guid></item><item><title><![CDATA[New comment by herrington_d in "The evolution of a structural code editor"]]></title><description><![CDATA[
<p>My point is that type error recovery is the property of the type system. Not the property of structural code editor.</p>
]]></description><pubDate>Mon, 06 Jan 2025 22:55:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=42617023</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42617023</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42617023</guid></item><item><title><![CDATA[New comment by herrington_d in "The evolution of a structural code editor"]]></title><description><![CDATA[
<p>> Better type information. Because the program is always in a valid state the type checker can always run and give meaningful feedback.<p>Note that programs can be syntactically well-formed but ill-typed. For example `let x = true + 1` has valid syntax but produces an "undefined" type for the variable `x`, if the type system does not support type error recovery.<p>A quote from the great paper from POPL 2024, <a href="https://hazel.org/papers/marking-popl24.pdf" rel="nofollow">https://hazel.org/papers/marking-popl24.pdf</a><p>> If a type error appears _anywhere_, the program is formally meaningless _everywhere_</p>
]]></description><pubDate>Mon, 06 Jan 2025 18:15:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=42613356</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42613356</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42613356</guid></item><item><title><![CDATA[New comment by herrington_d in "The evolution of a structural code editor"]]></title><description><![CDATA[
<p>This is a pretty fair comment. I wonder how structural editing figures out things like formatting/searching/diffing and copy/paste across different editors.</p>
]]></description><pubDate>Mon, 06 Jan 2025 18:04:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=42613201</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42613201</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42613201</guid></item><item><title><![CDATA[New comment by herrington_d in "Skip – The Reactive Framework"]]></title><description><![CDATA[
<p>Since Skip is maintaining a reactive cache. How is the cached stored? 
I would speculate it would a distributed in-memory database so the computation service can scale. But I wonder how the system can recover and rebuild the cache if the cache is down.</p>
]]></description><pubDate>Sun, 29 Dec 2024 02:04:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=42536776</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42536776</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42536776</guid></item><item><title><![CDATA[New comment by herrington_d in "Design Space for Code Search Query"]]></title><description><![CDATA[
<p>The feature dates way back to perhaps 2006, per Jetbrains' PDF archive[1]. Jb also updated their structural search UI/UX in 2018[2]. It is possible that users do not buy in the idea of SSR. Alternatively, it may be caused by the fact that Jb SSR's mixed  language support. [3][4][5]<p>[1] <a href="https://www.jetbrains.com/idea/docs/ssr.pdf" rel="nofollow">https://www.jetbrains.com/idea/docs/ssr.pdf</a>
[2] <a href="https://www.youtube.com/watch?v=YeGPO-UHTbs" rel="nofollow">https://www.youtube.com/watch?v=YeGPO-UHTbs</a>
[3] <a href="https://www.jetbrains.com/help/idea/structural-search-and-replace.html" rel="nofollow">https://www.jetbrains.com/help/idea/structural-search-and-re...</a>
[4] <a href="https://www.jetbrains.com/help/go/structural-search-and-replace.html" rel="nofollow">https://www.jetbrains.com/help/go/structural-search-and-repl...</a>
[5] <a href="https://www.jetbrains.com/help/pycharm/structural-search-and-replace.html" rel="nofollow">https://www.jetbrains.com/help/pycharm/structural-search-and...</a></p>
]]></description><pubDate>Thu, 26 Dec 2024 15:38:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=42515793</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42515793</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42515793</guid></item><item><title><![CDATA[New comment by herrington_d in "[dead]"]]></title><description><![CDATA[
<p>This blog post delves into the design space of code search, with a particular focus on how queries are designed and used.</p>
]]></description><pubDate>Thu, 26 Dec 2024 00:30:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=42512249</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42512249</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42512249</guid></item><item><title><![CDATA[New comment by herrington_d in "[dead]"]]></title><description><![CDATA[
<p>We're thrilled to introduce typed AST in @ast-grep/napi, addressing a long-requested feature for AST manipulation from the early days of this project.<p>In this blog post, we will delve into the challenges addressed by this feature and explore the design that shaped its implementation. We also believe this post can serve as a general guide to crafting balanced TypeScript types.</p>
]]></description><pubDate>Sun, 22 Dec 2024 16:35:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=42487379</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42487379</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42487379</guid></item><item><title><![CDATA[New comment by herrington_d in "The Acton Programming Language"]]></title><description><![CDATA[
<p>Curiously the claim sounds like learning this programming language is equivalent to reading the whole DDIA book. :P</p>
]]></description><pubDate>Fri, 06 Dec 2024 05:57:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=42336825</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42336825</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42336825</guid></item><item><title><![CDATA[New comment by herrington_d in "Show HN: Scooter – Interactive find and replace in the terminal"]]></title><description><![CDATA[
<p>Cool! is it possible to support structural search like ast-grep[1]? ast-grep has some interactive mode but it is nothing near Scooter.<p>1: <a href="https://ast-grep.github.io/" rel="nofollow">https://ast-grep.github.io/</a></p>
]]></description><pubDate>Fri, 15 Nov 2024 21:50:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=42151573</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42151573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42151573</guid></item><item><title><![CDATA[New comment by herrington_d in "Mergiraf: a syntax-aware merge driver for Git"]]></title><description><![CDATA[
<p>Yes, ast-grep already has its own rule syntax [1]. But still parser performance and binary size are critical factors for a general tool.<p><a href="https://ast-grep.github.io/guide/rule-config.html" rel="nofollow">https://ast-grep.github.io/guide/rule-config.html</a></p>
]]></description><pubDate>Mon, 11 Nov 2024 03:58:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=42104499</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42104499</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42104499</guid></item><item><title><![CDATA[New comment by herrington_d in "Mergiraf: a syntax-aware merge driver for Git"]]></title><description><![CDATA[
<p>Hi! ast-grep[1] author here. It is a tree-sitter based syntax tool to search tool.<p>I wonder how you transition from tree-sitter to other builtin parsers? Tree-sitter gave a unified interface to all languages. Using language native parsers will require significant work for various FFI if I am not wrong.<p>[1]: <a href="https://ast-grep.github.io/" rel="nofollow">https://ast-grep.github.io/</a></p>
]]></description><pubDate>Sun, 10 Nov 2024 05:51:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=42098708</link><dc:creator>herrington_d</dc:creator><comments>https://news.ycombinator.com/item?id=42098708</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42098708</guid></item></channel></rss>