<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: Panzerschrek</title><link>https://news.ycombinator.com/user?id=Panzerschrek</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 02 Nov 2026 17:35:55 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Panzerschrek" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Panzerschrek in "Copper – A minimal low-level programming language with OOP and generics"]]></title><description><![CDATA[
<p>Is it memory safe? Or is it yet another "better C"?</p>
]]></description><pubDate>Mon, 02 Nov 2026 05:07:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=50333348</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50333348</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50333348</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Ask HN: I'd like to request Microsoft open source Windows XP"]]></title><description><![CDATA[
<p><a href="https://github.com/DeDf/winxp_source" rel="nofollow">https://github.com/DeDf/winxp_source</a><p>Knowing that Github is owned by Microsoft, they probably are fine with it.</p>
]]></description><pubDate>Sun, 01 Nov 2026 16:53:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=50327328</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50327328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50327328</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Show HN: NES Contra (1987) port (ASM –> C and then C –> WebAssembly)"]]></title><description><![CDATA[
<p>Recently I did something similar (or even more labor-intensive). I recreated an existing game from scratch by manually rewriting its code without even thinking about LLM/"AI" tools usage. (see my submissions).<p>But I agree, that using an "AI" tool may be a serious temptation and thus way less new porting projects will be done with such care.</p>
]]></description><pubDate>Sun, 01 Nov 2026 05:23:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=50322921</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50322921</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50322921</guid></item><item><title><![CDATA[New comment by Panzerschrek in "The importance of communities around software"]]></title><description><![CDATA[
<p>> there is something more important than license: community<p>Is there such thing as "community" at all? As I know, the majority of open-source projects are developed by a single person, where others only contribute bug reports (in best case). It's not a community, if there is such imbalance in contribution and power.<p>Only a handful of projects (a small percentage) has actual community with many members doing meaningful contribution. But they are most notable ones, so that one may think, that all open-source projects function like this.</p>
]]></description><pubDate>Fri, 30 Oct 2026 05:23:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=50300139</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50300139</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50300139</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Iterating Backwards in C"]]></title><description><![CDATA[
<p>I do this in another way:<p><pre><code>  for( size_t i_plus_one = count; i_plus_one > 0; --i_plus_one )
  {
      const size_t i= i_plus_one - 1;
      // actual loop code
  }
