By Nick Cameron :
dyn Trait and impl Trait in Rust |
One of the more subtle aspects of Rust is how traits can be used as types. In this blog post I will attempt a bit of a deep dive into how to use traits as types and how to choose between the different forms. Preliminary: traits are not typesA type
Organise your commits |
Crafting a beautiful PR is not a high priority for a lot of people, but I think it should be! In this post, I'll expound on what a good, well-organised PR looks like, why you should do that, and how you can do that. This is an opinionated post, not
SIG-txn reading group, Nov + Dev 2020 |
The TiKV transactions SIG is starting up its reading group. We'll try to read and discuss a paper each month. If you're interested in research in distributed transactions, come join in! We'll start by reading 'Industrial-Strength OLTP Using Main Memory and Many Cores', by Avni et al. at Huawei Research
Cargo's next few years |
The Cargo team have been thinking about and discussing long-term plans for Cargo. In this post I'll talk about what we hope Cargo will look like around the time of the next edition (assuming there is another edition and that it happens in about three years, neither of which is
Rust 2020 |
I was thinking of not writing a blog post this year. I didn't think I'd have much to say. But I thought that I should, I had some nagging feelings that we needed to do some things differently. Once I started writing, I found plenty to talk about. This blog
Cargo in 2019 |
I recently published a post detailing a vision for the next few years (hah! Not so recently now, this took a lot longer than expected). Here I'll get into more detail about 2019. There will be three high-priority focus areas: cross-compilation, plugins, and compile times. There are also two buckets
What to do in Christchurch |
LCA 2018 is happening in January in Christchurch (which is a great conference and has a few Rust talks this year). I'm not able to attend, but I am in town, so I hope to meet some of my internet friends (get in touch!). I thought I'd write down a
Starting at PingCAP |
Last week was my last at Mozilla, and tomorrow is my first day at PingCAP. I don't have much to blog about because, you know, I haven't started yet. But I am very excited about the new job. I think database implementation and distributed systems are really interesting and impactful
Documentation Quest! |
The TiKV Transactions SIG's documentation quest begins today! It is our first community activity. There are tons of bite-size tasks and some more involved work, with the goal of making TiKV's transaction components well-documented, easy to understand, and a go-to resource for learning how to implement distributed transactions. Well-documented code
Rust in 2022 |
A response to the call for 2019 roadmap blog posts. In case you missed it, we released our second edition of Rust this year! An edition is an opportunity to make backwards incompatible changes, but more than that it's an opportunity to bring attention to how programming in Rust has
Rust in 2021 |
It's that time of year again - time to think about a roadmap for next year! As I wrote last year, I think a good roadmap should provide focus for the project, but not specify how we should achieve the goals we choose. The rest of this post will be
Remote work part 1 |
I've been working remotely (in various ways and at various companies) for nearly ten years. I love working remotely, I am happier and more productive. However, it takes some adjustment and it's not for everyone. Given that we are currently seeing the world's largest ever experiment in remote working, I
Remote work part 2 |
In my last post I talked a bit about some general issues with remote work. In this post I am going to focus on communication - probably the most important thing for remote workers to master. I am personally still working on this stuff - I'm a bit shy and
Rustconf 2020 |
Rustconf 2020 happened last week (August 20th). For the first time, it was an online conference. Ironically that made it more difficult for me to attend because of timezones (and I was on vacation, so even less inclined to wake up at 4am). So I caught up with the talks
Announcing the Transaction SIG |
I've been working on the distributed transaction system in TiKV for about a year now. TiKV is an open-source, distributed and transactional key-value store written in Rust. Recently, I've been helping create a distributed transactions 'special interest group' within the TiKV community. Below is a copy of the announcement blog
Leaving Mozilla and (most of) the Rust project |
Today is my last day as an employee of Mozilla. It's been almost exactly seven years - two years working on graphics and layout for Firefox, and five years working on Rust. Mostly remote, with a few stints in the Auckland office. It has been an amazing time: I've learnt
More on the RLS and a 1.0 release |
In my last post, I announced a release candidate for the RLS 1.0. There has been a lot of feedback (and quite a lot of that was negative on the general idea), so I wanted to expand on what 1.0 means for the RLS, and why I think
Leaving the Rust core team |
I'm stepping down from Rust's core team. It's my last official involvement with Rust, and I'm kinda sad about leaving. Rust is exciting and important, and I love the community and technology. It has been a joy and an education to work with the core team; they are good people.
Large Transactions in TiDB |
In TiDB 4.0, we've extended the transaction system to handle large transactions. Previously, TiDB limited the number of reads and writes in a transaction. In version 4.0 there is a much larger size limit on transactions (10GB). In this blog post I'll describe how we implemented support for
proc-macro-rules |
I'm announcing a new library for procedural macro authors: proc-macro-rules (and on It allows you to do macro_rules-like pattern matching inside a procedural macro. The goal is to smooth the transition from declarative to procedural macros (this works pretty well when used with the quote crate). (This
Early Impressions of Go from a Rust Programmer |
This post was originally published on the PingCAP blog. I've been using Go for the past few weeks. It's my first time using Go for a large (-ish), serious project. I've previously looked at Go a lot and played with examples and toy programs when researching features for Rust. Real
Remote work part 3 |
This is the third (and last, for now) post in a series on remote work. Previous posts discussed some basics for remote work and communication. In this post I'll talk a bit about some of the practicalities, specifically around work/life balance. When working remotely there is nobody to keep
Migrating a crate from futures 0.1 to 0.3 |
I recently migrated a small/medium-sized crate from Futures 0.1 to 0.3. It was fairly easy, but there were some tricky bits and some things that were not well documented, so I think it is worth me writing up my experience. The crate I migrated is the Rust
More on RLS version numbering |
In a few days the 2018 edition is going to roll out, and that will include some new framing around Rust's tooling. We've got a core set of developer tools which are stable and ready for widespread use. We're going to have a blog post all about that, but for
Building, running, and benchmarking TiKV and TiDB |
TiDB is a distributed, MySQL-compatible database. It is built on top of TiKV, a distributed key-value store. Building these projects is easy - clone the Git repos, then run make. Unfortunately running development builds is a bit more complicated. (Although hopefully it will get a lot easier in the near
I read a paper: 'In search of an understandable consensus algorithm' (the Raft paper) |
Raft is an algorithm for distributed consensus. It was introduced in this paper, 'In search of an understandable consensus algorithm' by Ongaro and Ousterhout, in 2014. It is a very readable paper and I recommend you read it. Raft has been implemented in Rust and is used in TiKV. I
Rust in 2020, one more thing |
We need to work on error handling. It's a difficult thing to work on because a lot of people have strong opinions, but I think we should. Rust's error handling story at the moment is embarrassing, when people ask me what error library they should use, I cringe. On the
Cargo `--offline` ✈️ |
Rust 1.36 is released on the 4th July and includes a bunch of new stuff. This blog post is about one newly stable feature in Cargo: --offline. Cargo seamlessly uses dependencies whether they are local or from a remote registry. But sometimes it is not possible or desirable to

Featured Contributors

Nick Cameron
Rust ..
Install the Toplog Bookmarklet to submit page with a single click. To Install, Just Drag or Right Click the below Link to bookmark it:
Post to Toplog Bookmarklet