<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: quotemstr</title><link>https://news.ycombinator.com/user?id=quotemstr</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 21 Jun 2026 11:43:06 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=quotemstr" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by quotemstr in "Bun has an open PR adding shared-memory threads to JavaScriptCore"]]></title><description><![CDATA[
<p>Did C++ kill C?</p>
]]></description><pubDate>Sat, 20 Jun 2026 22:35:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48613626</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48613626</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48613626</guid></item><item><title><![CDATA[New comment by quotemstr in "Bun has an open PR adding shared-memory threads to JavaScriptCore"]]></title><description><![CDATA[
<p>There's a difference between 1) having a shared-everything heap and 2) having a separate, obscure facility (which practically nobody uses) for building a special data-only portal to shared memory. #1 normalizes the mutex. #2 doesn't.<p>I have strong opinions on the superiority of #2 to #1 because I've dealt with endless bugs caused by people who think they can handle #1 and can't. Reasoning about complex memory order rules and thread interleaving is extremely difficult for both humans and AIs. That's why we abstract over raw threads with actors, STM, fork/join facilities, and (my favorite) structured cooperative concurrency. It's not a knock against anyone's skill to point out that EVERYONE gets concurrency wrong and we need guardrails on top.<p>That said, let's be honest: the JS ecosystem has a culture that'll make #1 worse than it usually is. There's a certain combination of insularity and lack of restraint I've observed in the JavaScript world that prompts its members to re-learn the hard way all the painful lessons in software history.</p>
]]></description><pubDate>Sat, 20 Jun 2026 22:27:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=48613580</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48613580</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48613580</guid></item><item><title><![CDATA[New comment by quotemstr in "Bun has an open PR adding shared-memory threads to JavaScriptCore"]]></title><description><![CDATA[
<p>GC is worth it. What you're proposing is a false economy.<p>In addition to lifetime management, GC gives you compaction, pointer compression, and fast bump-pointer allocation that doesn't depend on being able to represent your lifetimes as nested arenas.<p>Modern GC is excellent. Replacing it with manual allocation isn't better, even with guardrails: reference counting is expensive, atomic reference counting doubly so, and free() itself is very far from free.<p>Sure, you can restrict lifetime shapes, but when you do that, people switch to allocating out of arrays and using indices as pointers, so you're right back where you started with respect to lifetime management.<p>So what are you saving? You're just replacing the high-performance concurrent mark/sweep microsecond-pause GC someone has written and debugged for you for free with custom convoluted logic that'll probably leak and run slower besides. Why would anyone want this trade?<p>The elevation of manual memory management to standard performance practice is a generational mistake this industry is making.</p>
]]></description><pubDate>Sat, 20 Jun 2026 22:07:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48613433</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48613433</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48613433</guid></item><item><title><![CDATA[New comment by quotemstr in "Bun has an open PR adding shared-memory threads to JavaScriptCore"]]></title><description><![CDATA[
<p>Exactly. Nothing stops your writing a high-performance parallel database in TypeScript today. Given that runtimes and tooling are actually pretty good, I think TypeScript is actually a fine choice of language for the task.<p>The only thing you can't do with JS today is share a heap across threads. You have SharedArrayBuffer. You have atomics. You don't need a shared address space.<p>There's a high performance database called "PostgreSQL" you may have heard about. It doesn't use threads. It uses separate processes and shared memory: just like standard JavaScript, with its service workers and SharedArrayBuffer.<p>If not sharing an address space is good enough for PostgreSQL, it's good enough for your TypeScript database.<p>The problem with shared-everything, unmarked, preemptive-parallel concurrency is that 90% of the time it gets used by people who don't know they shouldn't.</p>
]]></description><pubDate>Sat, 20 Jun 2026 19:43:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48612336</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48612336</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48612336</guid></item><item><title><![CDATA[New comment by quotemstr in "Bun has an open PR adding shared-memory threads to JavaScriptCore"]]></title><description><![CDATA[
<p>Yes, you did. And it's a good design. You even did the GC question justice.<p>My concern is more in the spirit of "Your scientists were so preoccupied with whether or not they could, they didn't stop to think if they should.". Of course JS being single threaded wasn't a hard constraint. Lift it, and people like you can use the parallelism to do great things.<p>The problem is that most developers are not you. Shared memory concurrency is foot-artillery (especially if truly parallel). Adding threads to the JS ecosystem is selling W48 nuclear artillery shells at the toy store.<p>JS's ostensible limitation to a single thread forced users to do what they should have been doing anyway: message-passing, thread-per-core architecture, and actor-ish stuff. People who don't know better reach for shared memory concurrency because it <i>seems</i> like a good way to solve problems, but it's actually a dangerous attractor in idea space. JS engine limitations were accidentally keeping people away from it. Now that they can hear the siren's song of a mutex, they'll run around on the hard problems of parallel programming.<p>Now, that's not a reason to avoid shipping such a system. It's just not something I would have chosen to implement for the masses.</p>
]]></description><pubDate>Sat, 20 Jun 2026 19:26:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=48612172</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48612172</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48612172</guid></item><item><title><![CDATA[New comment by quotemstr in "Bun has an open PR adding shared-memory threads to JavaScriptCore"]]></title><description><![CDATA[
<p>I know a thing or two about VMs. Reading this post, I thought to myself "No way it was this easy. No performance hit in the single threaded case? No way".<p>I was right. Buried in the middle of the post is this tidbit:<p>> v1 collects synchronous and stop-the-world<p>Ah, there it is! I knew it!<p>Parallel garbage collection is a very hard problem. Years of experience and subtle implementation are required to get something like ZGC. A stop-the-world garbage collector will kill tail latency in many use-cases, especially for large programs. I'd say a good GC is the <i>hardest</i> part of a modern VM, even harder than a good JIT: not that a JIT is easy.<p>Show me multi-threaded JS with generational mark, sweep, compaction, etc. running in parallel with the mutator and I'll be impressed. (The smart thing would be to base it on the JVM or CLR. Doesn't count though.)<p>It's all so exhausting, this current programmer culture of doing the easy part of a system thing X and presenting your work, without qualifiers, as a complete and modern X.<p>Sure, sure, we can have memory safe C (just don't have any data races!). Sure, we can have an AI C compiler (just don't expect type checking). Sure, we can port SQLite to Rust (but don't expect it to be fast). Sure, you can one shot a Slack clone (just don't expect performance or security). Doing the easy part of a thing is not doing the thing! You can't trust a README's feature list these days.<p>To be fair, given that the README is obviously unedited LLM output, the authors might not have realized that their agents cheated and made threading easy by pessimizing the GC. The LLM certainly did though.<p>Now, maybe the JSC really is adaptable to a multi-threaded mutator world. If it is, great. But over and over, I've seen AI say "I will defer and charter $HARD_THING" and mean "I have no idea how to do $HARD_THING, so I'm creatively reinterpreting your request to make it easy". You have to be endlessly vigilant for LLMs subtly twisting your tasks into easy versions that might technically meet the requirements but they are less complete than you intend.</p>
]]></description><pubDate>Sat, 20 Jun 2026 19:07:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48611996</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48611996</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48611996</guid></item><item><title><![CDATA[New comment by quotemstr in "So You Want to Define a Well-Known URI"]]></title><description><![CDATA[
<p>Why wouldn't they?</p>
]]></description><pubDate>Sat, 20 Jun 2026 17:41:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48611213</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48611213</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48611213</guid></item><item><title><![CDATA[New comment by quotemstr in "So You Want to Define a Well-Known URI"]]></title><description><![CDATA[
<p>Why would you want a new prefix over using record types as they were meant to be used?</p>
]]></description><pubDate>Fri, 19 Jun 2026 17:02:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48600624</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48600624</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48600624</guid></item><item><title><![CDATA[New comment by quotemstr in "So You Want to Define a Well-Known URI"]]></title><description><![CDATA[
<p>Literally the inner platform effect. We have multiple kinds of DNS record. Let's use them instead of creating a key value store inside a key value store.</p>
]]></description><pubDate>Fri, 19 Jun 2026 17:01:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48600618</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48600618</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48600618</guid></item><item><title><![CDATA[New comment by quotemstr in "So You Want to Define a Well-Known URI"]]></title><description><![CDATA[
<p>Perhaps he's trying to drive adoption of ECH. SNI is better than nothing, but it leaves the name of the destination domain in plaintext.</p>
]]></description><pubDate>Fri, 19 Jun 2026 17:00:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=48600608</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48600608</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48600608</guid></item><item><title><![CDATA[New comment by quotemstr in "So You Want to Define a Well-Known URI"]]></title><description><![CDATA[
<p>One disappointment you can't help but feel, having worked in technology a while, is about how people solve the same problems over and over in redundant and subtly incompatible ways.<p>How do you associate metadata with a public name? A SRV record! No, a TXT record! No, a meta tag! No, data attributes! No, an X.509 attribute! No, a random file at top level! No, a well known file under some schema! No, ...<p>It goes on forever. We're left with a mishmash of mechanisms and lowest common denominator support for them all.<p>It would be nice if we picked an extension mechanism and maximally enhanced it rather than having everyone invent his own</p>
]]></description><pubDate>Fri, 19 Jun 2026 16:56:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48600569</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48600569</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48600569</guid></item><item><title><![CDATA[New comment by quotemstr in "TIL: You can make HTTP requests without curl using Bash /dev/TCP"]]></title><description><![CDATA[
<p>FWIW, some distributions (I forget which ones, but I've seen it more than once) compile bash without the network features. Python is ubiquitous, and I've never seen it subsetted this way, so I'd have sided with the coworker.</p>
]]></description><pubDate>Tue, 16 Jun 2026 21:32:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48562441</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48562441</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48562441</guid></item><item><title><![CDATA[New comment by quotemstr in "USB Power Delivery: Plugging into the Benefits"]]></title><description><![CDATA[
<p>I'm appreciating this recent spate of "Why Underappreciated Technology X is Good" articles. (For example, the recent EXIF one.) It's way too easy focus on the bad and foment outrage. But the world we inhabit is pretty good, and it's good to understand why it's pretty good.</p>
]]></description><pubDate>Mon, 15 Jun 2026 01:52:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48535618</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48535618</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48535618</guid></item><item><title><![CDATA[New comment by quotemstr in "Amazon says its datacenters used about 2.5B gallons of water last year"]]></title><description><![CDATA[
<p>It's astroturfed, as is most memetic outrage that makes no logical sense</p>
]]></description><pubDate>Sun, 14 Jun 2026 16:19:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=48528985</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48528985</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48528985</guid></item><item><title><![CDATA[New comment by quotemstr in "Looking Forward to Postgres 19: It's About Time"]]></title><description><![CDATA[
<p>Yep. I'm just pointing out that the problems Dolt solves are different from the problems a timeline-aware SQL algebra solves.</p>
]]></description><pubDate>Fri, 12 Jun 2026 18:15:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48507505</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48507505</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48507505</guid></item><item><title><![CDATA[New comment by quotemstr in "Looking Forward to Postgres 19: It's About Time"]]></title><description><![CDATA[
<p>This kind of DB isn't really answering this question. There's a lot more subtlety to time-span analysis than snapshotting. In particular, aligning two series is non-obvious.<p>Say you have one time series with CPU-core task switches:<p>T=1 task=A T=3, task=B, T=5 task=A, ...<p>... and another of CPU frequency changes ...<p>T=2 freq_hz=800, T=5 freq_hz=1200, T=6 freq_hz=900<p>How, in SQL, do you express the question "How many CPU cycles did each task use?"? Try to do it with more complex examples. You'll tear your hair out.<p>Having worked on this sort of data analysis quite a lot, I'm strongly of the opinion that SQL needs <i>syntax</i>, not just table-valued functions, for expressing questions about timelines.</p>
]]></description><pubDate>Fri, 12 Jun 2026 18:09:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48507441</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48507441</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48507441</guid></item><item><title><![CDATA[New comment by quotemstr in "Looking Forward to Postgres 19: It's About Time"]]></title><description><![CDATA[
<p>It's a trade-off. If you store both endpoints you can continue to think of rows as order-invariant tuples. If you store only one endpoint, you have to impose a meaningful order on the rows in order for them to make sense.</p>
]]></description><pubDate>Fri, 12 Jun 2026 18:07:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48507420</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48507420</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48507420</guid></item><item><title><![CDATA[New comment by quotemstr in "Looking Forward to Postgres 19: It's About Time"]]></title><description><![CDATA[
<p>Great! I've been wanting native time-based tables for ages. Years and years ago, I even wrote my own DB engine to get them!<p>See <a href="https://dancol.org/dctv/index.xml" rel="nofollow">https://dancol.org/dctv/index.xml</a><p>I still think there's a lot of value in first-class syntax for time queries. Splitting ranges like Postgres 19 does is a good first step, but there's also a lot of power in broadcasting over these ranges, combining them in various ways, and storing multiple, independent ranges in a single table.<p>Ignore the bit about active development: these days, it'd take more sense to add the operators I describe to Postgres and DuckDB than to make a numpy-based engine just to host the analysis. This work predates DuckDB, and it's reassuring that DuckDB (and now Postgres) are thinking along similar lines.<p>I'm also glad that in the intervening years "data lake"-style analysis has become more prominent. My ideal data processing pipeline consists of sourcing from raw data and pipelining views all the way to human-meaningful outputs. Materialization, if it occurs, is just an optimization.</p>
]]></description><pubDate>Fri, 12 Jun 2026 18:06:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48507414</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48507414</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48507414</guid></item><item><title><![CDATA[New comment by quotemstr in "Deficient executive control in transformer attention"]]></title><description><![CDATA[
<p>Yes, I am complaining that they are making an impossibility claim on the basis of an observational gap. Such claims don't have a great track record in the history of science.<p>> negative, which is literally impossible.<p>Impossibility proofs are common in mathematics, physics, and computer science. This paper is not one of them. It reports an observational gap. That's not the same thing at all as showing, e.g. that any transformer no matter how large or interconnected, can't compute some function.<p>> our brains<p>Airliners don't have feathers.<p>> we clearly haven’t really seen major architectural changes for transformers for a few years now.<p>Ever read a DeepSeek paper? Ever hear of MLA? Mamba? Or gated deltanet? Or RLMs? Universal transformers? There's been a deluge of architectural advancement over the past few years. You shouldn't go around asserting the burden of proof falls on this or that party if you're not familiar enough with the recent literature to recognize the kinds of proof that would satisfy this burden.<p>> deficiencies will remain even if we figure out ways to paper over it on a case by case basis.<p>I think there are general solutions unknown to us for classes of problem we solve one by one through brute force today. Not arguing that. I just don't accept that the path to generality goes through giving up "transformers", whatever this term means after the architectural Cambrian explosion of the past few years.<p>It's much more likely that further capability unlocks involve in-the-weights continuous online learning. How we do that is orthogonal to whether the weights encode a transformer, a diffusion model, a SSM, or something more exotic.<p>Sure, these things aren't pure transformers. But neither are frontier models. The industry is <i>already</i> doing what you suggest and moving beyond naive KQ dot product full depth everywhere 2010s-era transformers. Architectural innovation hasn't solved the problem. Turns out different architectures for approximating functions all form function approximators. The problem is in formulating the functions we want to approximate, not our spelling of the approximation engine!</p>
]]></description><pubDate>Thu, 11 Jun 2026 02:53:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48485706</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48485706</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48485706</guid></item><item><title><![CDATA[New comment by quotemstr in "Deficient executive control in transformer attention"]]></title><description><![CDATA[
<p>The first thing I do when I see a paper that claims transformers fundamentally can't do X or Y is to look at the models under test:<p>> To evaluate generalizability, we conducted tests of GPT-5 (41), Claude Opus 4.1 (42), and Gemini 2.5 Pro (43) from 2025 September<p>The problem with empirical negative results on LLMs is that they can't rule out that the alleged deficiencies disappear with increased scale and the right fine-tuning. It's like saying my dog has trouble with subject-verb agreement, so meat brains are "fundamentally limited in their capacity for grammar".<p>I can accept that current LLMs (even latest generation) might exhibit cognitive gaps similar to those we see in humans with deficient executive function, I can't accept these gaps as evidence of fundamental limits of the transformer <i>architecture</i>. LLMs are universal function approximators. Executive function is a function. Yes, yes, it's well-known that transformers have a circuit complexity limit set by layer count and whatever. The limit disappears once you allow for autoregression. Nobody cares about the limits of AI inside a single forward pass.<p>I have high confidence that with the right sort of training, executive function gaps in LLM can be addressed. I'm not convinced that the problem is the architecture per se.</p>
]]></description><pubDate>Thu, 11 Jun 2026 00:02:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48484509</link><dc:creator>quotemstr</dc:creator><comments>https://news.ycombinator.com/item?id=48484509</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48484509</guid></item></channel></rss>