</code></pre>
It's in my opinion better than using i-- as condition, since I generally avoid using results of -- and ++, because doing so is bug-prone.</p>
]]></description><pubDate>Fri, 30 Oct 2026 05:07:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=50300053</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50300053</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50300053</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Billion-query-per-second lookup tables in C++"]]></title><description><![CDATA[
<p>> How do we find the association values? We sort the characters by how many keys they touch. We then take them one at a time and try 0, 1, 2, … until we find a value that does not cause a collision.<p>This sounds too easy to be true. As I understand, that's the core of the whole approach - to find a table filled with some magic values giving perfect hashing. And it shouldn't be that simple, since search space is huge (a table with 256-values each with 8 bits size at least).</p>
]]></description><pubDate>Wed, 28 Oct 2026 08:13:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=50270535</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50270535</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50270535</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Billion-query-per-second lookup tables in C++"]]></title><description><![CDATA[
<p>Nice approach.
I hope some time compilers will eventually learn to detect code containing a bunch of if-else with string comparison and replace it with perfect hashing.</p>
]]></description><pubDate>Wed, 28 Oct 2026 04:50:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=50269458</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50269458</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50269458</guid></item><item><title><![CDATA[New comment by Panzerschrek in "The Goose Programming Language"]]></title><description><![CDATA[
<p>Look at my language: <a href="https://github.com/Panzerschrek/U-00DC-Sprache/" rel="nofollow">https://github.com/Panzerschrek/U-00DC-Sprache/</a>. It has plenty of interesting ideas, but is fully human-written (and will remain human-written).</p>
]]></description><pubDate>Sun, 25 Oct 2026 05:04:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=50228490</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50228490</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50228490</guid></item><item><title><![CDATA[New comment by Panzerschrek in "The Goose Programming Language"]]></title><description><![CDATA[
<p>> Memory is a handful of data stacks that the compiler assigns statically<p>I doubt this can work well in all cases. Sooner or later one needs proper heap.</p>
]]></description><pubDate>Sun, 25 Oct 2026 05:02:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=50228477</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50228477</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50228477</guid></item><item><title><![CDATA[New comment by Panzerschrek in "The Quake Fan who built the map editor everybody uses"]]></title><description><![CDATA[
<p>I don't know what Unreal Tournament did use internally, it's hard to investigate, since there is no (official) source code release for it. But I do know, that brush-based (additive) approach isn't strictly necessary for creating maps for Quake/Quake II/Quake III, it's technically possible to write a map compiler taking maps in some subtractive format. The reason why it's not done (or at least not common) is because it's not a trivial task and because existing infrastructure adds some friction.</p>
]]></description><pubDate>Sat, 24 Oct 2026 09:10:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=50219457</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50219457</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50219457</guid></item><item><title><![CDATA[New comment by Panzerschrek in "The Quake Fan who built the map editor everybody uses"]]></title><description><![CDATA[
<p>Trenchbroom is very good, but I still think, it's not the best possible map editor. It uses brush-based approach, which isn't the right way of designing maps for games in closed spaces (like Quake). Creating each room requires creating at least 6 brushes for its walls/floor/ceiling, which is way to much for such stuff. On the other hand Unreal Editor (for first Unreal and Unreal Tournament) supports creating rooms directly (as subtractive brushes), when two room primitive touch each other, they are automatically connected.</p>
]]></description><pubDate>Sat, 24 Oct 2026 08:50:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=50219362</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50219362</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50219362</guid></item><item><title><![CDATA[New comment by Panzerschrek in "We have traits at home"]]></title><description><![CDATA[
<p>I see little to no benefits of introducing such "traits" into a language having duck-typing in templates. It may sometimes improve code readability (slightly), but with more boilerplate code for traits handling in exchange. And the result machine code will be identical to code with no traits at all (with only duck-typing).<p>C++ is a good example of this. It had duck-typing in templates for decades. Then some sort of trait-like mechanism named <i>concepts</i> has been introduced. The only benefit of them seems to be slightly better error messages if someone misuses a template class/function.</p>
]]></description><pubDate>Fri, 23 Oct 2026 08:42:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=50206092</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50206092</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50206092</guid></item><item><title><![CDATA[New comment by Panzerschrek in "I can't believe PowerShell is good"]]></title><description><![CDATA[
<p>Does it have automatic error handling, so  that if one command fails, the whole script fails too? Last time I tried it, I needed to write<p><pre><code>   if ($LastExitCode -ne 0)</code></pre>
after each command.</p>
]]></description><pubDate>Thu, 22 Oct 2026 05:22:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=50191503</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50191503</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50191503</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Composite objects and C++26 the std:polymorphic type"]]></title><description><![CDATA[
<p>Typical C approach.
In C++ this should be done with <i>std::variant</i> instead. It has the exact same binary layout, but is type-safe (compared to union usage).</p>
]]></description><pubDate>Wed, 21 Oct 2026 07:54:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=50177405</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50177405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50177405</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Composite objects and C++26 the std:polymorphic type"]]></title><description><![CDATA[
<p>Does <i>std::polymorphic</i> require passed types to be copyable?</p>
]]></description><pubDate>Wed, 21 Oct 2026 07:52:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=50177393</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50177393</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50177393</guid></item><item><title><![CDATA[New comment by Panzerschrek in "JAXA is about to perform a Phobos sample return mission"]]></title><description><![CDATA[
<p>Russia tried such mission back in year 2011: <a href="https://en.wikipedia.org/wiki/Fobos-Grunt" rel="nofollow">https://en.wikipedia.org/wiki/Fobos-Grunt</a>. Sadly it failed shortly after the launch.</p>
]]></description><pubDate>Wed, 21 Oct 2026 05:00:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=50176273</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50176273</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50176273</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Flatpak – An Insecurity Nightmare"]]></title><description><![CDATA[
<p>My app doesn't require sandboxing. And vulnerabilities aren't important, since it's not intended to work with untrusted data and/or use network.</p>
]]></description><pubDate>Mon, 19 Oct 2026 12:52:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=50151826</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50151826</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50151826</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Flatpak – An Insecurity Nightmare"]]></title><description><![CDATA[
<p>I once tried packaging my application using Flatpack. But I saw no benefits of using it. I can as well just link all my dependencies statically (which I eventually ended using).</p>
]]></description><pubDate>Mon, 19 Oct 2026 10:13:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=50150531</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50150531</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50150531</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Constructors Shouldn't Throw"]]></title><description><![CDATA[
<p>>  Turn your Database class into a state machine with an uninitialized and a connected state. Then have a Database.connect()<p>It's a bad advice. It's preferred instead to have a <i>connect</i> function returning a database instance in a successful case or an error otherwise.</p>
]]></description><pubDate>Mon, 19 Oct 2026 06:01:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=50148900</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50148900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50148900</guid></item><item><title><![CDATA[New comment by Panzerschrek in "Parser Combinators"]]></title><description><![CDATA[
<p>All this seems for me to be overcomplicated. Naturally parsing is just a function, which may call subfunctions, sometimes recursively. Sometimes it can do it in a loop - in order to parse sequences.
I have written many parsers in such a way and I didn't even require such terms as "parser combinators".</p>
]]></description><pubDate>Mon, 19 Oct 2026 05:31:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=50148714</link><dc:creator>Panzerschrek</dc:creator><comments>https://news.ycombinator.com/item?id=50148714</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50148714</guid></item></channel></rss>