frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

John Carmack on mutable variables

https://twitter.com/id_aa_carmack/status/1983593511703474196
84•azhenley•5h ago

Comments

munchler•5h ago
> Making almost every variable const at initialization is good practice. I wish it was the default, and mutable was a keyword.

It's funny how functional programming is slowly becoming the best practice for modern code (pure functions, no side-effects), yet functional programming languages are still considered fringe tech for some reason.

If you want a language where const is the default and mutable is a keyword, try F# for starters. I switched and never looked back.

Terr_•5h ago
While it's amusing, I think it's sensible: One of the main tasks in most businessy programming is to take what a human wants, translate it to code, reverse-translate it back to human understanding later, modify it, and translate it again to slightly different code.

This creates friction between casual stakeholder models of a mutable world, versus the the assumptions an immutable/mostly-pure language imposes. When the customer describes what they need, that might be pretty close to a plain loop with a variable that increments sometimes and which can terminate early. In contrast, it maps less-cleanly to a pure-functional world, if I'm lucky there will at least be a reduce-while utility function, so I don't need to make all my own recursive plumbing.

So immutability and pure-functions are like locking down a design or optimizing--it's not great if you're doing it prematurely. I think that's why starting with mutable stuff and then selectively immutable'ing things is popular.

Come to think of it, something similar can be said about weak/strong typing. However the impact of having too-strong typing seems easier to handle with refactoring tools, versus the problem of being too-functional.

Freedom2•5h ago
Decades of blog posts, articles and books about "best practices" led to a suspicion of anything that wasn't bog standard OOP. This site in particular has also contributed to that, especially in the early 2000s, where you can easily find comments disparaging FP.
jeffreygoesto•25m ago
I think there's a deeper mechanism in these discussions. They all tend to go "If you do <insert_arbitrary_method_here> fully correct[0], it solves all of your problems."

But [0] is never possible.

josephg•5h ago
> If you want a language where const is the default and mutable is a keyword, try F# for starters. I switched and never looked back.

Rust is also like this (let x = 5; / let mut x = 5;).

Or you can also use javascript, typescript and zig like this. Just default to declaring variables with const instead of let / var.

Or swift, which has let (const) vs var (mutable).

FP got there first, but you don't need to use F# to have variables default to constants. Just use almost any language newer than C++.

bathtub365•3h ago
Are there languages that automatically extend this to things like data structure members? One of the things I like about the C++ const keyword is that if you declare an instance of a struct/class as const it extends that to its members. If the instance isn’t const, you can still mutate them (as long as they aren’t declared const within the structure itself)
orlp•8m ago
Rust works this way, yes. There are escape hatches though, which allow interior mutability.
snalty•4m ago
Yeah, here's an example: https://play.rust-lang.org/?version=stable&mode=debug&editio...
umanwizard•5m ago
If I understand what you’re asking correctly, rust is also like this. If you have a non-mut value of (or non-mut reference to) an object, you only get non-mut access to its members.
Fire-Dragon-DoL•1h ago
In typescript and js you get immutable references, but the data is mutable. Definitely not the same thing
eitland•7m ago
In Java you can use final[1]. And yes, if final points to an ArrayList you can change it, but you can also use final together with immutable data structures[2].

[1]: https://www.baeldung.com/java-final

[2]: https://www.baeldung.com/java-immutable-list

ehsankia•5h ago
functional programming has a lot of wonderful concepts, which are very interesting in theory, but in practice, the strictness of it edges on annoying and greatly hurts velocity.

Python has a lot of functional-like patterns and constructs, but it's not a pure functional language. Similarly, Python these days allow you to adds as much type information as you want which can provide you a ton of static checks, but it's not forced you like other typed languages. If some random private function is too messy to annotate and not worth it, you can just skip it.

I like the flexibility, since it leads to velocity and also just straight up more enjoyable.

tasn•5h ago
Functional programming languages (almost always?) come with the baggage of foreign looking syntax. Additionally, imperative is easier in some situations, so having that escape hatch is great.

I think that's why we're seeing a lot of what you're describing. E.g. with Rust you end up writing mostly functional code with a bit of imperative mixed in.

Additional, most software is not pure (human input, disk, network, etc), so a pure first approach ends up being weird for many people.

At least based on my experience.

rapind•4h ago
> come with the baggage of foreign looking syntax

Maybe they're right about the syntax too though? :)

