Notes on structured concurrency, or: Go statement considered harmful
Every concurrency API needs a way to run code concurrently. Here's some examples of what that looks like using different APIs:
Posts that commenters keep linking to, ranked by how many different people have cited them in Hacker News comments. 138 posts.
Every concurrency API needs a way to run code concurrently. Here's some examples of what that looks like using different APIs:
I've been thinking about the consequences of the "wrong abstraction." My RailsConf 2014 "all the little things" talk included a section where I asserted: > duplication is far cheaper than the wrong abstraction And in the summary, I went on to advise: >
Purely functional code makes some things easier to understand: because values don't change, you can call functions and know that only their return value matters—they don't change anything outside themselves. But this makes many real-world applications difficult: how do you write to a database, or to the screen? In…
I looked into Python because I was considering translating the Lisp code for the Russell & Norvig AI textbook into Java. Some instructors and students wanted Java because
The Game Engine Black Book: DOOM is now available for purchase. It is being released exactly 25 years after DOOM.zip was first published on the University of Wisconsin FTP server in December 1993. You can get it at the following locations: - Amazon ( USA , France , UK , and many more). - Google Books ( here with no…
In the summer of 2006, I was lucky enough to be an intern at Google. At the time, Google had an internal tool called gsearch that acted as if it ran grep over all the files in the Google source tree and printed the results. Of course, that implementation would be fairly slow, so what gsearch actually did was talk to a…
A list of things that were not supposed to be Turing-complete, but are.
Introduction to modern Prolog
Elastic tabstops - a better way to indent and align code
(This essay is from the introduction to On Lisp .) It's a long-standing principle of programming style that the functional elements of a program should not be too large. If some component of a program grows beyond the stage where it's readily comprehensible, it becomes a mass of complexity which conceals errors as…
I've gotten a bunch of emails asking for advice on how to learn Common Lisp in the present day. I decided to write down all the advice I've been giving through email and social media posts in the hopes that someone might find it useful.
Someone : Did you hear that Facebook/Google uses a giant monorepo? WTF! Me : Yeah! It's really convenient, don't you think? Someone : That's THE MOST RIDICULOUS THING I've ever heard. Don't FB and Google know what a terrible idea it is to put all your code in a single repo? Me : I think engineers at FB and Google are…
A versioned Go command must decide which module versions to use in each build. I call this list of modules and versions for use in a given build the build list . For stable development, today’s build list must also be tomorrow’s build list. But then developers must also be allowed to change the build list: to upgrade…
An introduction to the idea that code should be approached with a mindset towards compressing it semantically, rather than orienting it around objects.
(This article came about in response to some questions on the LL1 mailing list. It is now incorporated in Revenge of the Nerds .) When McCarthy designed Lisp in the late 1950s, it was a radical departure from existing languages, the most important of which was Fortran . Lisp embodied nine new ideas:
Nix users value its isolated, repeatable builds and simple sharing of development environments. Nix makes it easy to go back in time and rebuild software from years ago without issue.
I promised two things when I did the closing keynote at RustConf 2018:
An in-depth exploration of a new class of expressive, performant, and intuitive CRDTs, together with macOS and iOS sample code.
Keeping two or more copies of the same document synchronized with each other in real-time is a complex challenge. This paper describes the differential synchronization algorithm. Differential synchronization offers scalability, fault-tolerance, and responsive collaborative editing across an unreliable network.
A recent paper suggested a new mathematical point of view on version control. I first found out about it from pijul, a new version control system (VCS) that ...
The text in these files is the unedited original manuscript. M-K has fine copy editors, who have fixed all the minor typos, spelling, and grammar errors in the printed book, but if you come across factual errors I'd still appreciate help getting all the details of linking and loading as complete and correct as…
This summer, I am again working on Rust full-time, and again I will work (amongst other things) on a “memory model” for Rust/MIR. However, before I can talk about the ideas I have for this ...
Is IEEE floating-point math deterministic? Will you always get the same results from the same inputs? The answer is an unequivocal “yes”. Unfortunately the answer is also an unequivocal “no”. I’m a…
Disclaimer 2024-12-02 Since this rant is going viral again (again (again)), some disclaimers: I wrote this six years ago to “”“win”“” an ugly Twitter fight. I’m glad I anonymized the inciting tweet and hope I’m the only person still getting grief over this. The core interesting bit— why it’s mathematically valid to…
The Game Engine Black Book Wolfenstein 3D, 2nd Edition has shipped. It is available at the following locations: - Amazon ( US , UK , FR , CA , and many more). - Google PlayStore ( here ). All errata which readers kindly took the time to report have been addressed. Adrian Carmack has retired from anything related to id…
This document is an attempt to be a fairly comprehensive guide to recovering from what you did not mean to do when using git. It isn't that git is so complicated that you need a large document to take care of your particular problem, it is more that the set of things that you might have done is so large that different…