H2CO3's Curriculum Vitæ



H2CO3's Blog

The Last Thing Rust Needs

On the future of Rust, based on musings about programming language design by world-famous C++ expert Scott Meyers.

Patterns Are Not Expressions

In which I explain the One True Way™ you should think about patterns and pattern matching in Rust, because seemingly nobody gets it.

H2CO3's Projects

Software I'm proud of

SteelSafe

SteelSafe is a lightweight, offline, portable, personal password manager written in safe Rust.

It tries to be a simple, easy-to-audit codebase with a convenient Text User Interface (TUI). It uses battle-tested technology for key derivation, encryption, authentication, and password storage, such as Argon2, XChaCha20Poly1305, and SQLite.

NanoSQL

NanoSQL is a lightweight data mapper for SQLite and Rust.

It is not a full-blown ORM or query builder. It does not attempt to typecheck your SQL queries; it only makes sure that serialization of bind parameters and deserialization of result rows is type-safe. It is similar in its spirit to Dapper in the C#/.NET ecosystem.

It does, however, provide some convenience helpers for frequently needed tasks, such as creating a table (and its indexes), inserting records, and finding or deleting rows by their PRIMARY KEY.

NanoSQL is built on top of the trusty rusqlite library, and it is 100% safe code. We use #![forbid(unsafe_code)] to ensure this property going forward.

Parsel

Parsel is a next-generation parser generator library for Rust, inspired by Serde. It allows you to focus on the high-level design of your language, without worrying about writing parsers by hand, or needing to tediously map low-level parse trees to high-level ASTs. It fully preserves source locations and spans, while also providing a means to seamlessly unparse ASTs into source code. No external tools required!

It does so by providing #[derive] macros that automatically implement the syn::Parse and syn::ToTokens traits for your custom struct and enum types. Structs are parsed one field at a time, in sequence, while enums are parsed into the first variant that succeeds. ASTs are returned directly and in a completely automated manner. No manual mapping from the parser output to the AST types is necessary whatsoever. Modifying the AST automatically updates the parser.

An extensive set of helper types is available for parsing common constructs, such as repetition, parentheses, and infix operators.