kragen•4h ago
Which one, Erlang, Lisp, or ML?
nickpeterson•2h ago
Honestly I find ML derived languages the most pleasant to look at.
kragen•4h ago
Rust is not very suitable for functional programming because it is aggressively non-garbage-collected. Any time Rustaceans want to do the kind of immutable DAG thing that gives functional languages so much power, they seem to end up either taking the huge performance and concurrency hit of fine-grained reference counting, or they just stick all their nodes in a big array.
tayo42•4h ago
Using a big array has good performance though?
kragen•3h ago
Computer memory is already a big array. Probably what you are thinking of is that processing array items sequentially is a lot faster than following pointers, but in the cases I'm talking about, you end up using array indices instead of pointers, which isn't much faster.
rao-v•45m ago
Exactly this! I’d love a modern C++ like syntax with the expressiveness of python and a mostly functional approach.

C# is not that far I suppose from what I want

the__alchemist•5h ago
I think it's because (I'm looking at Haskell in particular) there are a lot of great ideas implemented in them, but the purity makes writing practical or performant time-domain programs high friction. But you don't need both purity and the various tools they provide. You can use the tools without the pure-functions model.

In particular: My brain, my computing hardware, and my problems I solve with computers all feel like a better match for time-domain-focused programming.

cogman10•4h ago
My problem with functional languages is there never seems to be any easy way to start using them.

Haskell is a great example here. Last time I tried to learn it, going on the IRC channel or looking up books it was nothing but a flood of "Oh, don't do that, that's not a good way to do things." It seemed like nothing was really settled and everything was just a little broken.

I mean, Haskell has like what, 2, 3, 4? Major build systems and package repositories? It's a quagmire.

Lisp is also a huge train wreck that way. One does not simply "learn lisp" There's like 20+ different lisp like languages.

The one other thing I'd say is a problem that, especially for typed functional languages, they simply have too many capabilities and features which makes it hard to understand the whole language or how to fit it together. That isn't helped by the fact that some programmers love programming the type system rather than the language itself. Like, cool, my `SuperType` type alias can augment an integer or a record and knows how to add the string `two` to `one` to produce `three` but it's also an impossible to grok program crammed into 800 characters on one line.

v9v•42m ago
> Lisp is also a huge train wreck that way. [...] There's like 20+ different lisp like languages.

Lisp is not a language, but a descriptor for a family of languages. Most Lisps are not functional in the modern sense either.

Similarly, there are functional C-like languages, but not all C-likes are functional, and "learn c-likes" is vague the same way "learn lisp" is.

umanwizard•2m ago
[delayed]
jandrewrogers•5h ago
Pure functional works great until it doesn't. For a lot of systems-y and performance-oriented code you need the escape hatches or you'll be in for a lot of pain and annoyance.

As a practical observation, I think it was easier to close this gap by adding substantial functional capabilities to imperative languages than the other way around. Historically, functional language communities were much more precious about the purity of their functional-ness than imperative languages were about their imperative-ness.

jancsika•3h ago
Hehe, purity is one helluva drug!

For some reason, this makes me think of SVG's foreignObject tag that gives a well-defined way to add elements into an SVG document from an arbitrary XML namespace. Display a customer invoice in there, or maybe a Wayland protocol. The sky's the limit!

On the other hand, HTML had so many loose SVG tags scattered around the web that browsers made a special case in the parser to cover them without needing a namespace.

And we all know how that played out.

Posted from an xhtml foreignObject on my SVGphone

Fire-Dragon-DoL•1h ago
Unfortunately unless there's an explicit way to state what has side effects like a mut keyword, a lot of fp programming advantages lose value because most devs default to mutable stuff, so the fp benefits don't compound
black_knight•35m ago
I think this works quite well with IO in Haskell. Most of my code is pure, but the parts which are really not, say OpenGL code, is all marked as such with IO in their type signatures.

Also, the STM monad is the most carefree way of dealing with concurrency I have found.

christophilus•35m ago
F# isn’t purely functional, though, and strikes a nice balance. I just don’t really like the .NET ecosystem, being 100% Linux these days, as it always seems slightly off to me somehow.
keeda•5h ago
We are still living with the hangover of C, which was designed for the resource-starved machines of eons ago, and whose style later languages felt they had to copy to get any kind of adoption. (And as you point out, that is how things turned out.)

My bet is functional programming will become more and more prevalent as people figure out how to get AI-assisted coding to work reliably. For the very reasons you stated, functional principles make the code modular and easy to reason about, which works very well for LLMs.

