<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: xiaq</title><link>https://news.ycombinator.com/user?id=xiaq</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 15 Apr 2026 06:35:22 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=xiaq" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by xiaq in "Elvish – Scripting language and interactive shell"]]></title><description><![CDATA[
<p>Elvish author here, seems like I missed the annual posting of Elvish to HN this time :)</p>
]]></description><pubDate>Mon, 05 May 2025 15:03:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=43895870</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=43895870</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43895870</guid></item><item><title><![CDATA[New comment by xiaq in "3blue1brown YouTube Bitcoin video taken down as copyright violation"]]></title><description><![CDATA[
<p>> Later, it will be a rejection of the insurance claim for a kid's life-saving surgery.<p>According to this article, it's been happening for a while now: <a href="https://www.statnews.com/2023/03/13/medicare-advantage-plans-denial-artificial-intelligence/" rel="nofollow">https://www.statnews.com/2023/03/13/medicare-advantage-plans...</a></p>
]]></description><pubDate>Mon, 06 Jan 2025 23:29:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=42617349</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=42617349</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42617349</guid></item><item><title><![CDATA[New comment by xiaq in "A common urban intersection in the Netherlands (2018)"]]></title><description><![CDATA[
<p>Such old urban places would just be car-free in the Netherlands (sometimes with limited access for delivery and emergency vehicles), a trend fortunately becoming popular in other European cities now.<p>The “urban” in the title is a bit misleading, this intersection is definitely more suburban, or on the boundary of an urban center. (Or rather, the author has a different definition of urban - in my definition cities like den Bosch are really just a small medieval urban core surrounded by continuous medium-density suburban neighborhoods.)</p>
]]></description><pubDate>Thu, 21 Nov 2024 10:48:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=42202983</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=42202983</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42202983</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>I would love to see the diff between the hand-rolled recursive-descent parser and the ANTLR syntax!<p>I certainly feel the amount of boilerplate in my hand-rolled recursive-descent parser is manageable. Of course it's not as succinct as an EBNF grammar:<p>- For example, you have to write an actual loop (with "for" and looping conditions) instead of just * for repetition<p>- The Go formatter demands a newline in most control flows<p>- Go is also not the most succinct language in general<p>So you do end up with many more lines of code. But at the end of the day, the structure of each parsing function is remarkably similar to a production rule, and for simpler ones I can mentally map between them pretty easily, with the added benefit of being able to insert code anywhere if I need something beyond old-school context-free parsing.</p>
]]></description><pubDate>Sat, 31 Aug 2024 10:46:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=41407858</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41407858</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41407858</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>Yeah, ultimately there's an element of personal taste at play.<p>The authoritative tone of "how to write ..." is meant in jest, but obviously by doing that I risk being misunderstood. A more accurate title would be "how I wrote ...", but it's slightly boring and I was trying hard to get my talk proposal accepted you see :)</p>
]]></description><pubDate>Sat, 31 Aug 2024 10:42:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=41407839</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41407839</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41407839</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>History entries are kept indefinitely.</p>
]]></description><pubDate>Fri, 30 Aug 2024 23:26:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=41405420</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41405420</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41405420</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>FWIW, I've just added this instruction to <a href="https://elv.sh/get/default-shell.html#vim-/-neovim" rel="nofollow">https://elv.sh/get/default-shell.html#vim-/-neovim</a></p>
]]></description><pubDate>Fri, 30 Aug 2024 22:32:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=41405114</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41405114</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41405114</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>Did you set your login shell to Elvish? Vim unfortunately relies on your shell being a POSIX shell, but you can fix that with "set shell=/bin/sh" in your rc file.</p>
]]></description><pubDate>Fri, 30 Aug 2024 22:20:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=41405024</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41405024</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41405024</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>Thanks, I appreciate the comment the appreciation :)</p>
]]></description><pubDate>Fri, 30 Aug 2024 22:02:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=41404921</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41404921</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41404921</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>Thanks! Glad that the talk is working as a marketing pitch for Elvish :)</p>
]]></description><pubDate>Fri, 30 Aug 2024 22:01:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=41404916</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41404916</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41404916</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>Thanks! Murex talk when??? :)</p>
]]></description><pubDate>Fri, 30 Aug 2024 21:32:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=41404702</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41404702</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41404702</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>Thanks for your question and glad that you enjoyed it!</p>
]]></description><pubDate>Fri, 30 Aug 2024 20:49:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=41404281</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41404281</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41404281</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>Right, I may have forgot to mention that lexerless parsers are somewhat unusual.<p>I didn't have much time in the talk to go into the reason, so here it is:<p>- You'll need a more complex lexer to parse a shell-like syntax. For example, one common thing you do with lexers is get rid of whitespaces, but shell syntax is whitespace sensitive: "a$x" and "a $x" (double quotes not part of the code) are different things: the first is a single word containing a string concatenation, the second is two separate words.<p>- If your parser backtracks a lot, lexing can improve performance: you're not going back characters, only tokens (and there are fewer tokens than characters). Elvish's parser doesn't backtrack. (It does use lookahead fairly liberally.)<p>Having a lexerless parser does mean that you have to constantly deal with whitespaces in every place though, and it can get a bit annoying. But personally I like the conceptual simplicity and not having to deal with silly tokens like LBRACE, LPAREN, PIPE.<p>I have not used parser generators enough to comment about the benefits of using them compared to writing a parser by hand. The handwritten one works well so far :)</p>
]]></description><pubDate>Fri, 30 Aug 2024 20:48:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=41404279</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41404279</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41404279</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>I gave a talk about the design: <a href="https://www.youtube.com/watch?v=wrl9foNXdgM" rel="nofollow">https://www.youtube.com/watch?v=wrl9foNXdgM</a><p>As the sibling comment mentioned, you can find documentation on Elvish itself on the website <a href="https://elv.sh" rel="nofollow">https://elv.sh</a>. There are tutorials and (not 100% but fairly complete) reference documents.</p>
]]></description><pubDate>Fri, 30 Aug 2024 20:30:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=41404151</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41404151</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41404151</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>I don't have a version with captions, sorry. You can find the slidedeck at <a href="https://github.com/elves/elvish/blob/master/website/slides/2024-08-gophercon-uk.md">https://github.com/elves/elvish/blob/master/website/slides/2...</a><p>The remaining 8% mostly falls into the following categories:<p>- Code that use OS functionalities that are cumbersome to mock in tests<p>- Code paths that are triggered relatively rarely and I was simply too lazy to add tests for them<p>Nothing is impossible to cover, but for whatever reason it was too much work for me when I wrote the code.<p>However, it's worth mentioning that I only settled on the transcript test pattern fairly recently, and if I were to rewrite or refactor some of the untested code today I would add tests for them, because the cost of adding tests has been lowered considerably. So Elvish's test coverage is still increasing slowly as the cost of testing decreases.</p>
]]></description><pubDate>Fri, 30 Aug 2024 19:45:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=41403852</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41403852</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41403852</guid></item><item><title><![CDATA[New comment by xiaq in "Language and shell in Go with 92% test coverage and instant CI/CD [video]"]]></title><description><![CDATA[
<p>Hey, it's my talk, AMA :)<p>If you're interested in Elvish, you may also be interested in the talk on its design - <a href="https://www.youtube.com/watch?v=wrl9foNXdgM" rel="nofollow">https://www.youtube.com/watch?v=wrl9foNXdgM</a></p>
]]></description><pubDate>Fri, 30 Aug 2024 15:18:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=41401556</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41401556</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41401556</guid></item><item><title><![CDATA[Designing a shell language for the 2010s [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=wrl9foNXdgM">https://www.youtube.com/watch?v=wrl9foNXdgM</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41271265">https://news.ycombinator.com/item?id=41271265</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 16 Aug 2024 23:26:13 +0000</pubDate><link>https://www.youtube.com/watch?v=wrl9foNXdgM</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=41271265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41271265</guid></item><item><title><![CDATA[New comment by xiaq in "Cosmopolitan v3.5"]]></title><description><![CDATA[
<p>Look for “POSIX” on <a href="https://justine.lol/cosmo3/" rel="nofollow">https://justine.lol/cosmo3/</a></p>
]]></description><pubDate>Mon, 24 Jun 2024 12:47:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=40775372</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=40775372</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40775372</guid></item><item><title><![CDATA[New comment by xiaq in "I'm forking Ladybird and stepping down as SerenityOS BDFL"]]></title><description><![CDATA[
<p>That seems to be a bad translation, the original text means something like “sharpen something fully and it won’t last so long” (presumably due to it being more brittle). The text (like the rest of Tao Te Ching) is pretty vague and doesn’t actually refer to knives, so it could also be read metaphorically.</p>
]]></description><pubDate>Tue, 04 Jun 2024 02:37:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=40570157</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=40570157</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40570157</guid></item><item><title><![CDATA[New comment by xiaq in "Elvish, expressive programming language and a versatile interactive shell"]]></title><description><![CDATA[
<p>Oh, I definitely didn't read your entire comment as negative, just the way you used "elvishism". Elvish definitely has its quirks! But I hope you'll find it a compelling package overall :)</p>
]]></description><pubDate>Fri, 10 May 2024 17:59:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=40321911</link><dc:creator>xiaq</dc:creator><comments>https://news.ycombinator.com/item?id=40321911</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40321911</guid></item></channel></rss>