New
The latest blog posts to take off on Hacker News. 14,543 posts.
How I Switched to Plan 9
Hi, I’m SL . You may remember me from my classic appearances in contentious 9fans threads , or maybe you’ve read one of my books .
The Principles of Versioning in Go
This blog post is about how we added package versioning to Go, in the form of Go modules, and the reasons we made the choices we did. It is adapted and updated from a talk I gave at GopherCon Singapore in 2018 .
Moxie: Incremental Declarative UI in Rust
ramblings by Adam Perry
Taking ML to production with Rust
Hands-on technical leader, Rust expert.
Garbage Collection
We say Lox is a “high-level” language because it frees programmers from worrying about details irrelevant to the problem they’re solving. The user becomes an executive, giving the machine abstract goals and letting the lowly computer figure out how to get there.
Syntax Highlighting Is Backwards (2018)
Most code editors color different pieces of your program in different ways. For instance, they’ll make keywords like if bold and bright so that you notice when you’ve misspelled them. They’ll make non-executable parts like comments and documentation fainter so that you know that the computer isn’t seeing that part of…
TLA+ model checking made symbolic
TLA+ model checking made symbolic Konnov et al., OOPSLA’19 TLA+ is a formal specification language (Temporal Logic of Actions) particularly well suited to reasoning about distributed algorith…
Making Git and Jupyter Notebooks play nice
Summary: jq rocks for speedy JSON mangling. Use it to make powerful git clean filters, e.g. when stripping out unwanted cached-data from Jupyter notebooks. You can find the documentation of git 'clean' and 'smudge' filters buried in the page on git-attributes , or see my example setup below.
Debuggers Suck
Robert O'Callahan. Christian. Kiwi. Software guy. All content human-authored unless otherwise noted.
Latency/throughput tradeoffs, illustrated with coffee
You’re making morning drip coffee. You need to make 2 cups. Do you:
Building a language server for Muon
I’m a big fan of interactive tool support for programming. I often use features like “go to definition”, “find symbol”, compile error underlining, etc. Also, earlier this year, I launched Muon, a new low-level programming language. As no tooling existed beyond the compiler, writing the initial Muon programs (such as a…
The Birth of Legacy Software – How Change Aversion Feeds on Itself
Here’s a common pattern that I see play out very often in software teams: There is a need to change the existing system behavior to accomplish new functionality. The software engineer l…
Git-subtrac: all your Git submodules in one place
Long ago, I wrote git-subtree to work around some of my annoyances with git submodules. I've learned a lot since then, and the development e...
Lightweight API Design in Swift
This week, let’s take a look at a few core language features that enable us to design really lightweight APIs in Swift, and how we can use them to make a feature or system much more capable through the power of composition.
Mergeable replicated data types – Part I
Mergeable replicated data types Kaki et al., OOPSLA’19 This paper was published at OOPSLA, but perhaps it’s amongst the distributed systems community that I expect there to be the greatest in…
Shipping a compiler every six weeks
This blog post is a slightly edited version of the live transcript of the talk I gave at RustFest 2019 in Barcelona on November 10th, 2019. As it's a transcript some parts of it are a bit repetitive or badly worded, but I hope the message behind the talk will be conveyed by this post anyway.
Towards a unified theory of reactive UI
Update 26 Sep 2020: A followup to this post is Towards principled reactive UI.
Overview of Rust error handling libraries
Rust's error handling is a pleasure to use thanks to the Result type . It ensures Rust's error handling is always correct , visible , and performant . And with the addition of the ? operator in Rust 1.13 , and the addition of return types from main in Rust 1.26 Rust's error handling has only kept improving.
The Danger of “Simplicity”
Opinions and discussions of various topics, mostly related to programming.
Mu: Sketching out a minimal system programming language
In the previous post , I described what my new hobbyist computing stack looks like today, and how the design decisions seemed to accumulate inevitably from a small set of axiomatic goals. In this post I describe some (far more speculative) future plans for Mu and try to articulate how the design process continues to…
The care and feeding of software engineers, or why engineers are grumpy (2012)
The Official Web Site of Nicholas C. Zakas
Things I’ve learned in 20 years of programming
This year, I’ve become increasingly acquainted with the DEV platform. It’s a refreshingly positive oasis in the large sea of angry Reddit commenters and “well actually” connoisseurs that is the broader software world. One interesting facet of this community is that it seems pretty beginner-heavy. I regularly see posts…
Go’s Features of Last Resort
A “Feature of Last Resort” (FOLR) is a useful feature which solves certain otherwise hard-to-solve problems, but are often best avoided.
How to make your C codebase Rusty: rewriting keyboard firmware keymap
Recently, my colleague introduced me to QMK 1, an open-source keyboard firmware. Like many non-trivia C projects, macro is heavily used everywhere, especially in keymap files 2. It didn’t bother me much since I have been programming C for many years. But I kept thinking to myself, “what would it look like if I can…