However, precisely because functional programming languages are less popular and hence under-represented in the training data, AI might not work well with them and they will probably continue to remain fringe.

charcircuit•4h ago
Const by default is not functional programming.
umanwizard•4h ago
Indeed, but it's one of the (many) good ideas from functional programming that have filtered into more mainstream languages.
brrrrrm•4h ago
one thing I've learned in my career is that escape hatches are one of the most important things in tools made for building other stuff.

dropping down into the familiar or the simple or the dumb is so innately necessary in the building process. many things meant to be "pure" tend to also be restrictive in that regard.

runevault•4h ago
Functional languages are not necessarily pure though. Actually outside Haskell don't most functional first languages include escape hatches? F# is the one I have the most experience with and it certainly does.
johncolanduoni•4h ago
I’ve done a significant amount of functional programming (including F#) and still reach for it sometimes, but I don’t think it provides substantial advantages for most use-cases. Local mutability is often clearer and more maintainable.

Also, category theorists think how excited people get about using the word monad but then most don’t learn any other similar patterns (except maybe functors) is super cringe. And I agree.

hyperhello•5h ago
> I wish it was the default, and mutable was a keyword.

I wish the IDE would simply provide a small clue, visible but graphically unobtrusive, that it was mutated.

In fact, I end up wishing this about almost every language feature that passes my mind. For example, I don't need to choose whether I can or can't append to a list; just make it unappendable if you can prove I don't append. I don't care if it's a map, list, set, listOf, array, vector, arrayOf, Array.of(), etc unless it's going to get in my way because I have ten CPU cores and I'll optimize the loop when I need to.

bee_rider•5h ago
I don’t have any useful ideas here but if you make a linter for this sort of thing, I suggest calling it “mutalator.”
estimator7292•4h ago
Your IDE probably supports this as an explicit action. JetBrains has a feature that can find all reads and writes to a variable
Denvercoder9•40m ago
It also has the ability to style mutated variables differently.
nielsbot•4h ago
I use Swift for work. The compiler tell you this. If a mutable variable is never mutated it suggests making it non-mutable. And vice versa.
qmmmur•48m ago
As will Typescript, at least using Biome to lint it does.
NathanaelRea•4h ago
I don't think this is the best option, there could be very hard bugs or performance cliffs. I think I'd rather have an explicit opt-in, rather than the abstraction changing underneath me. Have my IDE scream at me and make me consider if I really need the opt-in, or if I should restructure.

Although I do agree with the sentiment of choosing a construct and having it optimize if it can. Reminds me of a Rich Hickey talk about sets being unordered and lists being ordered, where if you want to specify a bag of non-duplicate unordered items you should always use a set to convey the meaning.

It's interesting that small hash sets are slower than small arrays, so it would be cool if the compiler could notice size or access patterns and optimize in those scenarios.

bbminner•4h ago
Right, sql optimizers are a good example - in theory it should "just know" what is the optimal way of doing things, but because these decisions are made at runtime based on query analysis, small changes to logic might cause huge changes in performance.
HDThoreaun•4h ago
Clang-tidy's misc-const-correctness warns for this. Hook it up to claude code and it'll const all non mutated mutables.
worthless-trash•38m ago
If you write in erlang, emacs does this by default ;)
gwbas1c•5h ago
Years ago I did a project where we followed a lot of strict immutability for thread safety reasons. (Immutable objects can be read safely from multiple threads.)

It made the code easier to read because it was easier to track down what could change and what couldn't. I'm now a huge fan of the concept.

piker•16m ago
You should check out Rust
ronnier•5h ago
Immutability was gaining huge traction with Java... then large parts of the industry switched to golang and we hardly make anything immutable.
antonvs•4h ago
Go is the new PHP.
ottah•3h ago
I would kill for an immutable error type
XorNot•49m ago
Go desperately needs support for immutable structs that copy cleanly.

I want to be able to write `x := y` and be sure I don't have mutable slices and pointer types being copied unsafely.

bitwize•5h ago
Hey Carmack, I heard a few hackers are working on a highly experimental language called Rust where everything is immutable by default and you have to declare mutable things 'mut'.
embedding-shape•5h ago
Eh, Rust is kind of "immutable by default" but not really enforcing that + "constants" in the way I think Carmack advocates for. Other languages does better in that regard. Examples: https://play.rust-lang.org/?version=stable&mode=debug&editio...
jasonthorsness•4h ago
Yeah the encouragement of shadowing is a little weird (learning Rust coming from Go where it is sort of discouraged)
lopatin•5h ago
How fast this got to the top, you would think John Carmack just invented nuclear fusion.
noduerme•5h ago
Why loops specifically? Why not conditionals?

