<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: aw1621107</title><link>https://news.ycombinator.com/user?id=aw1621107</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 04:57:33 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=aw1621107" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by aw1621107 in "Orthodox C++ (2016)"]]></title><description><![CDATA[
<p>Submitted a fair few times previously. HN's search turned up these submissions with some additional discussion:<p><a href="https://news.ycombinator.com/item?id=40445536">https://news.ycombinator.com/item?id=40445536</a> (2 years ago, 63 points, 66 comments)<p><a href="https://news.ycombinator.com/item?id=25554018">https://news.ycombinator.com/item?id=25554018</a> (5 years ago, 70 points, 102 comments)<p><a href="https://news.ycombinator.com/item?id=13751244">https://news.ycombinator.com/item?id=13751244</a> (9 years ago, 29 points, 14 comments)<p>Looks like the page was moved from a GitHub gist to a github.io page in October of last year.</p>
]]></description><pubDate>Sat, 13 Jun 2026 15:40:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48518357</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48518357</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48518357</guid></item><item><title><![CDATA[The Glitch That Broke Link's Cel Shading [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=By7qcgaqGI4">https://www.youtube.com/watch?v=By7qcgaqGI4</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48470964">https://news.ycombinator.com/item?id=48470964</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 10 Jun 2026 03:15:17 +0000</pubDate><link>https://www.youtube.com/watch?v=By7qcgaqGI4</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48470964</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470964</guid></item><item><title><![CDATA[Predicting Stronghold locations with Bayesian statistics (2021) [pdf]]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/Ninjabrain1/Ninjabrain-Bot/blob/main/triangulation.pdf">https://github.com/Ninjabrain1/Ninjabrain-Bot/blob/main/triangulation.pdf</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48429761">https://news.ycombinator.com/item?id=48429761</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 06 Jun 2026 22:41:27 +0000</pubDate><link>https://github.com/Ninjabrain1/Ninjabrain-Bot/blob/main/triangulation.pdf</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48429761</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48429761</guid></item><item><title><![CDATA[New comment by aw1621107 in "C++: The Documentary"]]></title><description><![CDATA[
<p>Herb's blog post links to the SlashData Developer Nation Survey, so presumably that's what the claim is based on. The company has a methodology page here [1], and it looks like the Developer Nation panel [2] is one of the sources used by that company.<p>[0]: <a href="https://www.slashdata.co/research/developer-population" rel="nofollow">https://www.slashdata.co/research/developer-population</a><p>[1]: <a href="https://www.slashdata.co/company/methodology" rel="nofollow">https://www.slashdata.co/company/methodology</a><p>[2]: <a href="https://developernation.net/" rel="nofollow">https://developernation.net/</a></p>
]]></description><pubDate>Fri, 05 Jun 2026 08:20:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=48409564</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48409564</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48409564</guid></item><item><title><![CDATA[New comment by aw1621107 in "Branchless Quicksort faster than std:sort and pdqsort with C and C++ API"]]></title><description><![CDATA[
<p>If you hoist small_numbers[smlen] = numbers[i] out of the if statement then the compiler will produce nearly the same branchless assembly for both cases (the only difference being compare against 499 followed by setle vs. compare against 500 followed by setl).<p>Taking a second look I want to say you need to hoist the assignment for the loops to be semantically identical anyways.</p>
]]></description><pubDate>Fri, 05 Jun 2026 05:13:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48408242</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48408242</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48408242</guid></item><item><title><![CDATA[New comment by aw1621107 in "Is Python Becoming Pinyin?"]]></title><description><![CDATA[
<p>> but I had heard that the compiler is slow (because it's doing so much thinking and checking in advance).<p>The compiler is indeed not particularly speedy, but the reason you were given is not entirely accurate. As measured in this blog post [0] different parts of the compilation pipeline will take different amounts of time depending on what you're doing (cargo check vs. incremental build vs. full build, building a library vs. binary, etc.), but generally speaking type/borrow checking take up relatively small portions of compilation time (~15% or less, based on eyeballing the charts [1, 2]) compared to everything else.<p>> one that's optimized for such tight loops, and another that does thorough checking<p>I think that would risk producing diverging language subsets, especially if the checks are essential for language semantics. For example, what exactly does it mean if a program passes the "relaxed" compiler but fails the "thorough" one? How close does that actually get you to a "real" working program?<p>[0]: <a href="https://kobzol.github.io/rust/rustc/2024/03/15/rustc-what-takes-so-long.html" rel="nofollow">https://kobzol.github.io/rust/rustc/2024/03/15/rustc-what-ta...</a><p>[1]: <a href="https://kobzol.github.io/assets/posts/compile-sections/binaries.png" rel="nofollow">https://kobzol.github.io/assets/posts/compile-sections/binar...</a><p>[2]: <a href="https://kobzol.github.io/assets/posts/compile-sections/libraries.png" rel="nofollow">https://kobzol.github.io/assets/posts/compile-sections/libra...</a></p>
]]></description><pubDate>Mon, 01 Jun 2026 17:35:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48360027</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48360027</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48360027</guid></item><item><title><![CDATA[New comment by aw1621107 in "Asserts in Zig"]]></title><description><![CDATA[
<p>To add on to this, the C++ proposal for [[assume]] [0] came to a similar conclusion and cites MSVC's experience with an assert-in-debug-assume-in-release construction (i.e., removing the assumptions resulted in a 1-2% speedup and increased reliability) as a reason to not tie assertions to assumptions.<p>[0]: <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1774r8.pdf" rel="nofollow">https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p17...</a><p>[1]: <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2064r0.pdf" rel="nofollow">https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p20...</a></p>
]]></description><pubDate>Mon, 01 Jun 2026 17:22:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48359857</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48359857</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48359857</guid></item><item><title><![CDATA[New comment by aw1621107 in "Performance of Rust Language [pdf]"]]></title><description><![CDATA[
<p>OK, I think that makes more sense. Thanks for taking the time to explain!</p>
]]></description><pubDate>Tue, 26 May 2026 09:05:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48277085</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48277085</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48277085</guid></item><item><title><![CDATA[New comment by aw1621107 in "C constructs that still don't work in C++"]]></title><description><![CDATA[
<p>Hrm, I take it that was considered too footgun-y for the committee?</p>
]]></description><pubDate>Tue, 26 May 2026 09:03:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48277070</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48277070</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48277070</guid></item><item><title><![CDATA[New comment by aw1621107 in "Performance of Rust Language [pdf]"]]></title><description><![CDATA[
<p>> Compounding on this, Rust is also unstable underneath, since there is no public, stable contract for carrying high-level semantics from HIR into MIR. Because these high-level invariants are lost during compilation<p>Not sure if I'm just out of the loop, but I'm having a hard time following this line of reasoning. Why is a public and/or stable contract needed to carry high-level semantics from HIR to MIR? Neither seems necessary to me; from what I understand HIR and MIR are rustc-internal so public contracts shouldn't matter, and the lack of stability means the Rust devs aren't precluded by backwards compatibility from modifying the IRs to add the ability to carry such invariants.</p>
]]></description><pubDate>Tue, 26 May 2026 03:48:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48274748</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48274748</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48274748</guid></item><item><title><![CDATA[New comment by aw1621107 in "C constructs that still don't work in C++"]]></title><description><![CDATA[
<p>> It's especially tragic because Clang already had the full C99 designated init feature set in C++ mode implemented long before C++20 and it worked just fine.<p>How did Clang handle differences between member declaration order and the order in which initializers appeared?</p>
]]></description><pubDate>Mon, 25 May 2026 13:16:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48266477</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48266477</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48266477</guid></item><item><title><![CDATA[New comment by aw1621107 in "Everything in C is undefined behavior"]]></title><description><![CDATA[
<p>> that can easily be solved by a minute or two on godbolt...<p>Unfortunately it's not that simple when it comes to UB. If the snippet in question does in fact exhibit UB then there's no guarantee whatever Godbolt shows will generalize to other programs/versions/compilers/environments/etc.</p>
]]></description><pubDate>Wed, 20 May 2026 12:15:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48206464</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48206464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48206464</guid></item><item><title><![CDATA[New comment by aw1621107 in "Bun Rust rewrite: "codebase fails basic miri checks, allows for UB in safe rust""]]></title><description><![CDATA[
<p>Not necessarily. Unspecified behavior and undefined behavior are independent concepts; a language can have one but not the other. As a result, you can have languages where incorrect reliance on unspecified behavior can lead to undefined behavior (e.g., C and C++) and languages where incorrect reliance on unspecified behavior can lead to bugs, but not nasal demons (e.g., Java)</p>
]]></description><pubDate>Fri, 15 May 2026 20:27:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48153383</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48153383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48153383</guid></item><item><title><![CDATA[New comment by aw1621107 in "Bun Rust rewrite: "codebase fails basic miri checks, allows for UB in safe rust""]]></title><description><![CDATA[
<p>> For example, Java thread execution order is UB.<p>In this context "UB" means something different than how you're using it. The UB being mentioned here is the "nasal demons" form, i.e., programs which contain undefined behavior have <i>no</i> defined meaning according to the language semantics.<p>What you're talking about is probably better described in this context as "unspecified behavior", which is behavior that the language standard does not mandate but does not render programs meaningless. For example, IIRC in C++ the order in which g(), h(), and i() are evaluated in f(g(), h(), and i()) is unspecified - an implementation can pick any order, and the order doesn't have to be consistent, but no matter the order the program is valid (approximately speaking).</p>
]]></description><pubDate>Fri, 15 May 2026 18:54:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=48152401</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48152401</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48152401</guid></item><item><title><![CDATA[New comment by aw1621107 in "New York, California pension leaders oppose 'extreme' SpaceX control structure"]]></title><description><![CDATA[
<p>> Elon and his company was sued when he delivered<p>"When" is inaccurate. The original shareholder vote for Musk's 2018 compensation plan was on 2018-03-18. <i>Tornetta</i> was filed on 2018-06-05, well before the first tranche vested in 2020.</p>
]]></description><pubDate>Thu, 14 May 2026 19:13:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48139880</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48139880</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48139880</guid></item><item><title><![CDATA[What 262,715 regex questions on stack overflow haven't answered]]></title><description><![CDATA[
<p>Article URL: <a href="https://iev.ee/blog/what-262715-regex-questions-havent-answered/">https://iev.ee/blog/what-262715-regex-questions-havent-answered/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48120066">https://news.ycombinator.com/item?id=48120066</a></p>
<p>Points: 6</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 13 May 2026 10:24:53 +0000</pubDate><link>https://iev.ee/blog/what-262715-regex-questions-havent-answered/</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48120066</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48120066</guid></item><item><title><![CDATA[New comment by aw1621107 in "I completed 100 Days of Java over 5 years and mapped the journey as a graph"]]></title><description><![CDATA[
<p>I'd be a bit skeptical of the result given the benchmark program:<p><pre><code>    import java.util.ArrayList;
    import java.util.List;
    
    class Day06 {
        public static void main(String args[]) {
            List<String> fileTypeList = new ArrayList<>();
            for (int i = 0; i < 1000000; i++) {
                fileTypeList.add("fileType");
            }
    
            long beforeForLoop = System.currentTimeMillis();
            for (int i = 0; i < fileTypeList.size(); i++) {
                fileTypeList.get(i);
            }
            long afterForLoop = System.currentTimeMillis();
            System.out.println("Time took in millis for for " + (afterForLoop - beforeForLoop));
    
            long beforeForeachLoop = System.currentTimeMillis();
            for (String s : fileTypeList) {
            }
    
            long afterForeachLoop = System.currentTimeMillis();
            System.out.println("Time took in millis for foreach " + (afterForeachLoop - beforeForeachLoop));
        }
    }
</code></pre>
Empty loops and no warmup (at a minimum!) make for a somewhat suboptimal benchmark, to say the least. To be honest I'm surprised the JIT didn't eliminate the loops altogether.<p>If you want proper results you probably want to use the Java Microbenchmark Harness [0]. You'd probably want some actual data/work as well so the JIT doesn't overspecialize on the benchmark.<p>Edit: Halfheartedly tried to adapt the LinkedIn benchmark to JMH. Still not a great benchmark and I'm rusty so I wouldn't be surprised if I messed something up, but it's hopefully better the original:<p><pre><code>    package org.sample;

    import org.openjdk.jmh.annotations.*;
    import org.openjdk.jmh.runner.Runner;
    import org.openjdk.jmh.runner.RunnerException;
    import org.openjdk.jmh.runner.options.Options;
    import org.openjdk.jmh.runner.options.OptionsBuilder;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;

    @State(Scope.Thread)
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.NANOSECONDS)
    public class MyBenchmark {

        List<String> fileTypeList = new ArrayList<>() {{
            for (int i = 0; i < 1000000; i++) {
                this.add("fileType");
            }
        }};

        @Benchmark
        public void baseline() {
        }

        @Benchmark
        public int measureFor() {
            int result = 0;
            for (int i = 0; i < fileTypeList.size(); i++) {
                result += (int)fileTypeList.get(i).charAt(0);
            }
            return result;
        }

        @Benchmark
        public int measureForEach() {
            int result = 0;
            for (String s : fileTypeList) {
                result += (int)s.charAt(0);
            }
            return result;
        }

        public static void main(String[] args) throws RunnerException {
            Options opt = new OptionsBuilder()
                    .include(MyBenchmark.class.getSimpleName())
                    .build();

            new Runner(opt).run();
        }

    }
</code></pre>
And the result summary (run on Ubuntu via WSL2):<p><pre><code>    # JMH version: 1.37
    # VM version: JDK 21.0.10, OpenJDK 64-Bit Server VM, 21.0.10+7-Ubuntu-124.04
    # VM invoker: /usr/lib/jvm/java-21-openjdk-amd64/bin/java
    # VM options: <none>
    # Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)
    # Warmup: 5 iterations, 10 s each
    # Measurement: 5 iterations, 10 s each
    # Timeout: 10 min per iteration
    # Threads: 1 thread, will synchronize iterations
    # Benchmark mode: Average time, time/op

    Result "org.sample.MyBenchmark.baseline":
      0.254 ±(99.9%) 0.022 ns/op [Average]
      (min, avg, max) = (0.247, 0.254, 0.262), stdev = 0.006
      CI (99.9%): [0.232, 0.276] (assumes normal distribution)

    Result "org.sample.MyBenchmark.measureFor":
      693178.390 ±(99.9%) 60793.583 ns/op [Average]
      (min, avg, max) = (676266.480, 693178.390, 718114.554), stdev = 15787.901
      CI (99.9%): [632384.806, 753971.973] (assumes normal distribution)

    Result "org.sample.MyBenchmark.measureForEach":
      693756.240 ±(99.9%) 7549.769 ns/op [Average]
      (min, avg, max) = (691685.231, 693756.240, 696573.323), stdev = 1960.651
      CI (99.9%): [686206.470, 701306.009] (assumes normal distribution)
</code></pre>
Doesn't look like a significant difference to me, though obviously the benchmark quality leaves something to be desired.
[0]: <a href="https://github.com/openjdk/jmh" rel="nofollow">https://github.com/openjdk/jmh</a></p>
]]></description><pubDate>Wed, 06 May 2026 07:16:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48033257</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48033257</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48033257</guid></item><item><title><![CDATA[Krabby: Making a Fast Rust Compiler]]></title><description><![CDATA[
<p>Article URL: <a href="https://bal-e.org/speed/krabby/">https://bal-e.org/speed/krabby/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48029482">https://news.ycombinator.com/item?id=48029482</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 05 May 2026 22:18:00 +0000</pubDate><link>https://bal-e.org/speed/krabby/</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48029482</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48029482</guid></item><item><title><![CDATA[New comment by aw1621107 in "Async Rust never left the MVP state"]]></title><description><![CDATA[
<p>The question then becomes what, if anything, should take its place, and what are the corresponding tradeoffs?</p>
]]></description><pubDate>Tue, 05 May 2026 13:44:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48022487</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48022487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48022487</guid></item><item><title><![CDATA[New comment by aw1621107 in "Async Rust never left the MVP state"]]></title><description><![CDATA[
<p>> Any solution that involves having to use a keyword to get the value returned from a function is such a poor design choice to me.<p>Technically speaking Rust didn't <i>have</i> to use a keyword (and in fact didn't for quite some time between 1.0 and when async was added), but the ergonomics of the library-based keyword-less solutions was considered to be less than optimal compared to building in support to the language.<p>> This is why new languages should build in green threading from the start.<p>This, just like most other decisions one can make when designing a language, is a tradeoff. Green threads have their niceties for sure, but they also have drawbacks which made them a nonstarter for what the point in the design space the Rust devs were aiming for. In particular, the Rust devs wanted something that did not require overhead for FFI and also did not require foreign code to know that something async-related is involved. Green threads don't work here because they either have overhead when copying stuff between the green thread stack and the foreign stack or need foreign code to understand how to handle the green thread stack.</p>
]]></description><pubDate>Tue, 05 May 2026 12:55:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48021893</link><dc:creator>aw1621107</dc:creator><comments>https://news.ycombinator.com/item?id=48021893</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48021893</guid></item></channel></rss>