Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. F-Droid 2.0 (f-droid.org)
    171comments
  2. Show HN: Make cursed fonts like Times New Bastard (mitpit.com)
    24comments
  3. Show HN: Whiteboard (YC W26) – An open-source IDE for thoughtful software design (github.com/devdotfast)
    30comments
  4. Rails World 2026 Opening Keynote [video] (youtube.com)
    74comments
  5. Fearless SIMD v1.0 (linebender.org)
    13comments
  6. Creatine uptake enhances antitumor immunity (cell.com)
    91comments
  7. The forgotten battle of East Lansing (eastlansinginfo.news)
    1comments
  8. Stable (YC W20) Is Hiring Product Engineers (usestable.com)
    —discuss
  9. My weird new hobby: Wandering around Tokyo on Google Maps (ahmedhossamdev.com)
    24comments
  10. Forging 1024-bit RSA signatures in nearly SNFS time [pdf] (iacr.org)
    2comments
  11. Book review: Is parallel programming hard, and, if so, what can you do about it? (ahelwer.ca)
    2comments
  12. Two-tier encryption in the UK (macanorak.com)
    315comments
  13. Geothermal heat map of US hot springs (soakingsprings.com)
    13comments
  14. Show HN: Radix – Visual UI for agentic programming (radix-os.com)
    4comments
  15. Security auditing in the age of (good enough) AI (trailofbits.com)
    1comments
  16. WaveDigger: Dig into wireless signals to discover their physical locations (github.com/christianrowlands)
    7comments
  17. Why is the liver so weirdly regenerative? (dynomight.substack.com)
    63comments
  18. Nokia Design Archive (2025) (aalto.fi)
    101comments
  19. Show HN: Treepeat – Code similarity detection using Tree-sitter (github.com/dsummersl)
    —discuss
  20. Lambda MicroEgg (philipzucker.com)
    5comments
  21. Show HN: Air-gapped file encryption as self-decrypting HTML page (apeleg.com)
    7comments
  22. Show HN: AgentRun: DSL to turn agents into workflows (github.com/parcha-ai)
    1comments
  23. Motor Characterization for Small Running Robots (2016) (robot-daycare.com)
    —discuss
  24. Programming Tutorials Are Dead (robrace.dev)
    —discuss
  25. Search – A small, fast WebKit browser for macOS (github.com/driceroland)
    12comments
  26. A Million Agents Is a Distributed System Problem (instacloud.com)
    1comments
  27. GitHub has not removed malicious imitation software after 3 weeks (successfulsoftware.net)
    81comments
  28. Ideas on modernizing the open-source desktop (lwn.net)
    446comments
  29. B5-BJ2 – Ice Cream Barges – Concrete Ship Constructors (2023) (thecretefleet.com)
    7comments
  30. Experiencing writing at our recent Chinese calligraphy workshop (viewsproject.wordpress.com)
    1comments

Fearless SIMD v1.0

73 pointsby 2d agolinebender.org
13 comments
1d agoHN ↗

Pretty happy this broke the 0.x curse!

1h agoHN ↗

PuTTY out since 1999 and bumped to 0.82 in 2024 is pretty incredible

10m agoHN ↗

It's exactly what we were doing before the semver hype cycle, but with 0. in front!

1h agoHN ↗

Congratulations.

Nice work. Looking forward to it.

1h agoHN ↗

I started an early Rust SIMD crate with similar aims (SIMDeez) and so I know how hard it is to do this well, so wanted to say congratulations to everyone who worked on Fearless SIMD. Tools like this are really nice for being able to leverage the gigantic performance modern CPUs make available without having to write intrinsics for each platform.

56m agoHN ↗

I’m currently working on adding better SIMD support to Dart (https://github.com/dart-lang/sdk/issues/64170) and I have a question for the author or others here.

Does Rust or any other language support customizing the compiler so that interprocedural analyses can track custom subsets of, for example, doubles so that the compiler can choose the most efficient instruction sequence for example for min/max? If we know a double is never NaN then we can emit only one instruction on x86, but have to emit one more on arm64. If we know a double is never zero and never NaN, we can emit a single instruction on both.

This whole conversation between relaxed SIMD and deterministic SIMD seems to only exist because our compilers are not smart enough and/or their whole program analyses don’t support any plugin-like capabilities.

There are other examples where if we know a SIMD bitmask is canonical (all 1s per lane) then we can implement horizontal reductions more efficiently. This is very niche and I doubt that any language supports interprocedural analyses with such a rich domain, so it feels like a hole in the programming language space.

49m agoHN ↗

Last time i checked; no.

But I suspect you're overvaluing the potential savings. Knowing when a float is 0.0 or NaN beforehand is almost entirely impossible, except for the most trivial of cases - like when you first initialize a variable or first enter a loop. Everything after that is very hard or impossible with floats as they are.

Those cases can be const folded at compile time.

Those cases are never a measurable bottleneck.

The closest thing I know of in the realm of the optimization you're curious about is Rust NonZero* variants, but they're used for enum compression afaik.

32m agoHN ↗

I’m not sure I agree on the impossible part, I feel like a sufficiently smart interprocedural analysis that also implements range analysis interprocedurally could prove a lot to where it becomes useful.

I guess what I would like to see is SIMD libraries being able to confidently say nobody needs to use intrinsics (or differentiate between relaxed/normal SIMD on the user API level) because the language + high level SIMD APIs are smart enough to choose the right implementation.

IIRC IEEE min/max with proper NaN handling needs 8 instructions on x86 vs 1 on arm64 I find it very sad that we apparently haven’t really solved that yet without forcing the user to use different APIs.

36m agoHN ↗

Not yet that I know of, though perhaps LLVM might be able to infer simple cases (when loading from a known constant for example).

Pattern types could potentially maybe in the future allow for the compiler to know more details though. They are a nightly feature, and afaik only for enums, integers and pointers so far. The idea would be that you can define a custom type such as "an integer between 7 and 45" and everything else become niches for niche optimisation (e.g. for `Option<MyFunkyInt>` some of those impossible values would be used to represent the None case of the wrapping Option).

But I could envisage a future in which you could say "f64 without NaN" which would both make those available for niches and potentially tell LLVM about this. However, we are very far from any of that currently. And it might not be what you want, since you would need to add checks when you perform operations to ensure the value doesn't suddenly become a NaN. Which is way more complicated than ensuring integers don't become, say, zero. It will likely be much harder to optimise away the checks.

28m agoHN ↗

Pattern types could potentially maybe in the future allow for the compiler to know more details though.

Thanks, I’ll take a look!

26m agoHN ↗

That is a big maybe though. It is very experimental (didn't even have non-placeholder syntax last I looked), and as far as I know nobody has yet even discussed it for floats.