A lot of code needs to assemble a result set based on if/then or switch statements. Maybe you could add those in each step of a chain of inline functions, but what if you need to skip some of that logic in certain cases? It's often much more readable to start off with a null result and put your (relatively functional) code inside if/then blocks to clearly show different logic for different cases.

turtletontine•4h ago
There’s no mutating happening here, for example:

  if cond:
      X = “yes”
  else:
      X = “no”
X is only ever assigned once, it’s actually still purely functional. And in Rust or Lisp or other expression languages, you can do stuff like this:

  let X = if cond { “yes” } else { “no” };

That’s a lot nicer than a trinary operator!
nielsbot•4h ago
Swift does let you declare an immutable variable without assigning a value to it immediately. As long as you assign a value to that variable once and only once on every code path before the variable is read:

    let x: Int
    if cond {
        x = 1
    } else { 
        x = 2
    }

    // read x here
ruszki•9m ago
Same with Java and final variables, which should be the default as Carmack said. It’s even a compile time error if you miss an assignment on a path.
fallat•5h ago
John Carmack on Potatoes

John Carmack on Forks

John Carmack on Coca Cola

Sorry, but this isn't even news. John Carmack's opinion doesn't validate anything. The fact it took him this long to be exposed to "mutability bad" is a bit concerning and should be part of the reasoning why you don't just absorb opinions from well known people!

EdwardKrayer•5h ago
John Carmack is my spirit animal. I like reading his thoughts because they give me strange insight into the way he thinks "sideways" sometimes - even if I disagree with them, I always enjoy an outside perspective.
embedding-shape•5h ago
I don't think this is the first time Carmack been talking about functional programming and against mutability, here is some of his thoughts from 2014: http://number-none.com/blow/john_carmack_on_inlined_code.htm...

Just because someone is expressing a thought after you or others have already thought about it, doesn't mean they're trying to push it as something new and exciting, it's just another perspective.

shmerl•4h ago
Proposing making immutable by default in C or C++ doesn't make sense due to backwards compatibility reasons. New languages like Rust have easier time making better choices with immutable by default.
loeg•4h ago
cpp2/cfront could plausibly do this, right? Except he doesn't want to:

https://github.com/hsutter/cppfront/wiki/Design-note%3A-cons...

shmerl•4h ago
Well, if they are willing to break backwards compatibility, a lot of things can be improved, including this.
NathanaelRea•4h ago
They could just add a "use immutable;" directive that you place at the top of your file.
Pxtl•3h ago
C# does this with the null hole. I wish more languages would take a versioning approach to defaults at the file-level.
GPerson•4h ago
Kinda curious on what jblow would say about this.
kragen•4h ago
blojo? Ask him and report back.
GPerson•4h ago
Lol what a loser
kragen•3h ago
No, he's a competent programmer.
swiftcoder•20m ago
> > Lol what a loser

> No, he's a competent programmer.

I don't think these are mutually exclusive

loeg•4h ago
Yeah, I also wish it was the default. But it's a little too verbose to just sprinkle on every variable in C++. Alas. Rust gets this right, but I'm stuck with C++ at work.
DashAnimal•4h ago
https://nitter.net/id_aa_carmack/status/1983593511703474196
LeoPanthera•4h ago
[flagged]
whimsicalism•4h ago
at least in ML, no other social media forum has comparably technical depth - would love for people to point me to others
loeg•4h ago
No Twitter clone has supplanted the original. Bluesky is a joke. Federation doesn't work. Threads isn't close. Musk's ownership isn't such a negative that it outweighs everything else.
Pxtl•4h ago
> Musk's ownership isn't such a negative that it outweighs everything else.

If it was just his ownership that would be one thing but his aggressive support for turning the site into /pol/ has ruined it.

bigstrat2003•3h ago
That is not really a reasonable take. Judging people for what website they use is extremely shallow.
tomhow•2h ago
Please don't post off-topic flamebait on HN. https://news.ycombinator.com/newsguidelines.html
kins•4h ago
Why do you all worship Carmack? I've never seen the appeal.
ottah•3h ago
I mean, he's very accomplished, with most of it being well known by the average user.
stevage•4h ago
In JavaScript, I really like const and have adopted this approach. There are some annoying situations where it doesn't work though, to do with scoping. Particularly:

