Florian retweeted
Semantic Diffs are coming to @rescriptlang 🧵
Review a compiler change as the change it makes to the compiler's own objects: here, the parse tree of `%raw`, Before and After.
People of Pi: We've shipped Pi 1.0 with Pi Durable. Go make them yours.
earendil.com/posts/pi-1-0/
Florian retweeted
Sury v11.1.0-rc.0 is out!
- Protobuf support 5x faster than any other JS library
- Standard Schema result returns multiple issues - perfect for form libraries
- 40x faster parsing with failures
- New S.compareInput and S.compareOutput
- Default value support for S.nullish
Florian retweeted
I'm seeing a lot of euphoria about how Opus 5.5 is good at TLA+, and this means that all software will soon be formally verified. As a person who loves TLA+ so much he wrote a book on it, I want to throw a particular cold shower on people's enthusiasm by talking about the limits of what you can actually verified with it.
The high level simplification is that TLA+ sees a system as a set of "behaviors", or possible sequences of states. For example, the pseudocode "pick a random number from 1-3 and decrement it to 1" has three behaviors: `{3 -> 2 -> 1, 2 -> 1, 1}`. From here, there are two basic kinds of TLA+ properties:
- `[]P` means that `P` is true in *all states* of *every behavior*.
- `<>P` means that `P` is true in *at least one state* of *every behavior*.
`[]P` is immediately useful as an **invariant**, or something that always be true of your system. This is things like "your data is never corrupt" or "there's always at least one server online." `<>P` is a little more abstract, but for technical math reasons I won't get into here, can be stacked with `[]` to create really complex and useful properties. `<>[]P` represents things like "the algorithm eventually converges on the right answer", `[]<>P` things like "if two data stores desync, they will eventually resync", and `[](P => <>Q)` things like "If a message is put on the queue, it's eventually processed by a worker".
Really cool stuff!
These primitives were chosen to make a wide array of properties useful. And if we're clever, we can do all sorts of more complex properties, like bounded time constraints and history properties. But we're always constrained to 1) define a logical formula 2) over individual behaviors, and 3) check that all behaviors satisfy that formula.
So some things that we *cannot* express in TLA+:
- Possibility and reachability properties: that it's always possible to *make* P true, even if you don't actually decide to. Things like "I can always shut down the computer" or "A user can always change their password". These can't be expressed with `<>P` because that's "for all behaviors, P happens at least once", we actually want "for all behavior prefixes, there is at least one behavior where P happens at least once".
- Hyperproperties: properties that are defined over two or more traces. These are things like "painting a car red doesn't make it faster" or "users cannot infer secret data by observing public data". We can't do these because TLA+ only looks at one behavior at a time.
- Statistical properties: 95% latency is 1ms. Impossible because most of these are hyperproperties.
- Properties about if a system is robust against code changes. Impossible because, uh, you have new behaviors now.
Some of these are solvable in different logical formalisms. CTL can do reachability, PRISM can do statistical properties, etc. Those have their own tradeoffs and limitations, though, and no system can do everything. Others are solvable with a lot of cleverness tailored to the specific spec, like lifting a model into a hypermodel. But these are insanely inefficient and make your "clever spec" diverge significantly from the real world system, so introduce a lot more opportunity for things to go wrong.
The core problem, though, is (1): properties are logical formula. If we don't know how to express a system property as a logical formula, we can't verify it. 99% of the properties we care about fall under this. The information on the site is easy for a user to find. Our LLMs behave as we expect them to. Our application can't be used to break the law. TLA+ (and Quint and Lean and Rocq) are near-useless here, no matter how clever you are.
Don't get me wrong: `[]P` and `<>P` represent a huge range of useful properties and TLA+ is incredible at finding awful concurrency bugs. But there's a lot it fundamentally can't do and we shouldn't believe that it will solve all our worries about software bugs. And the same goes for all other formal verification languages, too.
Florian retweeted
People who don't read the code have no idea how much complexity agents dump into their codebase.
I still keep agents on a short leash, but sometimes I give them a broader task and more freedom - eg, with personal dev tooling. That's when they go completely nuts with defensive code and remind me just how far into the stratosphere a complexity can get. They are literally heroin addicts without supervision.
I've iterated on my "don't overcomplicate shit" rule a lot. Maybe it's me, but I still can't make them reliably stop doing this.
My guess is that labs would rather bias toward defensive code than risk missing an edge case. Balancing that against complexity is still a human job.
Reminder why we use memory-safe languages. Humans cannot be trusted to find that stuff.
Had ChatGPT sometimes crashing on me after updating to macOS 27 and... Astra found a ~14 year old bug in libuv. github.com/libuv/libuv/pull/…
Florian retweeted
Bend 2 is here!
It is a new programming language that blocks AI mistakes via *proof checking* - the same technique big AI labs used to solve open math problems, like Navier-Stokes.
It is also very fast, and runs on GPUs.
Watch the video. Link in the comments.
RELEASE DAY
After almost 10 years of hard work, tireless research, and a dive deep into the kernels of computer science, I finally realized a dream: running a high-level language on GPUs. And I'm giving it to the world!
Bend compiles modern programming features, including:
- Lambdas with full closure support
- Unrestricted recursion and loops
- Fast object allocations of all kinds
- Folds, ADTs, continuations and much more
To HVM2, a new runtime capable of spreading that workload across 1000's of cores, in a thread-safe, low-overhead fashion. As a result, we finally have a true high-level language that runs natively on GPUs!
Here's a quick demo:
Florian retweeted
ReScript 13.0.0-alpha.6 is out!
I contributed parser improvements that cut parsing time by ~5% on real code (~10% in some synthetic benchmarks). Long-awaited source map support is here too.
Give this pre-release a try!
github.com/rescript-lang/res…
Florian retweeted
Compilation of NodeJS apps to a fully native binary has been achieved. I don't know who needs it, but I think it is very cool.
Now, in practice it is not that useful without soundly typed code, which is the key to really unlocking native performance (coming). But still, fun.
Florian retweeted
Rewriting away from Rust
github.com/rescript-lang/res…
Florian retweeted
Expanding on this a bit, I'm very bullish on React Native for the following (non-exhaustive) reasons:
- You have one code surface instead of two. Defining your conventions in one codebase won't necessarily apply to the other and strong conventions are important.
- Tests share the same contract in both iOS and Android.
- Strong linting/formatting defined in one place targets both platforms. You want to make it hard for an agent to go off the rails.
- One, consistent design system. You can split where you need to but any impact you make for one platform applies to the other also.
- Review once. If you're writing (or having an agent write) two distinct codebases you have way more code to review. Review is a major bottleneck with agents so optimizing for this is a good idea.
- Less tokens. Telling an agent "Go build this thing on iOS" -> "Looks good now build it for Android" is wasteful
Florian retweeted
V4 is out, tons of finishes, basically lovable/base44 for any site you've.
click a thing
say what to do
approve plan(if you roll that way)
watch agent fix ugly thing
review diff.
Big release from tons of contributors! 🫶🫶
frontman.sh
Florian retweeted
Acadia is out today! Bringing the benefits of @elmlang to SQLite and PostgreSQL:
- Friendly error messages
- Custom types for precise column data
- Simple module system for easy reuse
Check it out! acadia.engineering/blog/reth…
























