Today's daily ruling on Judging FtW proposed an interesting question that lies at the intersection of mathematics, computer science, and tournament play policy. Take a look at these two cards: Omniscience allows you to cast Petals of Insight without paying its mana cost, and you can choose to return Petals to your hand after it resolves. It seems intuitive that by casting and re-casting…
The end This post is the culmination of the previous three posts, which discussed the nature of impl Trait , how to improve it , and prior work on impl Trait . This is my final recommendation on a path forward for impl Trait . Recap As a quick recap, I suggest introducing a new as impl Trait language feature that abstracts types in general. Augmented with either named unnameable types or expanded…
If you're not interested in reading about the prior work done on impl Trait , feel free to skip ahead to the fourth and final post . Prior work The concepts behind impl Trait have been around for a surprisingly long time. I've done my best to collect relevant RFCs, successful and failed, review them and compare them to my proposal. There are five RFCs that are directly relevant to impl…
Where we left off In part 1, we explored some possibilities for desugaring impl Trait in return position. In this post, I will explore these possibilities more fully and try to discover the logical implications of them. If you're feeling goal-oriented, you can skip to the next post where I discuss prior art and compare my proposal against it. Let's start far away from desugarings;…
Foreword This series is both an explanation and criticism of impl Trait . A large portion of this text is dedicated to explaining and understanding the properties of impl Trait , but it is not solely an explainer. If you're already familiar with the properties and mechanics of impl Trait , you can skip to the next post . If you want to read the past work done on impl Trait , you can skip to…
let wasm_bindgen; (function() { const __exports = {}; let wasm; let WASM_VECTOR_LEN = 0; let cachegetUint8Memory0 = null; function getUint8Memory0() { if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); } return cachegetUint8Memory0; } let cachedTextEncoder = new TextEncoder('utf-8'); const…
Controls Move : WASD/Arrow keys (desktop), swipe (mobile) Undo : Space (desktop), top left button Reset : Shift + Space (desktop), bottom left button Unfocus : Escape (desktop), click away, tap (mobile) let wasm_bindgen; (function() { const __exports = {}; let wasm; let WASM_VECTOR_LEN = 0; let cachegetUint8Memory0 = null; function getUint8Memory0() { if (cachegetUint8Memory0 === null ||…
A little background Back in college, I played a lot of puzzle games . When I talk about these kinds of games, I'm going to be referring to a very specific subset of puzzle game. Some examples include: Stephen's Sausage Roll English Country Tune Sokobond I was also fortunate to take Data Structures at RPI, where at the time professor Cutler (hi Barb!) had a yearly…
I've been working on rkyv , a zero-copy deserialization library, since November of 2020. rkyv is similar to Cap'n Proto and FlatBuffers , but has a handful of different design choices that make it stand out: No type restrictions: you can serialize anything with rkyv No external schemas: you can use the library with just #[derive] s Rust-only: it doesn't sacrifice simplicity and…
What is rkyv? rkyv is a zero-copy deserialization framework written in rust. It's deeply integrated into the language and has a lot of neat features with the new v0.2.0 release. I originally released and posted about rkyv in the rust subreddit and got a lot of great feedback. Along with a couple highly desired features, many people asked for a blog post about the design and internals of rkyv.…
I'm a big fan of Rust And so are a lot of other people. There's a lot to love about the language, build system, and packages available. But what really brings it home is the community around the language and how they approach programming. In general, the Rust community seems to strike a good balance between purity and pragmatism. Maybe it's because of what the language was built to…