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. 211 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
This is a proposal for creating a way to assign to variables within an expression using the notation NAME := expr.
A technical talk about the structure and details of the new, low-latency Go garbage collector.
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…
SQLite does not use the Git version control system. SQLite uses Fossil instead, which is a version control system that was specifically designed and written to support SQLite.
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…
One of my favorite Amazon Leadership Principles is Customer Obsession. When we launched AWS Lambda, we focused on giving developers a secure serverless experience so that they could avoid managing infrastructure. In order to attain the desired level of isolation we used dedicated EC2 instances for each customer. This…
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.
NCEES will discontinue the Principles and Practice of Engineering (PE) Software Engineering exam after the April 2019 exam administration. Since the original offering in 2013, the exam has been administered five times, with a total population of 81 candidates. Only 19 candidates registered for the April 2018…
Phoenix LiveView is an exciting new library which enables rich, real-time user experiences with server-rendered HTML.
I promised two things when I did the closing keynote at RustConf 2018:
40 common false assumptions programmers make about names, debunked with real-world examples from global naming systems and identity practices.
An in-depth exploration of a new class of expressive, performant, and intuitive CRDTs, together with macOS and iOS sample code.