frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Pebble Watch software is now 100% open source

https://ericmigi.com/blog/pebble-watch-software-is-now-100percent-open-source
854•Larrikin•12h ago•135 comments

Windows GUI – Good, Bad and Pretty Ugly (2023)

https://creolened.com/windows-gui-good-bad-and-pretty-ugly-ranked/
19•phendrenad2•1h ago•17 comments

Human brains are preconfigured with instructions for understanding the world

https://news.ucsc.edu/2025/11/sharf-preconfigured-brain/
12•XzetaU8•37m ago•2 comments

Unpowered SSDs slowly lose data

https://www.xda-developers.com/your-unpowered-ssd-is-slowly-losing-your-data/
360•amichail•11h ago•159 comments

A million ways to die from a data race in Go

https://gaultier.github.io/blog/a_million_ways_to_data_race_in_go.html
41•ingve•2d ago•20 comments

Claude Advanced Tool Use

https://www.anthropic.com/engineering/advanced-tool-use
454•lebovic•11h ago•171 comments

Most Stable Raspberry Pi? 81% Better NTP with Thermal Management

https://austinsnerdythings.com/2025/11/24/worlds-most-stable-raspberry-pi-81-better-ntp-with-ther...
3•todsacerdoti•32m ago•0 comments

Show HN: I built an interactive HN Simulator

https://news.ysimulator.run/news
263•johnsillings•13h ago•130 comments

How did the Windows 95 user interface code get to the Windows NT code base?

https://devblogs.microsoft.com/oldnewthing/20251028-00/?p=111733
59•ayi•3d ago•13 comments

Cool-retro-term: terminal emulator which mimics look and feel of CRTs

https://github.com/Swordfish90/cool-retro-term
207•michalpleban•13h ago•80 comments

Three Years from GPT-3 to Gemini 3

https://www.oneusefulthing.org/p/three-years-from-gpt-3-to-gemini
251•JumpCrisscross•2d ago•162 comments

Implications of AI to schools

https://twitter.com/karpathy/status/1993010584175141038
175•bilsbie•13h ago•183 comments

Build a Compiler in Five Projects

https://kmicinski.com/functional-programming/2025/11/23/build-a-language/
87•azhenley•23h ago•10 comments

Show HN: OCR Arena – A playground for OCR models

https://www.ocrarena.ai/battle
116•kbyatnal•3d ago•44 comments

What OpenAI did when ChatGPT users lost touch with reality

https://www.nytimes.com/2025/11/23/technology/openai-chatgpt-users-risks.html
169•nonprofiteer•1d ago•206 comments

Claude Opus 4.5

https://www.anthropic.com/news/claude-opus-4-5
882•adocomplete•12h ago•400 comments

The Bitter Lesson of LLM Extensions

https://www.sawyerhood.com/blog/llm-extension
105•sawyerjhood•12h ago•53 comments

Migrating to Bazel symbolic macros

https://www.tweag.io/blog/2025-11-20-migrating-bazel-symbolic-macros/
10•todsacerdoti•2d ago•0 comments

Google's new 'Aluminium OS' project brings Android to PC

https://www.androidauthority.com/aluminium-os-android-for-pcs-3619092/
101•jmsflknr•12h ago•121 comments

Chrome Jpegxl Issue Reopened

https://issues.chromium.org/issues/40168998
232•markdog12•18h ago•86 comments

Moving from OpenBSD to FreeBSD for firewalls

https://utcc.utoronto.ca/~cks/space/blog/sysadmin/OpenBSDToFreeBSDMove
170•zdw•5d ago•92 comments

Shai-Hulud Returns: Over 300 NPM Packages Infected

https://helixguard.ai/blog/malicious-sha1hulud-2025-11-24
911•mrdosija•20h ago•709 comments

Fifty Shades of OOP

https://lesleylai.info/en/fifty_shades_of_oop/
82•todsacerdoti•21h ago•32 comments

PS5 now costs less than 64GB of DDR5 memory. RAM jumps to $600 due to shortage

https://www.tomshardware.com/pc-components/ddr5/64gb-of-ddr5-memory-now-costs-more-than-an-entire...
348•speckx•11h ago•223 comments

Using Antigravity for Statistical Physics in JavaScript

https://christopherkrapu.com/blog/2025/antigravity-stat-mech/
12•ckrapu•3d ago•9 comments

