<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: mattnewport</title><link>https://news.ycombinator.com/user?id=mattnewport</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 07 Apr 2026 06:08:39 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mattnewport" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mattnewport in "Two studies in compiler optimisations"]]></title><description><![CDATA[
<p>I think a better approach might be automated performance regression tests. That's checking the property you probably actually care about directly (performance) and leaves the compiler (and other engineers) some leeway to do better without breaking the test.<p>Actually setting up a robust system for perf regression tests is tricky though...</p>
]]></description><pubDate>Thu, 26 Mar 2026 17:53:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47533567</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=47533567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47533567</guid></item><item><title><![CDATA[New comment by mattnewport in "The Adolescence of Technology"]]></title><description><![CDATA[
<p>The disconnect is weird isn't it? The latest coding models can churn out a lot of mediocre code that more or less works if the task is sufficiently well specified, but it's not particularly good code, they have no real taste, no instinct for elegance or simplification, weak high level design. It's useful, but not anywhere near superhuman. It's also my impression that improvements in raw intelligence, far from increasing exponentially, are plateauing. The advances that people are excited about come from agentic patterns and tool use, but it's not much higher levels of intelligence, just slightly better intelligence run in a loop with feedback. Again that's useful but it's nowhere in the realms of "greater than Nobel winning across all domains".<p>Outside of coding, the top models still fall flat on their face when faced with relatively simple knowledge work. I got completely bogus info on a fairly simple tax question just a few days ago for example, and anyone using AI regularly with any discernment runs into simple failures like this all the time. It's still useful but the idea that we're on some trajectory to exceeding top human performance across all domains seems completely unrealistic when I look at my experience of how things have actually been progressing.</p>
]]></description><pubDate>Tue, 27 Jan 2026 07:02:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46776419</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=46776419</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46776419</guid></item><item><title><![CDATA[New comment by mattnewport in "Tree-sitter vs. Language Servers"]]></title><description><![CDATA[
<p>Yeah, you can even use tree-sitter to implement a language server, I've done this for a custom scripting language we use at work.</p>
]]></description><pubDate>Thu, 22 Jan 2026 16:24:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46721383</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=46721383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46721383</guid></item><item><title><![CDATA[New comment by mattnewport in "Who Owns the Memory? Part 1: What Is an Object?"]]></title><description><![CDATA[
<p>Good article, thanks!<p>Minor correction though, I think this is not quite correct:<p>> The compiler computes the required size at compile time by summing the sizes of all locals (accounting for alignment).<p>In optimized C++ builds, compilers can reuse stack storage for locals whose live ranges don’t overlap, so the required stack frame size is not necessarily the sum of all locals. Some locals may never have stack storage at all (e.g. living entirely in registers or being optimized away).<p>For objects with non-trivial destructors, storage reuse is constrained by object lifetime and destruction semantics, but the same stack slot may still be reused after the destructor has run.</p>
]]></description><pubDate>Mon, 05 Jan 2026 23:24:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46506624</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=46506624</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46506624</guid></item><item><title><![CDATA[New comment by mattnewport in "You can't fool the optimizer"]]></title><description><![CDATA[
<p>That's not really "fooling" the optimizer, that's kind of the point of volatile. The optimizer not making optimizations is the intended behaviour.</p>
]]></description><pubDate>Thu, 04 Dec 2025 17:42:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=46150437</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=46150437</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46150437</guid></item><item><title><![CDATA[New comment by mattnewport in "Quantifying pass-by-value overhead"]]></title><description><![CDATA[
<p>This might be true in the abstract but it's not true of actual compilers dealing with real world calling conventions. Absent inlining or whole program optimization, calling conventions across translation units don't leave much room for flexibility.<p>The semantics of pass by const reference are also not exactly the same as pass by value in C++. The compiler can't in general assume a const reference doesn't alias other arguments or global variables and so has to be more conservative with certain optimizations than with pass by value.</p>
]]></description><pubDate>Tue, 28 Oct 2025 14:59:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=45733724</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=45733724</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45733724</guid></item><item><title><![CDATA[New comment by mattnewport in "SQL Anti-Patterns"]]></title><description><![CDATA[
<p>> Are there any debuggers that let you look at intermediate results of pipelines without modifying the code?<p>F# in the visual studio debugger does a pretty good job of this in recent versions.</p>
]]></description><pubDate>Sun, 19 Oct 2025 17:47:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=45636220</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=45636220</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45636220</guid></item><item><title><![CDATA[New comment by mattnewport in "AI is a floor raiser, not a ceiling raiser"]]></title><description><![CDATA[
<p>What's the basis for your claim that it is on an exponential growth trajectory? That's not the way it feels to me as a fairly heavy user, it feels more like an asymptotic approach to expert human level performance where each new model gets a bit closer but is not yet reaching it, at least in areas where I am expert enough to judge. Improvements since the original ChatGPT don't feel exponential to me.</p>
]]></description><pubDate>Thu, 31 Jul 2025 19:16:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=44749077</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=44749077</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44749077</guid></item><item><title><![CDATA[New comment by mattnewport in "The PS3 Licked the Many Cookie"]]></title><description><![CDATA[
<p>Big little cores like on mobile or some Intel processors are really not the same thing. The little cores have the same instruction set and address the same memory as the big cores and are pretty transparent to devs apart from some different performance characteristics.<p>The SPEs were a different instruction set with a different compiler tool chain running separate binaries. You didn't have access to an OS or much of a standard library, you only had 256K of memory shared between code and data. You had to set up DMA transfers to access data from main memory. There was no concept of memory protection so you could easily stomp over code with a write to a bad pointer (addressing wrapped so any pointer value including 0 was valid to write to). Most systems would have to be more or less completely rewritten to take advantage of them.</p>
]]></description><pubDate>Sat, 12 Apr 2025 19:56:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=43667462</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=43667462</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43667462</guid></item><item><title><![CDATA[New comment by mattnewport in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>UI is also a sync problem if you squint a bit. React like systems are an attempt to be a sync engine between model and view in a sense.<p>Multiplayer games too.</p>
]]></description><pubDate>Fri, 21 Mar 2025 21:35:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=43441042</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=43441042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43441042</guid></item><item><title><![CDATA[New comment by mattnewport in "Ask HN: What are the nice feature you need in a programming language?"]]></title><description><![CDATA[
<p>- Sum types / discriminated unions<p>- Pattern matching (arguably a more flexible and general way to do the type of thing you have in your number 4 if syntax)</p>
]]></description><pubDate>Thu, 21 Nov 2024 04:52:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=42201240</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=42201240</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42201240</guid></item><item><title><![CDATA[New comment by mattnewport in "Ask HN: What do you use for your personal blog?"]]></title><description><![CDATA[
<p>I use Zola, a static site generator written in Rust, and Github pages for hosting on my own domain.</p>
]]></description><pubDate>Sat, 21 Sep 2024 15:56:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=41610744</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=41610744</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41610744</guid></item><item><title><![CDATA[New comment by mattnewport in "What's the most radical book you've read?"]]></title><description><![CDATA[
<p>Medical Nemesis by Ivan Illich</p>
]]></description><pubDate>Mon, 20 May 2024 08:58:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=40413589</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=40413589</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40413589</guid></item><item><title><![CDATA[New comment by mattnewport in "Bend: a high-level language that runs on GPUs (via HVM2)"]]></title><description><![CDATA[
<p>This looks cool, I find myself wishing for a language and introductory tutorial that isn't so targeted at Python programmes however (though I understand from a commercial point of view why that may make sense).<p>It seems like this is actually an elegant typed functional language but the Python syntax looks ugly and verbose and like it's trying to hide that compared to something more ML/F# or Haskell inspired.<p>I'll try and get past that though as it does look like there's something pretty interesting here.</p>
]]></description><pubDate>Sun, 19 May 2024 10:21:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=40405825</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=40405825</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40405825</guid></item><item><title><![CDATA[New comment by mattnewport in "Working with jumbo/unity builds in C/C++"]]></title><description><![CDATA[
<p>Modules, standardised in C++20, are the official solution both for the standard library and for other code but they are not universally well supported by all major compilers and build systems yet.<p>Transitioning existing code to use modules is also not entirely straightforward, though probably no more problematic than introducing unity builds.</p>
]]></description><pubDate>Sun, 19 May 2024 08:16:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=40405240</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=40405240</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40405240</guid></item><item><title><![CDATA[New comment by mattnewport in "Making Sense of Acquire-Release Semantics"]]></title><description><![CDATA[
<p>This is true but in practice it's pretty common to find this sort of code seems to work fine on x64 because the compiler doesn't actually reorder things and then sometimes blows up on ARM (or PowerPC, though that's less commonly encountered in the wild these days).</p>
]]></description><pubDate>Sun, 12 May 2024 08:15:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=40332964</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=40332964</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40332964</guid></item><item><title><![CDATA[New comment by mattnewport in "Finding and fixing standard misconceptions about program behavior"]]></title><description><![CDATA[
<p>Ok, that's not really what your example showed though. You seem to be relying on string interning to have two different "hello" literals refer to the same underlying object and therefore be equal? Coming from other languages, and specifically C++, I tend to see `==` as value rather than reference equality so that wasn't immediately obvious to me.<p>The equivalent code in C++ has different semantics but a function that takes a non const reference in C++ cannot change what the reference refers to (references are immutable in that sense in C++, they can only ever refer to one object). What a non const reference allows in C++ is for the called function to change the value of the object referred to and since strings are not immutable in C++ that means that the value of string s could change, not the object identity.<p>With pointers to pointers, or references to pointers in C++ you can further change the object pointed to / referred to but not with references (there's no such thing as a reference to a reference in C++).</p>
]]></description><pubDate>Mon, 15 Apr 2024 12:46:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=40039875</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=40039875</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40039875</guid></item><item><title><![CDATA[New comment by mattnewport in "Finding and fixing standard misconceptions about program behavior"]]></title><description><![CDATA[
<p>That's only because strings are immutable in Java. It's not true for reference types in general.<p>In C++ passing a pointer by value is effectively the same as passing a reference, the only real difference being that the syntax for accessing the underlying value is more implicit for a reference.</p>
]]></description><pubDate>Mon, 15 Apr 2024 07:17:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=40037778</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=40037778</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40037778</guid></item><item><title><![CDATA[New comment by mattnewport in "Finding and fixing standard misconceptions about program behavior"]]></title><description><![CDATA[
<p>Yeah, this is one of those things that while it may be more technically correct causes a lot of unnecessary confusion. I remember being confused by this as a C++ programmer learning Java when resources claimed that Java was always pass by value where the actual behaviour in almost all cases (due to Java going almost all-in on objects) is what a C++ programmer would expect from pass by reference.<p>I still see even relatively experienced programmers who don't understand this, particularly working with Unity where a lot of programmers came from C++ to C# and don't realise for example that a C# function that takes a List 'by value' and modifies it is actually modifying the same instance that was passed in by the caller.</p>
]]></description><pubDate>Sun, 14 Apr 2024 08:43:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=40029694</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=40029694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40029694</guid></item><item><title><![CDATA[New comment by mattnewport in "If Inheritance is so bad, why does everyone use it?"]]></title><description><![CDATA[
<p>That's not really accurate. Component based systems are designed specifically to address situations that traditional inheritance doesn't handle well.<p>Examples are usually something like having a base entity, a player that inherits from entity and an enemy that inherits from entity. Then you have a magic user and a barbarian inherit from enemy but now you also want your player to be able to use magic. Traditional OOP doesn't make it easy to share the implementation.<p>Even with composition and interfaces you still have problems with most traditional OOP languages when you want to do things like change the set of components of an entity dynamically at runtime (player gains or loses the ability to use magic during the game).<p>"Is a" is often not the relationship you want to model. A player and an NPC both have the "has a" relationship to an inventory, not the "is a" for example.</p>
]]></description><pubDate>Fri, 12 Apr 2024 07:37:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=40010265</link><dc:creator>mattnewport</dc:creator><comments>https://news.ycombinator.com/item?id=40010265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40010265</guid></item></channel></rss>