<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: ossopite</title><link>https://news.ycombinator.com/user?id=ossopite</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 21 Jul 2026 20:05:26 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ossopite" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ossopite in "Hyprland 0.55 announced the switch to Lua for its config files"]]></title><description><![CDATA[
<p>I've seen this expressed similarly as the 'configuration complexity clock': <a href="https://mikehadlow.blogspot.com/2012/05/configuration-complexity-clock.html" rel="nofollow">https://mikehadlow.blogspot.com/2012/05/configuration-comple...</a><p>I like your spiral metaphor though, since you learn some things along the way.</p>
]]></description><pubDate>Mon, 20 Jul 2026 20:14:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48984292</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=48984292</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48984292</guid></item><item><title><![CDATA[New comment by ossopite in "C array types are weird"]]></title><description><![CDATA[
<p>As I recall, C# supports this in a completely sensible way by distinguishing a[i,j] and a[i][j]. If I understand right, in C, a[i][j] means what C# would spell a[i,j], which does seem rather surprising and inconsistent</p>
]]></description><pubDate>Wed, 27 May 2026 06:53:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48290634</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=48290634</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48290634</guid></item><item><title><![CDATA[New comment by ossopite in "-​-dangerously-skip-reading-code"]]></title><description><![CDATA[
<p>The docs/summaries part I can get behind if reviewed and improved by a human, but at least when working in pre-existing codebases, I tend to steer models away from writing comments, because I find that almost all comments they write are "not even wrong".<p>That is: they either reiterate what the code does, or would if the code were slightly clearer, or they tell half truths that are more confusing than helpful. Mostly they fail to emphasise the salient things, like the why over the what, that are not obvious from the code.</p>
]]></description><pubDate>Sun, 24 May 2026 11:08:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48256309</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=48256309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48256309</guid></item><item><title><![CDATA[New comment by ossopite in "Knitting bullshit"]]></title><description><![CDATA[
<p>The idea that we could create a world where 'a big part of the future of hobbies and entertainment' is people listening to meaningless words made up by machines that help them feel good about themselves sounds horrifying. How could anybody feel ok about that? What would it say about the society we've built?</p>
]]></description><pubDate>Wed, 06 May 2026 10:29:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48034591</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=48034591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48034591</guid></item><item><title><![CDATA[New comment by ossopite in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Right. Besides getting this incantation right, as gp did only after editing their comment, you also have to cast to create values of NewType. But generally you want to avoid casting in typescript if you care about type safety, so now everybody has to remember the rule that in this particular circumstance it's the right thing to do.<p>There are helper libraries to ease this (zod supports branded types, I think?), but I guess my general point is that while typescript might give you the ingredients you need to implement type safety in cases like this if you try really hard and remember all your rules everywhere, it doesn't come naturally so it's hard to maintain at scale.</p>
]]></description><pubDate>Sun, 03 May 2026 12:05:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47996109</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=47996109</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47996109</guid></item><item><title><![CDATA[New comment by ossopite in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>In a way I agree with you, and I'm not sure that what popular languages embrace or make it easy to follow this philosophy. My sense is that Erlang is still the leader.<p>But I did want to add something the article also touches on: types can be not only about ensuring safety or correctness at runtime, but also about representing knowledge by encoding the theory of how the code is supposed to work as far as is practical, in a way that is durable as contributors come and go from a codebase.<p>Admittedly this can come at the cost of making it slower to experiment on or evolve the code, so you have to think about how strongly you want to enforce something to avoid the rigidity being more painful than valuable. But it's generally a win for helping someone new to a codebase understand it before they change it.<p>Edit: another thought I had is that type mistakes do not always causes crashes. Silent corruption can be much more insidious, e.g. from confusing types which mean something different but are the same at the primitive level (e.g. a string, number or uuid)</p>
]]></description><pubDate>Sun, 03 May 2026 10:53:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47995638</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=47995638</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47995638</guid></item><item><title><![CDATA[New comment by ossopite in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>I'm not convinced it really works well in typescript. the lack of nominal types requires you to remember some pretty hacky incantations if you want something like a newtype wrapping a primitive type<p>my experience is that ocaml is more powerful than rust for enforcing this sort of type safety, because you have gadts that give you more expressive power, and polymorphic variants and object types (record row types) that give you more convenience. and the module system and functors of course.<p>you also avoid some abstraction limitations/difficulties that come from the rust borrow checker for places where garbage collection is just fine</p>
]]></description><pubDate>Sun, 03 May 2026 10:31:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47995510</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=47995510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47995510</guid></item><item><title><![CDATA[New comment by ossopite in "Reports of code's death are greatly exaggerated"]]></title><description><![CDATA[
<p>Did you write it or did an LLM?<p>I find some irony in seeing the telltale tropes of conventional LLM writing there</p>
]]></description><pubDate>Mon, 23 Mar 2026 08:24:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47486698</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=47486698</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47486698</guid></item><item><title><![CDATA[New comment by ossopite in "Cancellations in async Rust"]]></title><description><![CDATA[
<p>I think the send/recv with a timeout example is very interesting, because in a language where futures start running immediately without being polled, I think the situation is likely to be the opposite way around. send with a timeout is probably safe (you may still send if the timeout happened, which you might be sad about, but the message isn't lost), while recv with a timeout is probably unsafe, because you might read the message out of the channel but then discard it because you selected the timeout completion instead. And the fix is similar, you want to select either the timeout or 'something is available' from the channel, and if you select the latter you can peek to get the available data.</p>
]]></description><pubDate>Fri, 03 Oct 2025 20:04:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=45467188</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=45467188</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45467188</guid></item><item><title><![CDATA[New comment by ossopite in "How many HTTP requests/second can a single machine handle? (2024)"]]></title><description><![CDATA[
<p>Single core performance isn't just clock frequency. It must be multiplied by average IPC, but really it's more difficult since you have to account for factors like new SIMD instructions. Effective IPC improvements are where a significant fraction of single core speedup came from in this period</p>
]]></description><pubDate>Sun, 31 Aug 2025 20:26:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=45086772</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=45086772</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45086772</guid></item><item><title><![CDATA[New comment by ossopite in "Working through 'Writing A C Compiler'"]]></title><description><![CDATA[
<p>Ok, that's true, but my claim is that recursive descent parsing does not have to use the visitor pattern and indeed using recursive descent parsing is not the same as using the visitor pattern (you can do the former without the latter and I claim that you usually do)</p>
]]></description><pubDate>Sat, 12 Jul 2025 19:41:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=44544546</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=44544546</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44544546</guid></item><item><title><![CDATA[New comment by ossopite in "Working through 'Writing A C Compiler'"]]></title><description><![CDATA[
<p>I think I'm missing something here. if you have a grammar rule R with children A and B, and a function in your recursive descent parser that corresponds to R, why can R not call the parser functions for A and B, which return AST nodes themselves, and then construct another AST node using the result of those? Where was the visitor pattern required here?</p>
]]></description><pubDate>Sat, 12 Jul 2025 19:38:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=44544522</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=44544522</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44544522</guid></item><item><title><![CDATA[New comment by ossopite in "Working through 'Writing A C Compiler'"]]></title><description><![CDATA[
<p>I see that you've found an example of how recursive descent parsing actually can be implemented with the visitor pattern, which I've never come across before, and I didn't read it carefully enough to understand the motivation - but that doesn't mean they are the same thing - the recursive descent parsers I've seen before just inspect which tokens are seen and directly construct AST nodes<p>as an adendum, the reason I don't understand the motivation is that the visitor pattern in the way I described it is useful when you have many different operations to perform on your AST. If you have only one operation on tokens - parsing into an AST - I'm not sure why you need dynamic dispatch on a second thing, the first thing being the token type. Maybe the construction is that different operations correspond to different 'grammar rules'?</p>
]]></description><pubDate>Sat, 12 Jul 2025 19:29:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=44544453</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=44544453</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44544453</guid></item><item><title><![CDATA[New comment by ossopite in "Working through 'Writing A C Compiler'"]]></title><description><![CDATA[
<p>What?<p>The visitor pattern is a technique for dynamic dispatch on two values (typically one represents 'which variant of data are we working with' and the other 'which operation are we performing'). You would not generally use that in recursive descent parsing, because when parsing you don't have an AST yet, so 'which variant of data' doesn't make sense, you are just consuming tokens from a stream.</p>
]]></description><pubDate>Sat, 12 Jul 2025 17:49:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=44543697</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=44543697</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44543697</guid></item><item><title><![CDATA[New comment by ossopite in "What 'Project Hail Mary' teaches us about the PlanetScale vs. Neon debate"]]></title><description><![CDATA[
<p>I would add Vernor Vinge's A Fire Upon the Deep and A Deepness in the Sky to these suggestions</p>
]]></description><pubDate>Sat, 05 Jul 2025 23:00:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=44476242</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=44476242</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44476242</guid></item><item><title><![CDATA[New comment by ossopite in "NASA study reveals Venus crust surprise"]]></title><description><![CDATA[
<p>From the headline I can't decide if it was a study in astronomy or gastronomy</p>
]]></description><pubDate>Mon, 12 May 2025 21:21:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=43967579</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=43967579</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43967579</guid></item><item><title><![CDATA[New comment by ossopite in "Pipelining might be my favorite programming language feature"]]></title><description><![CDATA[
<p>It seems like it originated in the Isabelle proof assistant ML dialect in the mid 90s <a href="https://web.archive.org/web/20190217164203/https://blogs.msdn.microsoft.com/dsyme/2011/05/17/archeological-semiotics-the-birth-of-the-pipeline-symbol-1994/" rel="nofollow">https://web.archive.org/web/20190217164203/https://blogs.msd...</a></p>
]]></description><pubDate>Tue, 22 Apr 2025 06:47:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=43759639</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=43759639</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43759639</guid></item><item><title><![CDATA[New comment by ossopite in "PEP 750 – Template Strings"]]></title><description><![CDATA[
<p>I'm not sure if t-strings help here? unless I misread the PEP, it seems like they still eagerly evaluate the interpolations.<p>There is an observation that you can use `lambda` inside to delay evaluation of an interpolation, but I think this lambda captures any variables it uses from the context.</p>
]]></description><pubDate>Thu, 10 Apr 2025 21:01:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=43647982</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=43647982</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43647982</guid></item><item><title><![CDATA[New comment by ossopite in "Functors: Identity, Composition, and fmap"]]></title><description><![CDATA[
<p>I hadn't heard of this property before, thanks for introducing me to it!<p>V gubhtug vg fbhaqrq fhecevfvat sbe n glcr r gb orunir guvf jnl jura V jebgr zl pbzzrag, ohg abj V ernyvfr gung vg zvtug or pbzzba va nal vzcyrzragngvba bs rdhnyf gung uvqrf vagreany fgngr, n fvzcyr rknzcyr orvat n frg/znc qngnglcr jubfr rdhnyvgl vzcyrzragngvba vtaberf vafregvba beqre ohg jubfr vgrengvba beqre qrcraqf ba vg.</p>
]]></description><pubDate>Sat, 05 Apr 2025 20:55:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=43596754</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=43596754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43596754</guid></item><item><title><![CDATA[New comment by ossopite in "Functors: Identity, Composition, and fmap"]]></title><description><![CDATA[
<p>Gung'f snve. Gura V guvax, abg pbafvqrevat nal cnegvphyne cebtenzzvat ynathntr, gur nafjre qrcraqf ba ubj Frg qrgrezvarf rdhnyvgl bs ryrzragf. Vs vg hfrf fbzr vzcyrzragngvba bs rdhnyvgl/pbzcnevfba sbe glcr r gung pna fnl gung fbzr inyhrf bs glcr r ner rdhny gung ner arireguryrff qvfgvathvfunoyr, gura Frg vfa'g n shapgbe</p>
]]></description><pubDate>Sat, 05 Apr 2025 20:40:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=43596652</link><dc:creator>ossopite</dc:creator><comments>https://news.ycombinator.com/item?id=43596652</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43596652</guid></item></channel></rss>