HNHacker News
TopNewBestAskShowJobs

spankalee

11,928 karma · joined August 4, 2011

submissionscomments
spankalee··on Gemini 4 Argon
There's an API: you can use Gemini with other harnesses. Isn't the situation exactly like Claude vs Claude Code?
spankalee··on Gemini 4 Argon
3.8 Flash is just quite good, and so is the Antigravity harness.

I use a mix of Fable 5.1, Opus 5.5, and Gemini 3.8 Flash and Gemini holds it's own. Especially in writing, frontend, and sysadmin work. agy for configuring a NixOS system has been truly incredible.

spankalee··on Palantir founder purchases large swath of forest in Sweden
If you believe in global threats from AI, global warming, Russia and/or China, this probably isn't a bad place to build a bunker.
spankalee··on Evolving programming languages in the AI era
Oops, the quick-reference is wrong. The other docs correctly say that default floats are f64. Default int is i32 though. Fixing it.

My understanding is that i32 and f64 literals are pretty common among the more modern languages because f64 isn't much slower than f32 on modern CPUs and f32 costs precision, but i64 is slower than i32 (especially multiplies and divides or on 32 bit hardware) and i32 costs range, not precision, and most uses don't need the extra range.

spankalee··on Walgit: A Git server that is one binary in front of an object store
I really want something like this but that can be backed by a database or in-memory store, say for running Git in a browser, phone app, or Wasm.
spankalee··on Evolving programming languages in the AI era
Explaining the additional features as bits of other languages is exactly what helps LLMs:

"Dart-style constructors, Swift-style pattern matching and Strings, Trio-style async cancellation, Scala-style sealed classes"

spankalee··on Evolving programming languages in the AI era
Native compilation should be doable already with a Wasm compiler like Wastrel.

One reason I haven't explored that is that I want to tailor the language for the more constrained environment of Wasm GC first.

spankalee··on Evolving programming languages in the AI era
From experience with Zena, this is not true at all. Opus, Fable, Gemini Flash and Pro all barely make any syntax mistakes after a little is in context, and those are caught extremely early.

The one thing I do see sometimes is that agents sometimes don't take advantage of added features, but that's partially because the Zena code base doesn't use them as much yet. I'm working on skills and linter-based suggestions to use better patterns.

spankalee··on Evolving programming languages in the AI era
This part:

---

- Correct by construction: the language makes invalid states or programs hard or impossible to express.

- Statically established: types, proofs, and static analysis establish properties before execution.

- Runtime-enforced: memory management, isolation, capability boundaries, and other runtime enforced properties.

- Empirically validated: program validation through tests, property-based testing, and fuzzing.

---

Along with being familiar, so it's easy to generate, is a huge part of why I'm building Zena: https://zena-lang.dev/

I don't have the AI-first rationale put into the public docs well just yet, but I mention some of it here: https://zena-lang.dev/guide/why-zena/#familiar-to-humans-and...

along with a doc in the repo on this topic: https://github.com/elematic/zena/blob/main/docs/design/ai-fi...

In short, the more deterministic, automated, checks the better. AI can deal with a pedantic language. I intend to add statically verified structured concurrency, units of measure, contracts, and eventually more and more formal methods into the language so it can be a familiar TYpeScript-like base with as many static guarantees as we can fit in.

I also think that fine-grained isolation, which Zena gets via Web Assembly, is critical for limiting the capabilities of generated code and the blast radius of bugs, vulnerabilities, and non-aligned behavior.

I do have an optimistic hope that a language also optimized for humans, readability and simple semantics especially, has value in the future, even when most code is generated. We'll see about that.

spankalee··on U.S. appeals court upholds designation of Anthropic as supply chain risk
This is ridiculous. Anthropic should be free to say the terms for using their service. It doesn't "subordinate" the military, and the military is far from some infallible, unquestionable force here.

If the military wants to use AI to autonomously kill people, they can - Anthropic is not stopping them - thy just can't with Anthropic's services.

The government retaliating by then claiming that any use of Anthropic is risk is an obvious farce. How would Anthropic be any less of a risk if they let Claude autonomously kill people?

spankalee··on Opus 5.5 is good at explainer videos
I won't open Twitter, but where on Reddit is this stuff posted?
spankalee··on The JavaScript Midlife Crisis
I love JavaScript and TypeScript, but like all interpreted languages, they really do have a hard time fitting into certain environments where you can't get an enormously complicated VM or can't get by with a much slower version of the language.