Show HN: Datamorph – A clean JSON ⇄ CSV converter with auto-detect

https://datamorphio.vercel.app
4•sumit_entr42•4d ago•1 comments

Building the largest known Kubernetes cluster

https://cloud.google.com/blog/products/containers-kubernetes/how-we-built-a-130000-node-gke-cluster/
122•TangerineDream•3d ago•69 comments

Inside Rust's std and parking_lot mutexes – who wins?

https://blog.cuongle.dev/p/inside-rusts-std-and-parking-lot-mutexes-who-win
154•signa11•5d ago•70 comments

The history of Indian science fiction

https://altermag.com/articles/the-secret-history-of-indian-science-fiction
156•adityaathalye•2d ago•24 comments

Corvus Robotics (YC S18): Hiring Head of Mfg/Ops, Next Door to YC Mountain View

1•robot_jackie•14h ago
Open in hackernews

A million ways to die from a data race in Go

https://gaultier.github.io/blog/a_million_ways_to_data_race_in_go.html
41•ingve•2d ago

Comments

bilbo-b-baggins•1h ago
4 ways to demonstrate that the author either knows nothing about closures, structs, mutexes, and atomicity OR they just come from a Rust background and made some super convoluted examples to crap on Go.

“A million ways to segfault in C” and its just the author assigning NULL to a pointer and reading it, then proclaiming C would be better if it didn’t have a NULL value like Rust.

I’m mad I read that. I want a refund on my time.

speedgoose•1h ago
I assume you are aware of "the billion dollar mistake" from Tony Hoare?
landr0id•46m ago
First sentence:

>I have been writing production applications in Go for a few years now. I like some aspects of Go. One aspect I do not like is how easy it is to create data races in Go.

Their examples don't seem terribly convoluted to me. In fact, Uber's blog post is quite similar: https://www.uber.com/blog/data-race-patterns-in-go/

kryptiskt•16m ago
To me it looks like simple, clear examples of potential issues. It's unfortunate to frame that as "crapping on Go", how are new Go programmers going to learn about the pitfalls if all discussion of them are seen as hostility?

Like, rightly or wrongly, Go chose pervasive mutability and shared memory, it inevitably comes with drawbacks. Pretending they don't exist doesn't make them go away.

__loam•1h ago
In the first one, he complains that one character is enough to cause an issue, but the user should really have a good understanding of variable scope and the difference between assignment and instsntiation if they're writing concurrent go code. Some ides warn the user when they do this with a different color.

Races with mutexes can indicate the author either doesn't understand or refuses to engage with Go's message based concurrency model. You can use mutexes but I believe a lot of these races can be properly avoided using some of the techniques discussed in the go programming language book.

konart•55m ago
>he complains that one character is enough

He complains that language design offers no way of avoiding it (in this particular case) and relies only on human or ide. Humans are not perfect and should not be a requirement to write good code.

xlii•41m ago
Whatever the case Go's tooling (i.e. IDE part) is one of the best in class and I think it shouldn't be be dismissed in the context of some footguns that Go has.
TheDong•23m ago
"best in class"?

I feel like Java's IDE support is best in class. I feel like go is firmly below average.

Like, Java has great tooling for attaching a debugger, including to running processes, and stepping through code, adding conditional breakpoints, poking through the stack at any given moment.

Most Go developers seem to still be stuck in println debugging land, akin to what you get in C.

The gopls language server generally takes noticeably more memory and cpu than my IDE requires for a similarly sized java project, and Go has various IDE features that work way slower (like "find implementations of this interface").

The JVM has all sorts of great knobs and features to help you understand memory usage and tune performance, while Go doesn't even have a "go build -debug" vs "go build -release" to turn on and off optimizations, so even in your fast iteration loop, go is making production builds (since that's the only option), and they also can't add any slow optimizations because that would slow down everyone's default build times. All the other sane compilers I know let you do a slower release build to get more performance.

The Go compiler doesn't emit warnings, insisting that you instead run a separate tool (govet), but since it's a separate tool you now have to effectively compile the code twice just to get your compiler warnings, making it slower than if the compiler just emit warnings.

Go's cgo tooling is also far from best in class, with even nodejs and ruby having better support for linking to C libraries in my opinion.

Like, it's incredibly impressive that Go managed to re-invent so many wheels so well, but they managed to reach the point where things are bearable, not "best in class".

