I’ve been thinking about programming languages a lot recently. A question I asked myself was: why do we work on, refine, and create new programming languages? I thought of several reasons, but they seemed to boil down into two broader reasons: Better abstractions and more automation: some languages automate and ease some tedious tasks like memory management, concurrency, or type annotations. Almost all languages give you some ways of creating abstractions that let you reason with concepts i...