You can argue that high-throughput / low-latency dev tools are one of these environments. I'm not so sure. I think a lot of JS tooling is written in slow JS and gets fast with a rewrite to another language largely because of better structure.

Some environments really are tougher though. I started using WebAssembly a lot a year ago and the story for JavaScript and Python is just pretty terrible. And for JS, the things that make it hard to run in Wasm aren't universally good things to have in the language in the first place. The extreme dynamism of JS is something that so much JS tooling tries to limit.

But I think a lot of the language is quite good, and that there are possible variants of JS that are great even. I started one I hope will fit that one day (https://zena-lang.dev) and the first use cases for me are all tooling to try to make sure it's at least good for that: self-hosted compiler, formatter, regex engine, JSON parser, etc. It's quite a bit like JS/TS, but fixes a lot of things and runs forward with features that will take JS many years to get to, if it ever does (ie, pipelines, pattern matching).

I'm hoping that WebAssembly can slowly continue to gain a place on the web so JS can give up its near monopoly there. We'll see!

spankalee··on Looking forward to Git 2.56 – and 3.0
There are lots of places it'd be useful to use Git that don't have filesystems.
spankalee··on Far-left party wins Berlin election, pledging to nationalise housing
The mass buyout of housing is by the masses: individuals own the _vast_ majority of housing, benefit from its scarcity and rising prices, and lobby for more restrictive zoning. Most rental property is owned by individuals too, so they're also the main rent extractors.

It's not corporate lawyers who show up to protest new housing, it's retiree homeowners.

spankalee··on Far-left party wins Berlin election, pledging to nationalise housing
Housing should be a commodity. Commodities are fungible, plentiful, and easily tradable.

Housing right now is the opposite of a commodity: it's a boutique investment for individuals whose price is propped up by regulations that artificially limit supply.

spankalee··on iOS 27, iPadOS 27, and macOS 27
I mean, this is nice:

"Apple framed WWDC 2026 around three pillars: platform improvements, trust and safety, and Apple Intelligence."

and it could have been mentioned in the launch announcement post.

spankalee··on iOS 27, iPadOS 27, and macOS 27
The linked page is 90% AI and not much about stability. If "the whole point of this update was to focus on fixing bugs and improving stability" they don't say so, so excuse me for not knowing that.

If it's a stability release, then great! But that's not what they're saying. Stability is mentioned once regarding search only. Performance has a very small sub-section half way down the page. Where do they mention the CPU scheduler rewrite, or any of the under-the-hood changes you're talking about? You seem to expect people to know about these things from somewhere else.

spankalee··on iOS 27, iPadOS 27, and macOS 27
So if you don't want to use Apple's AI, this brings... faster app launching on iOS? I guess I'll use the Liquid Glass controls, but otherwise this is a dud.
spankalee··on Ask HN: What are you working on? (September 2026)
I'm working on a new programming language for WebAssembly GC, called Zena: https://zena-lang.dev/

It's like a fixed up TypeScript specifically tailored for Wasm GC that can produce very small and fast binaries, but also has features like pattern matching, ownership / borrow checking for resources, pipeline, tail call elimination, multi-value returns, direct WASI component integration and a lot more.

spankalee··on A few good ideas in programming languages
Thanks!

So `items.[Iterable.iterator]()` is invoking a symbol-keyed method.

It's declared like:

    export interface Iterable<T> {
      static symbol iterator;

      [iterator](): Iterator<T>;
    }

    export MyArray<T> implements Iterable<T> {
      [Iterable.iterator]() { ... }
    }
This is similar to JS, where you can access properties of an object dynamically with [] notation, but Zena is static and doesn't have any reflection (yet) so the symbol has to be declared and statically resolvable, and Zena has operator overloading an a [] operator so we need a way to differentiate between symbol-keyed access from indexed access ([]), thus the o.[] syntax.

I do want to add pure functions, especially for compile time constants. I want to add a macro system that can either run pure functions (on the AST or IR, not sure yet) at compile time, or run arbitrary code sandboxed in a Wasm module.

spankalee··on A few good ideas in programming languages
Nice list. I have a new language I'm working on (called Zena: https://zena-lang.dev/) with all of these in some form:

If you have static types and unions, control-flow analysis and narrowing is critical for avoiding an excessive amount of casts - and if you also have pattern matching, you get very nice style where a type-check, state extraction, and branch are all one expression.

Borrow checking. Zena is a GC'ed language, but it runs in Wasm and lots of Wasm resources are external, so Zena has affine types and second-class values for managing resources and disposing of them when no longer used. GC + borrowing is a great combo because you don't need borrowing for everything and lexical lifetimes with a few escape hatches cover most things. The ownership system is also great for modeling structured concurrency.

I'm working on contracts after borrow checking is complete. My impetus there is AI-generated code. If humans still review at all, reviewing the contacts more than the implementations makes managing large amounts of changes easier.

I'd like to see a few more good ideas spread:

Formal verification. Contracts should be a good stepping stone into a spec language, from there a proof language and checker. This should also be good for AI-generated code.

Numeric unit types / units of measure with dimensional analysis. We should be able to say that a variable isn't just a f64, but a f64 of meters, and when divided by seconds, give a velocity. I don't know why this hasn't made it into more mainstream languages, but it seems like it makes programs more clear, not just statically safer. For synax, my plan is to parameterize scalars by units, like f64<m> vs f64<s> and have units like `m` and `s` be associated with dimensions like `length` and `duration`.

Async cancellation. I added cancellation as a first-class language concept in Zena so that it can be handled like exceptions, but aren't exceptions. It extends try/catch to try/catch/cancel/finally. When a task is canceled, a cancellation unwinds the stack starting from the next suspension point (await). The benefit here is that you don't have to remember to check for cancellation in async functions - they're all cancellable.

spankalee··on A Design Space Exploration of Async/Await
Wow, this is really helpful and timely!

I'm building a new language with async/await and had to make a lot of these decisions, but I didn't have this organized of a framework to ground myself in. I'm happy to see it clearly that I choose mostly Trio with a bit of JavaScript.

My language (Zena's) async docs page: https://zena-lang.dev/guide/async/ I think I might do a pass and try to call out the decision points more explicitly.

fwiw, I found this post on cancellation by the author of Trio to be vey compelling: https://vorpus.org/blog/timeouts-and-cancellation-for-humans... and I based the cancellation design of Zena on it.

Edit to add: I do wish this included JavaScript's AbortSignal in the Cancellation section. Not because it's good, but because passing cancel tokens is a pattern that exists. There's also the dimension of who can cancel and, like AbortSignal, whether tasks have to opt-in to cancellation checks.

spankalee··on Bun 1.4
SQLite bindings should absolutely not belong in a JS "standard library". SQLite is a project that most JS environments won't have enbedded.
spankalee··on Guarded Methods in OCaml (2025)
Cool to see this pop up today.

I'm building a new language and just a couple of days ago the concept of guard methods came up as I was trying to tighten up equality semantics to be more like Swift.

Things like Array.contains() only work if the element type implements the Equatable interface, so it would be a guard method. Maybe something like:

    class Array<T> {
      contains(value: T): boolean where T extends Equatable { ... }
    }
Or possibly a constraint on the `this` type, TypeScript style:

    class Array<T> {
      contains(this: Array<T extends Equatable>, value: T): boolean { ... }
    }
https://github.com/elematic/zena/blob/8d77f2b36001078f4d5054...
spankalee··on Nashville uses eminent domain to block data center near zoo
"can only be good" - you can't imagine ways in which they at least could be bad?
spankalee··on Cloudflare OS: an open platform for agents, apps, and work
Please add Wasm support :)

I'm making a whole new language to get around the problem you're talking about: it brings no runtime at all. One of my targets is a Sandstorm like system I've been slowly working on, but I'd love for it to be a fit for the actual Sandstorm successor.

spankalee··on Is AI reasoning right for the wrong reasons?
There is a significant difference between experiencing an apple through your own faulty senses and reading words from someone else who experienced an apple through their senses.
spankalee··on My car’s OTA update broke Android Auto
It's his blog. He can talk however he wants. You, however, don't have to read it.
spankalee··on Bluesky Trademarks ATProto
This would be much better titled "Bluesky Acquires the AT Protocol Trademark"
spankalee··on Grok Build is open source
LLMs have nothing to do with any of that.
Page 1 of 34Next →