<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: nvlled</title><link>https://news.ycombinator.com/user?id=nvlled</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 15 May 2026 21:22:48 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=nvlled" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by nvlled in "Bun's experimental Rust rewrite hits 99.8% test compatibility on Linux x64 glibc"]]></title><description><![CDATA[
<p>> Right, it's exactly like C, and we kinda all know how that worked out in practice already...<p>Production operating systems have been written in C, along the with the countless tooling, libraries and game engines (which you said are a poor fit for manual memory management) that modern systems depend on. I say it worked out it pretty well.<p>And zig did learn from the hard lessons from the industry and fixes a lot of problems with C. It also has a lot of affordances that makes it more than suitable for general purpose use.<p>> Arenas are not good for that because the arena as a whole has to outlive all of those poorly defined scopes & lifetimes, which is hard to do.<p>I don't what else to tell you, arenas outliving temporary allocations is exactly what it is made for, they go poof as soon as the arena owner is done. That's not hard, it makes it easier if anything. To give concrete examples, arenas are used on HTTP requests that are clean up in one go as soon as the request is done. They are also used on (possibly deep) recursive functions that are cleaned up as soon as the root function returns. Of course, you don't store arena-allocated memory elsewhere that outlives the arena, that would be dumb.<p>That's why you have to be consciously aware of the ownership and lifetimes that a piece of memory has. Ownership and lifetimes are just one part of the API contract of a function or module. You break it, that's on you. Having a compiler help with ownership model would be nice, but it's a not substitute for having a good mental model of your programs. It's not that different from the tradeoff of a having a less strict type system. Not every sanity check can or has to be performed at compile time. Zig also has debug allocators that catches a lot of memory mismanagement during testing. Hard to debug double-frees, use-after-frees and other things are a symptom of poor cavalier YOLO programming.<p>That all said, I do agree that manual memory management is really hard to do if you are used to just sweeping gigabytes of memory under rug, hoping the GC vacuum cleaner slurps it afterwards. It takes a mindset and a set of practice. But once you internalized it, it becomes second nature.<p>(Not to sound like a zig fanboy, I do think it's still rough around the edge and there are a lot of things I don't like. But manual memory management is not that big of a problem).</p>
]]></description><pubDate>Mon, 11 May 2026 03:36:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48090818</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=48090818</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48090818</guid></item><item><title><![CDATA[New comment by nvlled in "Bun's experimental Rust rewrite hits 99.8% test compatibility on Linux x64 glibc"]]></title><description><![CDATA[
<p>I disagree with a lot of what you said, but I don't feel authorative enough to say you're wrong.<p>> Which is really not that many places, it's a fast but rather niche optimization. There's not a whole lot of scenarios where lots of temporary memory is needed for one well defined scope.<p>Arena allocators are not niche optimizations, or not something picked first for optimization. Contrary to what you said, arenas are useful for temporary allocations with poorly defined intermediate scope or lifetime (think functions directly or indirectly called by the arena owner). If the scope is local and well-defined, a regular allocator or even a fixed buffer would do just fine.<p>> Zig's lack of ownership<p>Zig doesn't have explicit annotations for it, but the concept of ownership and lifetime doesn't go away. It's not enforced by the compiler, which is an intentional tradeoff to let the programmer have more control and freedom. When you use languages with manual memory management, it's expected that you are capable of designing sensible programs in such a way that ownership and lifetimes are tractable and are part of the program design, rather than something to workaround to please the compiler.</p>
]]></description><pubDate>Sun, 10 May 2026 14:50:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48084451</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=48084451</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48084451</guid></item><item><title><![CDATA[New comment by nvlled in "How to be anti-social – a guide to incoherent and isolating social experiences"]]></title><description><![CDATA[
<p>Ever heard of tribalism and echo chambers? Wrongness being a function of number of dissidents is a terrible heuristic, in contrast to determining the lies and falsehood based on the soundness of the argument or logic.<p>Also, when a population group is large enough (e.g. entire world), it's quite likely a crazily-held belief is shared by other people, or people who would at least nod in agreement.</p>
]]></description><pubDate>Sat, 25 Apr 2026 05:55:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47899048</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=47899048</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47899048</guid></item><item><title><![CDATA[New comment by nvlled in "Why I Write (1946)"]]></title><description><![CDATA[
<p>The article you linked goes to great lengths about Orwell's alleged scotophobia. I don't see how particularly hating scotts supports "intentially treating those cultures as identical". If that was true, then Orwell would equally hate all scots and englishmen.<p>Also, what's the downside of treating different cultures identical, aside from potentially offending people? As opposed to other kind of racism, where other people are treated as lesser subhumans that ultimately led to slavery. Why are both casually referred to racism when the other has more far-reaching consequences.</p>
]]></description><pubDate>Sat, 25 Apr 2026 05:30:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47898931</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=47898931</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47898931</guid></item><item><title><![CDATA[New comment by nvlled in "When AI writes the software, who verifies it?"]]></title><description><![CDATA[
<p>> half sarcasm, half real-talk.<p>If you could pause a bit from being awed by your own perceived insightfulness, you would think a just bit harder and realize that LLMs can generate hundreds of thousands of code that no human could every verify within a finite amount of time. Human-written software is human verifiable, AI-assisted human-written software is still human verifiable to some extent, but purely AI-written software can no longer be verified by humans.</p>
]]></description><pubDate>Wed, 04 Mar 2026 02:05:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47242066</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=47242066</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47242066</guid></item><item><title><![CDATA[New comment by nvlled in "0 A.D. Release 28: Boiorix"]]></title><description><![CDATA[
<p>So that's name of that game, I've been trying to remember that game I played briefly as a kid, which in my hazy memory seemed quite fun. Thanks, will give it a try when it goes on sale.</p>
]]></description><pubDate>Mon, 23 Feb 2026 13:04:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47121787</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=47121787</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47121787</guid></item><item><title><![CDATA[New comment by nvlled in "Automatic Programming"]]></title><description><![CDATA[
<p>Just the visualizer:<p>> Also note that the python visualizer tool has been basically written by vibe-coding.<p>Also that readme is still fairly technical, no any kind of advocacy or heavy pro-AI sentiments of any kind.</p>
]]></description><pubDate>Sat, 31 Jan 2026 15:31:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46837512</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=46837512</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46837512</guid></item><item><title><![CDATA[New comment by nvlled in "Automatic Programming"]]></title><description><![CDATA[
<p>I've seen that before. Re-reading it, I don't really get the same "vibe" as antirez's level of AI advocacy. You also conveniently omitted the last paragraph of the tweet:<p>> Will there be more or less game developer jobs? That is an open question. It could go the way of farming, where labor saving technology allow a tiny fraction of the previous workforce to satisfy everyone, or it could be like social media, where creative entrepreneurship has flourished at many different scales. Regardless, “don’t use power tools because they take people’s jobs” is not a winning strategy.<p>But yeah, it (almost) sounds like an ad for AI, but I like to believe it's still a measured somewhat neutral stance. The difference is that Carmack doesn't consistently post things like this unprompted, unlike antirez.</p>
]]></description><pubDate>Sat, 31 Jan 2026 15:22:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=46837431</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=46837431</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46837431</guid></item><item><title><![CDATA[New comment by nvlled in "Automatic Programming"]]></title><description><![CDATA[
<p>I don't see Carmack or Torvalds doing this, so it's all good (for now).</p>
]]></description><pubDate>Sat, 31 Jan 2026 12:25:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46836012</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=46836012</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46836012</guid></item><item><title><![CDATA[New comment by nvlled in "Xmake: A cross-platform build utility based on Lua"]]></title><description><![CDATA[
<p>Why? I'm so confused why would you expect a build tool to depend on a x11 client library, besides the fact that both starts with the letter x. Does it also upset you that xamarin and xaml has nothing to do with xlib, xmake, or to each other?</p>
]]></description><pubDate>Thu, 29 Jan 2026 16:14:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=46812200</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=46812200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46812200</guid></item><item><title><![CDATA[New comment by nvlled in "Fabrice Bellard Releases MicroQuickJS"]]></title><description><![CDATA[
<p>Lua supports even functions and objects as keys:<p><pre><code>  function f1() end
  function f2() end
  local m1 = {}
  local m2 = {}
  local obj = {
      [f1] = 1,
      [f2] = 2,
      [m1] = 3,
      [m2] = 4,
  }
  print(obj[f1], obj[f2], obj[m1], obj[m2], obj[{}])
</code></pre>
Functions as keys is handy when implementing a quick pub/sub.</p>
]]></description><pubDate>Wed, 24 Dec 2025 03:20:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46372067</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=46372067</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46372067</guid></item><item><title><![CDATA[New comment by nvlled in "Garfield's proof of the Pythagorean Theorem"]]></title><description><![CDATA[
<p>A side thought, how would a natural number sequence of hypotenuses that satisfies the equation a^2 + b^2 = c^2 look like? Or what interesting properties would it have if any.</p>
]]></description><pubDate>Sun, 30 Nov 2025 03:16:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=46093288</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=46093288</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46093288</guid></item><item><title><![CDATA[New comment by nvlled in "OOP is shifting between domains, not disappearing"]]></title><description><![CDATA[
<p>The difference is in the ownership and lifetime of the state used by the function. A pure function uses state that it owns or is not outlived by the mutable state it uses. Closures on the other hand uses that it doesn't own or is outlived by the state during the invocation.<p>The important detail here is that closures automatically moves the variable that lives in the stack frame into the heap. You can't do that with a regular function. In languages with manual memory management like C, if you try to store and use a pointer to a invalidated stack frame, you will either get a crash if you are lucky, or get a crazy bug that shouldn't happen within reason.<p>Your supporting and concluding statements are directed at a scarecrow though. The person you are replying to isn't contending that closures and objects are different, they are specifically saying that closures and (regular) functions has an important distinction, which I agree.<p>Although I would say the person you are replying to did have poor imprecise wording on their part.</p>
]]></description><pubDate>Sat, 22 Nov 2025 03:20:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=46011773</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=46011773</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46011773</guid></item><item><title><![CDATA[New comment by nvlled in "Open-source Zig book"]]></title><description><![CDATA[
<p>> <a href="https://github.com/oven-sh/bun/issues?q=segfault%20OR%20segmentation%20fault" rel="nofollow">https://github.com/oven-sh/bun/issues?q=segfault%20OR%20segm...</a><p>It should be noted that most of those issues are created by opening a link that bun creates when it crashes, they are not yet reviewed/confirmed and most likely a lot of them are dulplicates of the same issue.</p>
]]></description><pubDate>Mon, 17 Nov 2025 14:33:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=45953905</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=45953905</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45953905</guid></item><item><title><![CDATA[New comment by nvlled in "One Handed Keyboard"]]></title><description><![CDATA[
<p>Kind of uneconomical that they have different designs for left-hand and right-hand. They could have just placed the trackball or a nipple in the middle of the keys, and mouse function keys on any side. The hand still need to move and travel anyway with the current design to reach for the mouse keys.</p>
]]></description><pubDate>Sun, 16 Nov 2025 06:39:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=45943239</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=45943239</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45943239</guid></item><item><title><![CDATA[New comment by nvlled in "Why is Zig so cool?"]]></title><description><![CDATA[
<p>But you were originally talking about exceptions. As I said, destructors and exceptions are distinct concepts, you can't just suddenly interchange those two terms as that would invalidate my whole disagreement, unless you wanted to shift the goal posts a bit to the side.</p>
]]></description><pubDate>Tue, 11 Nov 2025 04:47:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=45884203</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=45884203</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45884203</guid></item><item><title><![CDATA[New comment by nvlled in "Why is Zig so cool?"]]></title><description><![CDATA[
<p>> But destructors also don't conditionally interrupt the flow of execution, and always run at the end of a block<p>Why bring up destructors, I was talking about exceptions. Destructors and exceptions are orthogonal concepts, one can be implemented independently of the other. I'm specifically referring to try-catch blocks like those in java.<p>Compare this:<p><pre><code>  try { foo(); }
  catch { bar(); } 
</code></pre>
to this:<p><pre><code>  defer bar();
  foo();
</code></pre>
In the first one, bar() may or may not run depending if there's an exception. In the second one, bar is guaranteed to run. Thus, it means defer does not conditionally interrupt the flow of execution.<p>> The point is that you're not seeing it. In order to know if there's a defer happening at the end of a function you can't just read the end of the function, you need to read the entire function.<p>What? You don't need to read the entire function, you only to scan or check for defers scoped in a block, or in some cases, just the top of a function or block. Wanting to just read the end of a function is unreliable anyway with the existence of early returns (which defer fixes by the way).<p>You could have made a more compelling (but not necessarily a valid) case by citing zig's try-catch, which makes me think that you are just arguing in abstract without actually having tried writing code that uses defer, or any zig code for that matter.</p>
]]></description><pubDate>Mon, 10 Nov 2025 02:06:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=45871492</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=45871492</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45871492</guid></item><item><title><![CDATA[New comment by nvlled in "Why is Zig so cool?"]]></title><description><![CDATA[
<p>It's not the same, defer does not conditionally interrupt the flow of execution, it will always run at the end of a block. If I see a defer, I am absolutely certain that whatever is deferred will run. The same is not true for exceptions. If I am not mistaken defer just moves the code at the end of the block, no jumping is involved.</p>
]]></description><pubDate>Sun, 09 Nov 2025 05:35:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=45863198</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=45863198</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45863198</guid></item><item><title><![CDATA[New comment by nvlled in "John Carmack on mutable variables"]]></title><description><![CDATA[
<p>Kotlin uses var/val too[0] which is what Java is trying to copy. I have never written any kotlin code before, so I don't know if this would be a problem in practice. On the plus side, var and val both have the same length, so the variable declaractions are properly aligned. The names are also intuitive as far as I can tell.In theory, I'd probably be okay with it.<p>[0] <a href="https://kotlinlang.org/docs/basic-syntax.html#variables" rel="nofollow">https://kotlinlang.org/docs/basic-syntax.html#variables</a></p>
]]></description><pubDate>Fri, 31 Oct 2025 11:36:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=45770891</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=45770891</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45770891</guid></item><item><title><![CDATA[New comment by nvlled in "One year with Next.js App Router and why we're moving on"]]></title><description><![CDATA[
<p>Why should it be the router? A saner option is to let the parent component coordinate the data fetches for the child components. What you are suggesting is way out of the normal responsibility of a router.</p>
]]></description><pubDate>Thu, 30 Oct 2025 15:37:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=45761226</link><dc:creator>nvlled</dc:creator><comments>https://news.ycombinator.com/item?id=45761226</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45761226</guid></item></channel></rss>