I think the only two languages that achieved actually good IDE tooling are elisp and smalltalk, kinda a shame that they're both unserious languages.

rustystump•11m ago
Java best in class? I love java. It is my first love but ill take go ecosystem 1000% of the time.
TheDong•36m ago
The mutex case is one where they're using a mutex to guard read/writes to a map.

Please show us how to write that cleanly with channels, since clearly you understand channels better than the author.

I think the golang stdlib authors could use some help too, since they prefer mutexes for basically everything (look at sync.Map, it doesn't spin off a goroutine to handle read/write requests on channels, it uses a mutex).

In fact, almost every major go project seems to end up tending towards mutexes because channels are both incredibly slow, and worse for modeling some types of problems.

... I'll also point out that channels don't save you from data-races necessarily. In rust, passing a value over a channel moves ownership, so the writer can no longer access it. In go, it's incredibly easy to write data-races still, like for example the following is likely to be a data-race:

    handleItemChannel <- item
    slog.Debug("wrote item", "item", item) // <-- probably races because 'item' ownership should have been passed along.
questioner8216•5m ago
For that last example, if 'item' is immutable, there is no issue, correct?
beeb•18m ago
I would argue it doesn't help that all errors are usually named `err` and sprinkled every third line of code in Go. It's an easy mistake to make to assign to an existing variable instead of create a new variable, especially if you frequently switch between languages (which might not have the `:=` operator).
iambvk•49m ago
Only looked at the first two examples. No language can save you when one writes bad code like that.
fud101•40m ago
Not all languages look that ugly without trying either.
unscaled•33m ago
You can argue about how likely is code like that is, but both of these examples would result in a hard compiler error in Rust.

A lot of developers without much (or any) Rust experience get the impression that the Rust Borrow checker is there to prevent memory leaks without requiring garbage collection, but that's only 10% of what it does. Most the actual pain dealing with borrow checker errors comes from it's other job: preventing data races.

And it's not only Rust. The first two examples are far less likely even in modern Java or Kotlin for instance. Modern Java HTTP clients (including the standard library one) are immutable, so you cannot run into the (admittedly obvious) issue you see in the second example. And the error-prone workgroup (where a single typo can get you caught in a data race) is highly unlikely if you're using structured concurrency instead.

These languages are obviously not safe against data races like Rust is, but my main gripe about Go is that it's often touted as THE language that "Gets concurrency right", while parts of its concurrency story (essentially things related to synchronization, structured concurrency and data races) are well behind other languages. It has some amazing features (like a highly optimized preemptive scheduler), but it's not the perfect language for concurrent applications it claims to be.

questioner8216•7m ago
Rust concurrency also has issues, there are many complaints about async [0], and some Rust developers point to Go as having green threads. The original author of Rust originally wanted green threads as I understand it, but Rust evolved in a different direction.

As for Java, there are fibers/virtual threads now, but I know too little of them to comment on them. Go's green thread story is presumably still good, also relative to most other programming languages. Not that concurrency in Java is bad, it has some good aspects to it.

[0]: An example is https://news.ycombinator.com/item?id=45898923 https://news.ycombinator.com/item?id=45903586 , both for the same article.

questioner8216•20m ago
I dislike some of this article, my impression is similar to some of the complaints of others here.

However, are Go programs not supposed to typically avoid sharing mutable data across goroutines in the first place? If only immutable messages are shared between goroutines, it should be way easier to avoid many of these issues. That is of course not always viable, for instance due to performance concerns, but in theory can be done a lot of the time.

I have heard others call for making it easier to track mutability and immutability in Go, similar to what the author writes here.

As for closures having explicit capture lists like in C++, I have heard some Rust developers saying they would also have liked that in Rust. It is more verbose, but can be handy.

someone_1234•19m ago
Someone write similar for Erlang..
rustystump•13m ago
On a phone and the formatting of the snippets is unreadable with the 8 space tabs…

That said, i think about all languages have their own quirks and footguns. I think people sometimes forget that tools are just that, tools. Go is remarkably easy to be productive in which is what the label on the tin can claims.

It isnt “fearless concurrency” but get shit done before 5 pm because traffics a bitch on Wednesdays

ViewTrick1002•8m ago
> Go is remarkably easy to be productive in which is what the label on the tin can claims.

To feel productive in.

truth_seeker•7m ago
https://www.scss.tcd.ie/jeremy.jones/CS4021/lockless.pdf