<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: forrestthewoods</title><link>https://news.ycombinator.com/user?id=forrestthewoods</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 03:23:52 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=forrestthewoods" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>Thanks for the conversation. But I think I’m done here. Cheers.</p>
]]></description><pubDate>Mon, 15 Jun 2026 01:58:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48535665</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48535665</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48535665</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>Very rude. I have not personally attacked you a single time.</p>
]]></description><pubDate>Mon, 15 Jun 2026 01:12:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=48535251</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48535251</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48535251</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> example of exceptions introducing faulty behavior unrelated to resource management that I asked for?<p>Well there’s a reason that constructors aren’t allowed to throw. Because it would leave objects in a weird hybrid state.<p>My physics system example would be the canonical one. You have a system that is transforming from one state to the next. An exception is thrown in the middle of the state transition. Whatever invariants you had for either state is (plausibly) not held. I believe your solution to this was to treat it as a transaction and rewind/restore to the previous state if an error is encountered.<p>It’s difficult because I would simply literally never use exceptions for anything ever. My experience with them is strictly negative with zero positives of any kind. I genuinely can not think of a single thing they make better. Nor have I ever encountered a library or codebase where I felt exceptions made it better. But boy howdy have I been frustrated by exceptions.<p>boost often has two APIs one with exceptions and one with error code reference arguments. I intend to always use the EC version. And god damn is it fucking frustrating when I accidentally use the exception version and so I get a runtime exception for a vanilla error that I wasn’t expecting. Which is why hidden control flow is evil!</p>
]]></description><pubDate>Sun, 14 Jun 2026 23:52:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48534456</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48534456</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48534456</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> All else being equal, exceptions make this kind of code better by making it more readable.<p>I just fundamentally disagree that hidden secret control flow makes code more readable. Well, it may be more <i>readable</i> but it is, imho, significantly less <i>understandable</i>.<p>There’s a reason that literally no modern systems language has adopted C++ exceptions.<p>We’re just about at the point of discussing syntactic sugar. So one question is “given current C++ capabilities should you use exceptions or not?”. Another is “should C++ add different sugar for error handling?”. And a third is “should a different language adopt exceptions-like design?”.<p>Imho a zig or rust like error system with a ? operator to return is vastly superior. Fallibility and control flow is super explicit, obvious, and easy to read.<p>Current C++ is a little jankier. Designs vary. All have tradeoffs. But imho they are all preferable to secret hidden control flow. So exceptions are, in my lived experience, a strictly inferior choice.</p>
]]></description><pubDate>Sun, 14 Jun 2026 22:30:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48533583</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48533583</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48533583</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> You're being rather vague.<p>Completely forget about memory allocation and memory allocation like things.<p>Let’s say I have a physics system that runs an update. Assume we catch outside the update. If anything throws the system is now in an intermediate state and is effectively irrecoverable.<p>If you want to argue that exceptions should only be used for irrecoverable errors such that the subsystem is not expected to resume then I would list. This is akin to Rust panics which unwind like C++ exceptions but are not intended to resume. I have not read any comments in this large subthread arguing for using exceptions in this narrow style.<p>> it’s impossible to know what “may throw”<p>Yeah you’re just saying you should basically assume that any code can throw at any point. I think that’s a really really bad design pattern that makes code significantly harder to reason about. Control flow should be clear and obvious. “Any line of code could immediately unwind to unclear catch” is the objectively not clear and obvious.<p>But let me turn it around. You tell me an example of a system that doesn’t use exceptions where adding exceptions makes it better.</p>
]]></description><pubDate>Sun, 14 Jun 2026 21:13:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48532793</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48532793</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48532793</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>^^^ truth speaker</p>
]]></description><pubDate>Sun, 14 Jun 2026 18:39:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48530970</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48530970</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48530970</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>Program state is significantly more complex than just needing some RAII resources to cleanup via destructors.<p>> during sections that may throw<p>Yeah one of the problems with exceptions is it’s impossible to know what “may throw” other than “well I guess literally anything so everything”. It is very irritating.<p>At the end of the day exceptions are just a little syntactic sugar. Or perhaps syntactic bitters.<p>It is notable that systems languages designed after C++ all chose to not include exceptions. Go, Zig, Swift, Odin, Jai.<p>Rust panics are kinda sorta exceptions in that they unwind. But their intended use case is for <i>irrecoverable</i> errors. And of course you can set panic=abort.<p>C++ exceptions are very rarely treated as so serious module level irrecoverability.</p>
]]></description><pubDate>Sun, 14 Jun 2026 18:39:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48530965</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48530965</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48530965</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> You really don't. Like I said, it's kind of the whole point of exceptions.<p>No, this is actually just wrong. With exceptions you “don’t have to think about” the exception getting caught by some higher level catch.<p>But you do have to think about it in the sense that every single line in your code could unwind. Which makes ensuring you remain in a valid state more difficult.<p>One of the issues with exceptions isn’t the throw. It’s what do you do after you catch.<p>> That a tool can be misused doesn't delegitimize the tool.<p>I’m always open to the possibility that if something I’ve seen has been bad 100 times then on the 101st it might be good. But at some point you really just have to call a spade a spade.</p>
]]></description><pubDate>Sun, 14 Jun 2026 17:20:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48529899</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48529899</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48529899</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> Throwing lets you handle the new situation without changing the API at all.<p>I do not disagree. <a href="https://xkcd.com/1172/" rel="nofollow">https://xkcd.com/1172/</a><p>If you add exceptions to a library that didn’t previously use them then I almost definitely have to update my code. The fact that it compiles and runs but will behave in undesirable ways makes it even worse, not better!<p>> or if you really must not throw from the function,<p>I’m aware.<p>But if your library that offers foo adds exceptions now I need to think about it at every single callsite, and probably wrap the function. It’s extremely irritating.<p>> learn how to use them properly.<p>In my 20+ years of professional C++ development I have a great experience not using exceptions and a strictly negative experience using them.<p>Perhaps sometimes I’ll stumble upon a library or codebase where exceptions make the code simpler, easier to understand, and easier to write. But my experience is exceptions make everything strictly worse and that not using exception is a strict win with zero downsides.</p>
]]></description><pubDate>Sun, 14 Jun 2026 05:00:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48524329</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48524329</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48524329</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>That’s a No True Scotsman argument. It is not a good or useful one imho.</p>
]]></description><pubDate>Sun, 14 Jun 2026 04:21:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=48524142</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48524142</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48524142</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> What if you don't control those call sites?<p>If I am choosing to change the API contract then someone who wants to use the new API has to update. This is not a big deal.<p>> If the function doesn't use exceptions for normal error conditions, then no, it's not a new contract<p>I disrespectfully and emphatically disagree. I do not accept your definition of contract.<p>> You could do something like (try-catch wrapper)<p>Let me be clear. Having to add a bunch of random fucking try-catch bullshit around every fucking function call is <i>EXACTLY</i> why I <i>hate</i> exceptions and is <i>EXACTLY</i> what I think is bad software design.<p>If you think a function should return a value or some unspecified exception whose details are irrelevant then that function could return an option with no information loss, or a result with an Error that is ignored.<p>> You wouldn't iterate a vector like this, I imagine?<p>I wouldn’t use at(i) for iteration. The only reason for a function like at(i) to exist is because you want it to be fallible.</p>
]]></description><pubDate>Sun, 14 Jun 2026 03:24:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48523894</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48523894</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48523894</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> The only two ways to resolve this contradiction is to throw, or to terminate.<p>Or they’re bad APIs that should be redesigned to be not bad.<p>They’re fallible functions. Don’t write fallible APIs that require exceptions to report errors! That’s bad API design!</p>
]]></description><pubDate>Sun, 14 Jun 2026 02:05:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48523487</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48523487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48523487</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> Throwing an exception and letting it unwind the stack way up (perhaps even all the way up to main()) is the sensible solution<p>No. I would never in a million years do this.<p>If the API is that a function is infallible and then I decide that it’s a fallible function then that’s a pretty major change and I’m just gonna have to update all the call sites to deal with a fallible return result.<p>Saying throw an exception and bubble up to main provides just about zero value. Might as well just call std::abort. Which is also something I would never do.<p>> Saying that you prefer Result over exceptions is like saying that you prefer strings to functions. They do different things.<p>So here’s the thing. In 20+ professional years as a C++ dev I have never ever once worked in a codebase where exceptions were used. Certainly never in first party code.  Only when dealing with annoying thirdparty libraries that leveraged them.<p>I think your comment “contract can’t be fulfilled” is cheating. No. You’ve simply made a new contract and the new contract is that under certain cases an error is returned in the form of an exception.</p>
]]></description><pubDate>Sun, 14 Jun 2026 02:00:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48523459</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48523459</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48523459</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>Functions aborting is not something I’ve ever really had to think about. Exception heavy codebases it’s something I have to ALWAYS think about.<p>Error codes are pretty bad. Global error code is awful. An error enum is pretty nice.<p>So here’s the thing. I’ve been a professional C++ programmer for 20 years. Not once have I ever worked in a codebase that used exceptions. It’s fine. Occasionally I use a thirdparty library that does use exceptions and it’s bloody awful.</p>
]]></description><pubDate>Sun, 14 Jun 2026 01:51:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48523410</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48523410</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48523410</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> Sounds like you hate exceptions, right? In which case why do you handle them at all?<p>One of the problems with exceptions is it’s utterly impossible to know if a given function call can return exceptions and if so what they are.<p>My code DOES want to handle errors. Exceptions are, imho, a very very poor way to report errors.<p>Python is the bloody worst because I never effing know what the hell any damn function can throw or return. It’s so so frustrating.<p>Error handling is a hard and unsolved problem. But I’ll take Rust results over exceptions 10,000% of the time. Not even a question.</p>
]]></description><pubDate>Sat, 13 Jun 2026 23:25:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48522500</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48522500</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48522500</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>> Which wording was vitriolic and angry?<p>“I haven't seen a less useful article about C++ in a long time, and as an HN reader, that's really saying something.”<p>The tone of all your comments reads as oddly intense imho. Perhaps not your intent. Opinions may vary.<p>> TFA is not about someone sharing their preferences. It's a direct call to not use many features, and claiming that to do otherwise is a mistake<p>Yeah that’s fine. The whole piece is an opinion piece on what someone thinks is a good approach to C++ development. There is no value in hedging every single bullet point with a bunch of flourish imho.<p>In game dev C++ circles nothing in this list is particularly controversial. It’s just writing down what many/most devs already did.</p>
]]></description><pubDate>Sat, 13 Jun 2026 23:18:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48522460</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48522460</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48522460</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>Your level of vitriol and anger at someone expressing an opinion is really weird.<p>Literally everyone who uses C++ decides which features to use/embrace and which to avoid. Someone sharing their particular preference is pretty normal and fine.<p>> Appeals to authority don't really work for me. I've been writing a cross-platform DAW (0) for 25+ years, in C++<p>I love how you reject appeal to authority and then try to establish yourself as an authority. That’s cute.</p>
]]></description><pubDate>Sat, 13 Jun 2026 21:54:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48521878</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48521878</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48521878</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Stop the Apple Music app from launching"]]></title><description><![CDATA[
<p>iTunes is the single worst most rage inducing software I have ever experienced. It is the only software that has brought myself and numerous family members to literal tears. Its concept of “syncing libraries” in the early iPhone era was so unbelievably broken.<p>I wish I believed in software hell because then I would be happy knowing that’s where iTunes existed.</p>
]]></description><pubDate>Mon, 08 Jun 2026 19:46:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48450729</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48450729</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48450729</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Nvidia is proposing a beast of a CPU system for Windows PCs"]]></title><description><![CDATA[
<p>Ehhh.<p>It is all in integrated into one monolith “superchip” package. The 128gb of RAM isn’t going to be purchased separately or be upgradable. At least according to all indicators. Which is what I was responding to.</p>
]]></description><pubDate>Sat, 06 Jun 2026 20:09:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48428524</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48428524</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48428524</guid></item><item><title><![CDATA[New comment by forrestthewoods in "Nvidia is proposing a beast of a CPU system for Windows PCs"]]></title><description><![CDATA[
<p>No. It’s all integrated. Not something you can buy separately or upgrade later.</p>
]]></description><pubDate>Sat, 06 Jun 2026 18:35:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48427642</link><dc:creator>forrestthewoods</dc:creator><comments>https://news.ycombinator.com/item?id=48427642</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48427642</guid></item></channel></rss>