- if (x) { const y = true } else { const y = false } // y doesn't exist after the block - try { const x = foo } catch (e) { } // x doesn't exist after the try block

NathanaelRea•4h ago
You could do an absolutely disgusting IIFE if you need the curly brace spice in your life, instead of a typical JS ternary.

  const y = (() => {
    if (x) {
      return true;
    } else {
      return false;
  })();
cookiengineer•3h ago
Technically you could just use an assignment ternary expression for this:

    const y = (x === true) ? true : false;
I used this kind of style for argument initialization when I was writing JS code, right at the top of my function bodies, due to ES not being able to specify real nullable default values. (and I'm setting apart why I think undefined as a value is pointless legacy).

    Composite.prototype.SetPosition(x, y, z) {

        x = (isNumber(x) && x >= 0 && x <= 1337) ? x : null;
        y = (isNumber(y) && y >= 0 && y <= 1337) ? y : null;
        z = isNumber(z) ? z : null;

        if x !== null && y !== null && z !== null {
            // use clamped values
        }

    }
NathanaelRea•3h ago
I typically only use ternaries for single operations and extract to a function if it's too big. Although they are quite fun in JSX. For your code i'd probably do:

  function SetPosition(x, y, z) {
    if (!(isNumber(x) && isNumber(y) && isNumber(z))) {
      // Default vals
      return;
    }
    x = clamp(x, 0, 1337);
    y = clamp(y, 0, 1337);
    z = z;
  }
cookiengineer•3h ago
I always call this the difference of return branch styles. Yours I'd describe as "fast fail" aka return false as quickly as possible (for lack of a better terminology) whereas I personally prefer to have a single return false case at the bottom of my function body, and the other validation errors (e.g. in Go) are usually in the else blocks.

In JS, errors are pretty painful due to try/catch, that's why I would probably these days recommend to use Effect [1] or similar libraries to have a failsafe workflow with error cases.

Errors in general are pretty painful in all languages in my opinion. The only language where I thought "oh this might be nice" was Koka, where it's designed around Effect Types and Handlers [2]

[1] https://effect.website/

[2] https://koka-lang.github.io/koka/doc/index.html

fuzzythinker•2h ago
nitpick: cleaner w/o ()'s, as '=' is the 2nd lowest operator, after the comma separation operator.
stevage•3h ago
I love it.
askmrsinh•3h ago
Why not do:

const y = x ? true : false;

stevage•3h ago
I'm talking about cases with additional logic that's too long for a ternary.
keeda•3h ago
Ditto. These days those are the only cases where I use "let" in JS. The thing I miss most from Kotlin is the ability to return values from blocks, e.g.

val result = if (condition) { val x = foo() y = bar(x) y + k // return of last expression is return value of block } else { baz() }

Or:

val q = try { a / b } catch (e: ArithmeticException) { println("Division by zero!") 0 // Returns 0 if an exception occurs }

Edit: ugh, can't get the formatting to work /facepalm.

askmrsinh•3h ago
Constants are useful for reasoning about code, but anyone who focuses only on making everything an immutable is missing the point. The main goal should be achieving referential transparancy.

It can be perfectly fine to use mutable variables within a block, like a function when absolutely needed - for example, in JavaScript's try catch and switch statements that need to set a variable for later use. As long as these assignments are local to that block, the larger code remains side-effect free and still easy to reason about, refactor and mantain.

https://rockthejvm.com/articles/what-is-referential-transpar...

swiftcoder•25m ago
Rediscovering one of the many great decisions that Erlang made
DarkNova6•22m ago
To be fair, Carmack has advocated for immutability and other good practices at least since the 2000s.
signa11•19m ago
erlang predates that.
eps•5m ago
I doubt the GP tried to imply the opposite.
gorgoiler•10m ago
I still have a habit of naming variables foo0, foo1, foo2, from a time working in Erlang many years ago.
slifin•16m ago
Yeah I wish variables were immutable by default and everything was an expression

Oh well continues day job as a Clojure programmer that is actively threatened by an obnoxious python take over

AMD Could Enter ARM Market with Sound Wave APU Built on TSMC 3nm Process

https://www.guru3d.com/story/amd-enters-arm-market-with-sound-wave-apu-built-on-tsmc-3nm-process/
103•walterbell•5h ago•47 comments

Affinity Studio now free

https://www.affinity.studio/get-affinity
971•dagmx•16h ago•642 comments

Pornhub says UK visitors down 77% since age checks came in

https://www.bbc.com/news/articles/cgkz3m3re1zo
24•vinni2•2h ago•23 comments

Rouille – Rust Programming, in French

https://github.com/bnjbvr/rouille
92•mihau•1w ago•34 comments

Kimi Linear: An Expressive, Efficient Attention Architecture

https://github.com/MoonshotAI/Kimi-Linear
125•blackcat201•8h ago•3 comments

How the cochlea computes (2024)

https://www.dissonances.blog/p/the-ear-does-not-do-a-fourier-transform
421•izhak•15h ago•132 comments

Phone numbers for use in TV shows, films and creative works

https://www.acma.gov.au/phone-numbers-use-tv-shows-films-and-creative-works
164•nomilk•10h ago•67 comments

John Carmack on mutable variables

https://twitter.com/id_aa_carmack/status/1983593511703474196
84•azhenley•5h ago•99 comments

Free software scares normal people

https://danieldelaney.net/normal/
639•cryptophreak•17h ago•390 comments

987654321 / 123456789

https://www.johndcook.com/blog/2025/10/26/987654321/
555•ColinWright•4d ago•92 comments

Modifying a radiation meter for (radioactive) rock collecting

https://maurycyz.com/projects/ludlum3/
28•8organicbits•6d ago•0 comments

Show HN: Quibbler – A critic for your coding agent that learns what you want

https://github.com/fulcrumresearch/quibbler
46•etherio•7h ago•11 comments

Exceptional Measurement of Chirality

https://www.rsc.org/news/2019/july/exceptional-measurement-of-chirality
17•bryanrasmussen•5d ago•2 comments

Springs and bounces in native CSS

https://www.joshwcomeau.com/animation/linear-timing-function/
187•feross•2d ago•27 comments

NPM flooded with malicious packages downloaded more than 86k times

https://arstechnica.com/security/2025/10/npm-flooded-with-malicious-packages-downloaded-more-than...
244•jnord•1d ago•177 comments

A Classic Graphic Reveals Nature's Most Efficient Traveler

https://www.scientificamerican.com/article/a-human-on-a-bicycle-is-among-the-most-efficient-forms...
6•ako•1w ago•1 comments

Jack Kerouac, Malcolm Cowley, and the difficult birth of On the Road

https://theamericanscholar.org/scrolling-through/
46•samclemens•2d ago•24 comments

Florian Schneider Collection: Instruments and equipment up for auction

https://www.juliensauctions.com/en/articles/the-florian-schneider-collection-rare-instruments-and...
22•cainxinth•3d ago•4 comments

Minecraft HDL, an HDL for Redstone

https://github.com/itsfrank/MinecraftHDL
152•sleepingreset•13h ago•17 comments

Zig's New Async I/O

https://andrewkelley.me/post/zig-new-async-io-text-version.html
295•todsacerdoti•1d ago•112 comments

Show HN: I made a heatmap diff viewer for code reviews

https://0github.com
213•lawrencechen•18h ago•62 comments

Lenses in Julia

https://juliaobjects.github.io/Accessors.jl/stable/lenses/
99•samuel2•4d ago•31 comments

Denmark reportedly withdraws Chat Control proposal following controversy

https://therecord.media/demark-reportedly-withdraws-chat-control-proposal
327•layer8•10h ago•100 comments

Roadmap for Improving the Type Checker

https://forums.swift.org/t/roadmap-for-improving-the-type-checker/82952
45•glhaynes•7h ago•14 comments

A Closer Look at Piezoelectric Crystal

https://www.samaterials.com/content/a-closer-look-at-stressed-piezo-crystals.html
5•pillars•1w ago•3 comments

Show HN: Front End Fuzzy and Substring and Prefix Search

https://github.com/m31coding/fuzzy-search
29•kmschaal•2d ago•2 comments

Launch HN: Propolis (YC X25) – Browser agents that QA your web app autonomously

https://app.propolis.tech/#/launch
95•mpapazian•15h ago•27 comments

The Psychology of Portnoy: On the Making of Philip Roth's Groundbreaking Novel

https://lithub.com/the-psychology-of-portnoy-on-the-making-of-philip-roths-groundbreaking-novel/
33•lermontov•1w ago•0 comments

ICE and the Smartphone Panopticon

https://www.newyorker.com/culture/infinite-scroll/ice-and-the-smartphone-panopticon
167•fortran77•7h ago•74 comments

Show HN: Status of my favorite bike share stations

https://blog.alexboden.ca/toronto-bike-share-status/
35•alexboden•5d ago•8 comments