The Monad Challenges: Jump start your understanding of monads
There are still some rough edges here, and also a fair amount of content to be added. But if we waited until everything was polished before publishing, it would probably never happen. So feel free to make comments, suggestions, or contribute new content. As always, pull requests are the most desirable.
Modern C is now feature complete
You find the latest version of my book at the usual place at This now contains all the material that I plan to put into it. New are “experience” parts about performance, function-like m…
C++ Has Become More Pythonic (2014)
C++ has changed a lot in recent years. The last two revisions, C++11 and C++14, introduce so many new features that, in the words of Bjarne Stroustrup, “It feels like a new …
Macchiato: ClojureScript on the Server
Dmitri's blog about programming, Clojure, and software development
My love-hate relationship with LuaJIT (2015)
I love LuaJIT for its performance, but its complexity sometimes puts me off.
A bit of background for the unified C++ call proposal
C++ provides two calling syntaxes, x.f(y) and f(x,y). This has bothered me for a long time. I discussed the problem in the context of multimethods in D&E in 1994, referring back to a proposal by Doug Lea from 1991, and again in 2007. Each of the syntaxes has its virtues, but they force design decisions on people…
A Random Walk Through Ada (2014)
So the C programming language has been getting a lot of bad press recently; a really stupid bug in some C code has compromised some of the core security infrastructure on the internet. The fix is easy, but the knock-on effects are going to go on for years and will cost serious amounts of money. As a result, people…
A polyglot's guide to multiple dispatch
This is the first article in a series dedicated to multiple dispatch - an advanced abstraction technique available to programmers out-of-the-box in some languages, and implementable in others. This first post in the series presents the technique and explains the problem it intends to solve. It uses C++ as the…
APL Tutorial
Interested in learning about APL? Have you heard of this exciting language with strange characters and incredible brevity? Look no further, here you will find an introduction to the language, and even understanding from a historical perspective.
Why Go gets criticized so much
Obviously, not everyone hates Go. But there was a [quora question]( https://www.quora.com/Why-does-Go-seem-to-be-the-most-heavily- criticised-among-the-newer-programming-languages?srid=uCiY&share=1) recently about why everyone criticizes Go so much. (sorry, I don’t normally post links to Quora, but it was the…
Death of a Language Dilettante
It's not about technology for its own sake. It's about being able to implement your ideas.
Why Rust's ownership/borrowing is hard
Working with pure functions is simple: you pass arguments, you get a result — no side effects happen. If, on the other hand, a function does have side effects, like mutating its arguments or global objects, it's harder to reason about. But we've got used to those too: if you see something like player.set_speed(5) you…
The truth about Lisp (2006)
In which the truth about lisp is revealed, and some alternatives are enumerated.
Scala’s Types of Types
This blog post came into being after a few discussions about Types in Scala after some of JavaOne’s parties in 2013. After those discussions I figured that many questions are often repeated by different people, during their learning of Scala. I though that we didn’t have a full list of all tricks what we can to with…
How to Name Clojure Functions
This is a guide on naming Clojure functions. There are exceptions to every rule. When you’re defining something based on natural language, there are more exceptions than rules. I break these rules more often than I follow them. This guide is just a starting point for thinking about how to name things.
Emacs Bytecode Internals (2014)
Byte-code compilation is an underdocumented — and in the case of the recent lexical binding updates, undocumented — part of Emacs. Most users know that Elisp is usually compiled into a byte-code saved to .elc files, and that byte-code loads and runs faster than uncompiled Elisp. That’s all users really need to know…
Strategic Scala Style: Principle of Least Power
The Scala language is large and complex, and it provides a variety of tools that a developer can use to do the same thing in a variety of ways. Given the range of possible solutions to every problem, how can a developer choose which one should be used? This is the first in a series of blog posts aiming to provide…
State of the Haskell Ecosystem – February 2016
Update post for the State of the Haskell Ecosystem
The new and improved Programming Languages Zoo
It is my pleasure to announce the new and improved Programming languages Zoo , a potpourri of miniature but fully functioning programming language implementations. The new zoo has a decent web site, it is now hosted on GitHub , and the source code was cleaned up. Many thanks to Matija Pretnar for all the work.