Writing a simple SQL interpreter in Julia
<!DOCTYPE html>
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 361 posts.
<!DOCTYPE html>
“Common what?” is a common reply I get when I mention Common Lisp. Perhaps rightly so, since Common Lisp is not all that common these days. Developed in the sixties, it is one of the ol…
A short essay about the evolution of programming languages.
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 ...
Provide a low-overhead data collection framework for troubleshooting Java applications and the HotSpot JVM.
In this article, we explore the possibilities allowed by higher inductive types. They enable a much more intuitive formalization of integers and new mind-blowing definitions of the (homotopical) ci…
In programming research, we say a lot about programs and languages, but very little about the actual process of programming. One simple trick that will make programming language research significantly more interesting is to think about programs not as expressions, but as a result of a sequence of interactions that…
Describing three strategies of implementing type classes, aiming to clarify their behavior
In Praise of APL: A Language for Lyrical Programming Professor Alan J. Perlis Yale University
This is the 6th post in the Learning Clojure focus series. In general, one learns by comparing to what one already knows: I’m learning Clojure in that way. Coming from a Java background, I naturally want to use streaming features. So, what would be the Clojure counterparts of Java’s functions filter(), map(), etc.?
In this brief post I want to discuss a fairly unusual feature of Haskell - functions that can be parameterized by their return type.
‘Monadic Parsing in Haskell’ is a short paper that laid the groundwork for libraries like Parsec and Attoparsec. Although it was published in 1998 (almost 20 years ago!) it has aged gracefully and the code samples will run with almost no changes. However, the state of the art has advanced since then and I think the…
Updates (2024) Since this post was originally written, the FizzBuzz github repository has received 23 additional contributions so the total…
Here’s a bit of code from Kernighan’s and Ritchie’s seminal text, The C Programming Language . I’m not sure I’d actually recommend coding this way (as written in the book, the entire program has only one comment), but it’s so darn clever and concise, I can’t help but post it. This snippet is part of a larger program…
So far this year I’ve been bitten three times by compiler edge cases in GCC and Clang, each time catching me totally by surprise. Two were caused by historical artifacts, where an ambiguous specification lead to diverging implementations. The third was a compiler optimization being far more clever than I expected…
A look at common mistakes in DSL designs and how to fix them
This is a short response to the recently announced Go 2 generics draft proposals
Michael Snoyman's personal homepage and blog, featuring writing about programming, open source, health, finance, religion, and whatever else catches his interest.
Just as all mainstream languages now have lambda functions, I predict sum types are the next construct to spread outward from the typed functional programming community to the mainstream. Sum types are very useful, and after living with them in Haskell for a while, I miss them deeply when using languages without them…
In several places, the C and C++ language specifications use a curious, and fairly controversial, phrase: undefined behavior . For certain program constructs, the specification prescribes no specific behavior, instead allowing anything to happen . Such constructs are considered erroneous, and so the result depends on…
This pattern is pretty common if you are interacting with Operating System APIs . Another example .
Extend the switch statement so that it can be used as either a statement or an expression, and that both forms can use either a "traditional" or "simplified" scoping and control flow behavior. These changes will simplify everyday coding, and also prepare the way for the use of pattern matching (JEP 305) in switch …
A Clojure formatting style good enough to be a default standard
I’ve decided to learn some Rust recently while working on the Stanford’s experimental course on operating systems. R...