RSSAmplifier

Blog

The {pnk}f(eli)x Blog

blog.pnkfx.orgRSS feed ↗20 posts

Latest posts

Linking Rust Crates, Part 1

This post is the first part in a planned series on linking Rust crates. My desire is to get informal feedback on these posts, and then turn it into more structured content suitable for the Rust reference, or maybe the Rustonomicon (or a book on its own.) Working on the Rust compiler, one topic that I come across from time to time is “what is supposed to happen when we use these particular…

Visuals redux: Getting mermaid going

This is just a post where I’ll either be happy or sad, depending on whether Github pages manages to render the same content the way that I see it on my local system. graph TD A["Felix tries to add Mermaid support to his blog"] B["Felix previews blog locally"] C["Felix tries to deploy blog to github pages"] A --> B B --broke--> A B --works--> C C--works-->D[Happy] C--broke-->E(Sad);

What is Rust's Hole Purpose?

There is an adage in the business world that goes something like this: This quote is attributed to Theodore Levitt, but there is significant evidence that the adage predated his use of it. People don’t want to buy a quarter-inch drill, they want a quarter-inch hole. It is a good line. Some people I talk to make the leap from safety to another property: security . The two topics are related,…

Why I use a debugger

I have been thinking about the Rust debugging experience, and I want to try tease apart what value a debugger provides to me. Last year, I gave a talk at QCon that promoted the use of rr as a tool for exploring Rust code. I wanted to convey an excitement about debugging, about using this tool to dive into the weeds of your program’s behavior. Since then, I have continued to talk to…

Road to TurboWish part 3: Design

This is part three in a series about the TurboWish performance analysis tool suite. In part one I described why our team selected this as a focus, and the goals for the tools. In part two I presented four narratives, each representing different idealized future customer experiences using the tools. Now I want to show you the design document I developed, which digs more into how I think I cannot…

Road to TurboWish; Part 2: Stories

It’s story-time! As I walk, I think about a new way to walk In my previous post , I described the observations that led us to select performance tooling as a focus, as well as the goals document I wrote to guide the next steps of the project. Now I want to show you the User Stories I wrote, to show what I think our customers want (and can reasonably expect) out of performance tools.…

Road to TurboWish; Part 1: Goals

This is a post about some recent history. I want to tell the world about a project I am leading at Amazon Web Services, called “TurboWish.” TurboWish, in a nutshell, is our umbrella term for a planned suite of tools for understanding your Rust program’s dynamic behavior. We want the tools to especially focus on providing insights into the performance characteristics of your…

How to dismantle an Atomic bomb

The problem Driving deallocation of state via ref-counting under our current atomic API means that you cannot avoid having a &AtomicUsize variable at the same time that you are deallocating the block of memory that contains the referenced atomic usize state. The proposal The idea is simple. Experienced Rustaceans know that in the general case, &T doesn’t actually mean immutable; it merely…

Mentoring rust diagnostics issue 81658

This was originally a github comment that, due to my writing style (and desire to teach), spun a bit out of control (or at least, didn’t match the overall style we try to follow for comments on rust-lang/rust repository ). So now, this is a blog post instead, where I get to do fun things like have better control over formatting and whatnot. (Based on what feedback I get on the post, maybe I…

Rust Bug Minimization Patterns

Update 19 November 2019 : fixed miscellaneous typos and a bug in the invariance example pointed out by readers both privately and on reddit thread . I also added a section near the beginning to draw attention to techniques that are somewhat Rust-specific and may not be broadly known. Hey there again! I have been pretty busy with Rust compiler tasks, so no there has not been a blog post for a few…

Breaking News: Non-Lexical Lifetimes arrives for everyone

Update 1 July 2019 : fixed bugs in EscapingWriter and as_reader examples. Update 8 July 2019 : fixed a new bug in as_reader example. Hey there everyone! It has been literally years since I last posted to this blog. I have been doing a bunch of Rust compiler work. One big feature has been deployed: Non-Lexical Lifetimes (hereafter denoted “NLL”). The motivation for this blog post: The…

GC and Rust Part 2: The Roots of the Problem

This is the second in a series of posts will discuss why garbage collection is hard, especially for Rust, and brainstorm about solutions to the problems we face. The previous post wrote down some criteria for integration. Now I want to delve into why satisfying those criteria is hard, at least in Rust as it stands today. (The body of this post makes heavy use of client-side rendering, because of…

Surfaces and Signatures: Component Privacy versus Dependence

I have had some thoughts on what privacy is used for in programming languages, and how it differs from the notion of dependence between modules (or at least compilation units) in a language like Rust. And I thought I should share. I have been working on an RFC Request For Comment : A document used to propose significant changes to the Rust language or standard library. meant to increase the…

Fixing Octopress Table Rendering

Learn how I hacked the SCSS for my blog to get tables to look right, without breaking everything else (I hope). Here is a sample table. key value1 value2 a apple aardvark b banana bonobo c clementine cat It is written in my blog source via this source text: 1 2 3 4 5 key | value1 | value2 ----|--------|---------- a | apple | aardvark b | banana | bonobo c | clementine | cat The default octopress…

Cherry-picking from the shoulders of giants

This post: I describe some changes to my blog’s presentation format, and how I hacked them in by cherry-picking from the shoulders of giants. I’m a big fan of Edward Tufte’s work on presentation of information. He mostly focuses on graphical presentations, especially of statistical data. But really one can learn much from his overall presentation style, e.g. from how he formats…

GC and Rust Part 1: Specifying the Problem

This is the first in a series of posts will discuss why garbage collection is hard, especially for Rust, and brainstorm about solutions to the problems we face. The relationship between garbage collection (GC) and the Rust programming language has been an interesting one. GC was originally deeply integrated into the language, complete with dedicated syntax (good old @T …). Over time the…

GC and Rust Part 0: Garbage Collection Background

This post is a prequel to a series of posts discussing why garbage collection is hard, especially for Rust, and brainstorming about solutions to the problems we face. The goal of this post is to provide the background foundational material about Garbage Collection that the other posts will then build upon. You can skip ahead to the follow-up posts (once they are published) if you feel you are…

Vis-a-vis, part 1: Visualizing Graphs via viz.js

This is a post discussing a couple different ways to draw pictures, mostly those of graphs (nodes and edges, i.e. circles or boxes, and lines between them). The technology covered by this post is viz.js , a Javascript library for rendering graphs specified via the DOT language. Its meant both as a reference for me to use when I want to remind myself of my options here, and as a demo of some…

An insight regarding DST grammar for Rust

Executive summary: type = unsized ⊎ sized , so we should use type as our generalization marker, not unsized . Background: Dynamically Sized Types (DST) The Insight: type is a better generalization marker Examples ported from DST, Take 5 Background: Dynamically Sized Types (DST) The Rust team has been discussing incorporating “dynamically-sized types” into the static semantics for Rust.…

Updating Octopress post-Mavericks upgrade.

I decided this morning to write a blog post related to Rust. I have not posted to this blog in months, and in the meantime I had upgraded this computer at home to Mac OS X Mavericks (10.9.2). So of course my existing set of commands for Octopress workflow did not work. At first there were dependencies like chunky_png-1.2.7 that had to be satisfied (re-installed, I assume; I am pretty sure I blew…