Osprey Blog

Language design and implementation notes.

error-handling exceptions panics algebraic-effects result-types ocaml koka eff language-design

Exceptions and Panics Were a Mistake: Better Error Handling

Exceptions and panics turn ordinary control flow into hidden exits. Osprey makes expected failure explicit with Result types and algebraic effect handlers.

20 min read By Christian Findlay
package-management semantic-versioning breaking-changes compatibility testing

SemVer Is All Lies. Please Stop

Semantic versioning records maintainer intent, not compatibility proof. Osprey's package plan proposes exact identity, compatibility epochs, and downstream testing.

9 min read By Christian Findlay
perceus automatic-reference-counting memory-management functional-programming compiler

Perceus ARC in Osprey: Functional Memory Management

Osprey ships opt-in Perceus automatic reference counting. The compiler inserts ownership operations, and the runtime reclaims values as owner counts reach zero.

10 min read By Christian Findlay
language-design flavors functional-programming ml-syntax

Osprey Flavors: Two Syntaxes, One Language

Default and ML syntax lower to the same Osprey program representation.

3 min read By Christian Findlay
collections data-structures functional-programming language-design

Persistent Collections in Osprey: Immutable List and Map with Structural Sharing

Osprey now ships persistent List<T> and Map<K,V> backed by a 32-way bitmapped vector trie and a HAMT — the same data structures that power Clojure and Scala. Append, set and remove are O(log32 n); old versions of a collection stay valid in O(1) extra space.

8 min read By Christian Findlay