Using Rust’s features, we can provide API bindings to CFStringGetBytes that prevent unsupported argument combinations at the call site to fix the problems identified in the previous post.| Always Processing
Designing a "correct by default" interface for CFStringGetBytes is surprisingly complex, as many of its behaviors are encoding-dependent.| Always Processing
The design patterns used by Core Foundation for memory management and mutability fit surprisingly well in idiomatic Rust. This post shares an overview of how I reached this conclusion the hard way.| Always Processing
Handling CFIndex/usize (signed/unsigned) conversion is important in crafting idiomatic Rust API bindings. I looked at how Apple handled this conversion between Core Foundation and Foundation, and between Foundation and Swift to help inform the direction for my Core Foundation crate.| Always Processing
Although release is "just" the logical inverse of retain, its implementation is much more complex, primarily due to the ARM synchronization model. This post explores the unique aspects of the release implementation (relative to retain), focusing on the memory ordering requirements on ARM.| Always Processing
Tagged pointer objects (a private runtime feature) optimize performance by storing an object’s data in its pointer value, eliminating the object’s heap allocation. This post looks at the implementation of NSNumber to highlight the use of and implications of this optimization.| Always Processing
Objective-C memory is managed through a reference counting scheme, which has evolved from a relatively simple API into a sophisticated, highly-optimized implementation while maintaining source and ABI compatibility.| Always Processing
I didn’t set out to build a home lab, but one emerged anyway. This post shares the choices I made to solve one-off problems and how those choices accumulated into a surprisingly large collection of hardware and services.| Always Processing
A comparison of Apple’s Associated References implementation and one I wrote for historical context, with additional notes about use with tagged pointer objects and what the assign association policy actually does.| Always Processing
The site has undergone extensive updates, receiving a new layout, theme, and art, along with a few usability improvements. With this time-consuming investment complete, I’ll again have bandwidth to regularly post new technical content.| Always Processing