<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: catern</title><link>https://news.ycombinator.com/user?id=catern</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 16 Apr 2026 19:08:24 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=catern" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by catern in "Cap'n Web: a new RPC system for browsers and web servers"]]></title><description><![CDATA[
<p>>What would be the syntax for promise pipelining, if you aren't using promises to start with?<p>Oh, great point!  That does seem really hard, maybe even intractable.  That's definitely a reason to like cooperative concurrency, huh...<p>Just to tangent even further, but some ideas:<p>- Do it the ugly way: add an artificial layer of promises in an otherwise pre-emptive, direct-style language.  That's just, unfortunately, quite ugly...<p>- Use a lazy language.  Then everything's a promise!  Some Haskell optimizations feel kind of like promise pipelining.  But I don't really like laziness...<p>- Use iterator APIs; that's a slightly less artificial way to add layers of promises on top of things, but still weird...<p>- Punt to the language: build an RPC protocol into the language, and promise pipelining as a guaranteed optimization.  Pretty inflexible, and E already tried this...<p>- Something with choreographic programming and modal-types-for-mobile-code?  Such languages explicitly track the "location" of values, and that might be the most natural way to represent ocap promises: a promise is a remote value at some specific location.  Unfortunately these languages are all still research projects...</p>
]]></description><pubDate>Tue, 23 Sep 2025 17:38:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45350328</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=45350328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45350328</guid></item><item><title><![CDATA[New comment by catern in "Cap'n Web: a new RPC system for browsers and web servers"]]></title><description><![CDATA[
<p>I totally agree with your framing of the value of async/await, but could you elaborate more on why you think that this behavior (which I would call "cooperative concurrency") is important for (ocap?) RPC systems?  It seems to me that preemptive concurrency also suffices to make RPC viable.  Unless you just feel that preemptive concurrency is too hard, and therefore not workable for RPC systems?</p>
]]></description><pubDate>Tue, 23 Sep 2025 04:33:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=45342872</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=45342872</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45342872</guid></item><item><title><![CDATA[New comment by catern in "Guess I'm a Rationalist Now"]]></title><description><![CDATA[
<p>Rationalists and EAs spend far more time praising the Catholic Church and other religious groups than criticizing them - since they spend essentially no time criticizing them, and do occasionally praise them.</p>
]]></description><pubDate>Fri, 20 Jun 2025 00:46:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=44323839</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=44323839</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44323839</guid></item><item><title><![CDATA[New comment by catern in "Problems with Go channels (2016)"]]></title><description><![CDATA[
<p>>If you take enough steps back and really think about it, the only synchronization primitive that exists is a futex (and maybe atomics). Everything else is an abstraction of some kind.<p>You're going to be surprised when you learn that futexes are an abstraction too, ultimately relying on this thing called "cache coherence".<p>And you'll be <i>really</i> surprised when you learn how cache coherence is implemented.</p>
]]></description><pubDate>Tue, 15 Apr 2025 00:50:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=43687905</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=43687905</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43687905</guid></item><item><title><![CDATA[New comment by catern in "The Comet is a handheld Linux computer that brings extensibility"]]></title><description><![CDATA[
<p>Emacs 30 has a native graphical port to Android, maybe you can just use that on any Android device.</p>
]]></description><pubDate>Wed, 08 Jan 2025 13:18:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=42633879</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=42633879</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42633879</guid></item><item><title><![CDATA[New comment by catern in "Differential: Type safe RPC that feels like local functions"]]></title><description><![CDATA[
<p>Well, that's not fundamental.  There are plenty of projects that support generating typed bindings for libraries in one language for use by programs in another language.  You could do the same thing here.</p>
]]></description><pubDate>Sat, 09 Mar 2024 14:27:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=39651756</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=39651756</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39651756</guid></item><item><title><![CDATA[New comment by catern in "Let futures be futures"]]></title><description><![CDATA[
<p>Is stackfulness required for what the grandparent describes?  It seems possible to do this stacklessly: <i>all</i> functions implicitly compile down to a state machine, but futures are never visible.</p>
]]></description><pubDate>Mon, 05 Feb 2024 19:49:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=39266124</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=39266124</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39266124</guid></item><item><title><![CDATA[New comment by catern in "Write libraries instead of services, where possible"]]></title><description><![CDATA[
<p>What do you suggest as an alternative way to express these concepts?<p>Colloquially, "library" and "service" have 95% of the correct connotations.</p>
]]></description><pubDate>Thu, 23 Nov 2023 22:49:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=38398561</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=38398561</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38398561</guid></item><item><title><![CDATA[New comment by catern in "Write libraries instead of services, where possible"]]></title><description><![CDATA[
<p>Ultimately, it can't.  Proprietary software has fundamental limitations that force proprietary software developers to choose technically inferior designs.  It's why in the long run proprietary software is doomed.</p>
]]></description><pubDate>Thu, 23 Nov 2023 22:47:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=38398547</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=38398547</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38398547</guid></item><item><title><![CDATA[New comment by catern in "Write libraries instead of services, where possible"]]></title><description><![CDATA[
<p>Do you have better suggestions for what words/phrases to use to refer to these two categories?</p>
]]></description><pubDate>Thu, 23 Nov 2023 22:41:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=38398481</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=38398481</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38398481</guid></item><item><title><![CDATA[New comment by catern in "Off-duty pilot allegedly tried to shut off engines on Alaska Airlines flight"]]></title><description><![CDATA[
<p>If you predictably do that then the pilots won't speak truthfully in therapy in the first place.<p>The only way to get the lesser benefit of therapy is to precommit to not report suicidal thoughts.<p>The greater benefit of "pilots honestly report their suicidal thoughts and then they are stopped from flying" is simply impossible to achieve, and if you foolishly try to get it anyway then you won't even get the lesser benefit.</p>
]]></description><pubDate>Mon, 23 Oct 2023 18:49:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=37989909</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37989909</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37989909</guid></item><item><title><![CDATA[New comment by catern in "Unix Structured Concurrency"]]></title><description><![CDATA[
<p>I think you may have misunderstood the problem that this article is solving.<p>You've implemented something which kills all your child processes when you exit cleanly, but which leaks child processes if you exit uncleanly. This is, frankly, easy to do, and not interesting. It's not a "problem".<p>The article is solving the problem of: how do I make sure my child processes die even if I exit uncleanly? That's an actual hard problem to solve.</p>
]]></description><pubDate>Fri, 13 Oct 2023 15:17:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=37871585</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37871585</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37871585</guid></item><item><title><![CDATA[New comment by catern in "Email and Git = <3"]]></title><description><![CDATA[
<p>It is unfortunate that there are poorly-managed projects with poorly-managed mailing lists (just like there are poorly-managed projects on Github), but sourcehut at least requires a properly-managed mailing list, and I think you should evaluate this workflow on that standard.  Tell poorly-managed projects to move to sourcehut, if you want to fix this issue.</p>
]]></description><pubDate>Thu, 12 Oct 2023 15:24:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=37858522</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37858522</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37858522</guid></item><item><title><![CDATA[New comment by catern in "Email and Git = <3"]]></title><description><![CDATA[
<p>You don't have to subscribe to send a patch to a mailing list.</p>
]]></description><pubDate>Thu, 12 Oct 2023 12:50:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=37856466</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37856466</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37856466</guid></item><item><title><![CDATA[New comment by catern in "Email and Git = <3"]]></title><description><![CDATA[
<p>That specific workflow precludes reviewing the patch via quoting and making inline comments, which is the normal way to review patches when sending them via email.</p>
]]></description><pubDate>Thu, 12 Oct 2023 12:47:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=37856434</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37856434</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37856434</guid></item><item><title><![CDATA[New comment by catern in "Unix Structured Concurrency"]]></title><description><![CDATA[
<p>When a process does, its children are reparented to init, not to its parent.  So the grandparent can do nothing.</p>
]]></description><pubDate>Thu, 12 Oct 2023 11:44:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=37855906</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37855906</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37855906</guid></item><item><title><![CDATA[New comment by catern in "Unix Structured Concurrency"]]></title><description><![CDATA[
<p>It requires a bit of annoying machinery since you have to dedicate a process to being a subreaper.  Still it's probably the best option, I made <a href="https://github.com/catern/supervise">https://github.com/catern/supervise</a> with it, see also <a href="https://catern.com/process.html" rel="nofollow noreferrer">https://catern.com/process.html</a></p>
]]></description><pubDate>Thu, 12 Oct 2023 11:39:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=37855856</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37855856</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37855856</guid></item><item><title><![CDATA[New comment by catern in "Thread-per-core"]]></title><description><![CDATA[
<p>An important thing omitted in this post, which makes work-stealing less attractive, is that one core being idle can actually improve performance of other cores.  Today's CPUs basically have a fixed energy budget, and if one core is idle that means more of that budget can go to other cores.<p>In other words, core utilization is less relevant today - what you care about is energy utilization (which is shared across cores).<p>Of course, there's a point at which this stops being relevant - if you have multiple sockets for example, this won't apply. But work stealing across multiple sockets is so expensive anyway that you would never want to do it.  You might as well work-steal across machines at that point - something which is indeed useful sometimes, but usually niche.</p>
]]></description><pubDate>Fri, 06 Oct 2023 16:33:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=37792941</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37792941</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37792941</guid></item><item><title><![CDATA[New comment by catern in "Glibc dynamic loader hit by a nasty local privilege escalation vulnerability"]]></title><description><![CDATA[
<p>The problem is setuid. Just get rid of that and this becomes irrelevant.</p>
]]></description><pubDate>Tue, 03 Oct 2023 20:20:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=37757021</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=37757021</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37757021</guid></item><item><title><![CDATA[New comment by catern in "Emacs 29.1"]]></title><description><![CDATA[
<p>That's actually a git issue - git is notoriously slow on OS X, and magit uses git heavily in a way that is correspondingly slow.</p>
]]></description><pubDate>Thu, 03 Aug 2023 20:27:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=36991334</link><dc:creator>catern</dc:creator><comments>https://news.ycombinator.com/item?id=36991334</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36991334</guid></item></channel></rss>