March 6, 2026

When functions become a religion

Async Programming Is Just Inject Time

Programmer says “functions aren’t real” and the internet absolutely loses it

TLDR: A blogger tried to explain a new way to handle errors and async code by claiming “functions don’t exist,” and instantly triggered a flame war over how computers *really* work. Some readers nitpicked the chip-level details, others mocked “religious” abstractions, and the whole thing morphed into a fight over practicality vs. theory.

A calm blog post about new ways to handle errors in code turned into a full-on faith vs. physics brawl after the author opened with: “functions don’t exist, they’re a social construct.” The idea was to ease people into “effect systems” — a fancy way of managing things like errors and async (waiting) in programs — by reminding everyone that computer functions are just an illusion built on top of simple jumps. Instead, the crowd went straight for the pitchforks.

One camp showed up with links and receipts. Commenters like gpderetta and jcranmer basically yelled, “Your CPU does care!” and dropped detailed references to special ‘call’ and ‘return’ instructions, security checks, and prediction tricks inside modern chips. Another commenter fired off a link to the x86 manual with the kind of energy usually reserved for conspiracy debunks, joking that too much abstraction turns programming into “religion and superstition.”

Then came the side quests. Someone dismissed the shiny research languages the author loves as “languages nobody uses” and plugged their favorite tool instead, like a pop-up ad in human form. Others complained the article promised magic new features but opened with a dry lecture on how function calls work. What was supposed to be a nerdy love letter to “effects” became something much better: a chaotic thread where people argued about what’s real in computing, who’s being too academic, and whose favorite tech is actually worth learning — with plenty of snark to go around.

Key Points

  • The author sought better error-handling models and became interested in effect systems after reading about Koka and Effekt.
  • Functions are presented as abstractions aiding reasoning and compiler guarantees, rather than CPU-level constructs.
  • A C example illustrates call/return mechanics, where the return address is implicitly passed to enable dynamic return points.
  • Static dispatch is determined at compile time, while dynamic dispatch selects targets at runtime based on additional information.
  • Java is used to demonstrate dynamic dispatch, where a method like toString is chosen according to the receiver’s runtime type.

Hottest takes

“Sufficiently large distances of abstraction from the concrete, underlying mechanics are indistinguishable from religion and superstition” — rdevilla
“Instead of exploring a research language that nobody uses you could try a mature effects system for a semi-popular language” — hackingonempty
“This article would benefit from an introduction that lays out the structure of what is to come… I’m immediately wondering why this is here” — noelwelsh
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.