New
The latest blog posts to take off on Hacker News. 361 posts.
Conversations with a six-year-old on functional programming
My six-year-old son walked up to me yesterday. “What are you reading?” At the time, I was reading part of Janis Voigtländer’s habilitation thesis. Unsure where to even start, I decided to just ans…
Core Erlang by Example
The official home of the Erlang Programming Language
Teaching Programming Languages by Experimental and Adversarial Thinking
After we published this paper, Matthias Hauswirth kindly pointed out similarities between this work and the PL-detective , a body of work that is very closely related that we did not previously know. Less similar but also related---and entertainingly written up---is smeagol . Since we published the paper, we have…
First impressions about Graal VM
Last week was the release of Oracle’s GraalVM. As stated on the website: GraalVM is a universal virtual machine for running applications written in JavaScript, Python 3, Ruby, R, JVM-based languages like Java, Scala, Kotlin, and LLVM-based languages such as C and C++. GraalVM removes the isolation between programming…
My OTP 21 Highlights
The official home of the Erlang Programming Language
When the Compiler Bites
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…
Macros: the Plan for Scala 3
One of the biggest open questions for migrating to Scala 3 is what to do about macros. In this blog post we give our current thoughts. The gist is that we are trying to achieve full alignment between macros and Tasty.
How to speed up the Rust compiler in 2018
18 months ago I wrote about some work I did to speed up the Rust compiler (rustc). I’ve recently taken this work up again. Also, in the meantime rustc’s build system has been replaced and its benchmark suite has been overhauled. So it’s a good time for an update.
Implementing and Understanding Type Classes (2014)
Describing three strategies of implementing type classes, aiming to clarify their behavior
Native Clojure with GraalVM
The newly-released GraalVM changes the status quo in the realm of JVM-based programming languages. In this instalment we’ll explore its impact on Clojure. We’ll start small, but by the end we’ll compile an entire Ring web application into a self-contained native binary.
Go's New Brand
Go’s new look and logo (don't worry, the mascot isn’t changing!).
Programming Bottom-Up (1993)
(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…
Union Types in Flow and Reason
Union types are powerful yet often overlooked. At work, I've been using Flow which thankfully supports union types. But as I've refactored more of our code to use union types, I've noticed that our bundle size has been steadily increasing!
Towards Scala 3
Now that Scala 2.13 is only a few months away, it’s time to consider the roadmap beyond it. It’s been no secret that the work on Dotty over the last 5 years was intended to explore what a new Scala could look like. We are now at a stage where we can commit: Dotty will become Scala 3.0.
Python 3.7: Introducing Data Classes
Python 3.7 is set to be released this summer, let’s have a sneak peek at some of the new features! If you’d like to play along at home with PyCharm, make sure you get PyCharm 2018.1 (or later if you’r
Hello wasm-pack
Introducing wasm-pack, a new tool for assembling and packaging Rust crates that target WebAssembly. These packages can be published to the npm Registry and used alongside other packages. This means ...
Parsing: a timeline
In India, Panini creates an exact description of the Sanskrit language, including pronunciation. Sanskrit can be completely reconstructed using nothing but Panini's grammar. Panini's grammar, which predates Euclid, is probably the first formal system of any kind. In the future, nothing like it will exist for any other…
Papers from the Lost Culture of Array Languages (2011)
It's not about technology for its own sake. It's about being able to implement your ideas.
Dark side of ergonomics in Rust
The dark side of ergonomics
Go: The Good, the Bad and the Ugly
This is an additional post in the “Go is not good” series. Go does have some nice features, hence the “The Good” part in this post, but overall I find it cumbersome and painful to use when we go beyond API or network servers (which is what it was designed ...
A Gentle Introduction to Rust
Introduction to the Rust language, standard library and ecosystem
Why Does “=” Mean Assignment?
Take the following code: a = 1 a = a + 1 print(a) A common FP critique of imperative programming goes like this: “How can a = a + 1? That’s like saying 1 = 2. Mutable assignment makes no sense.” This is a notation mismatch: “equals” should mean “equality”, when it really means “assign”. I agree with this criticism and…
The BEAM needs an APL-y language
One like, one unpopular opinion is one of them top Twitter games, innit?
Writing a recursive ascent parser by hand
I’ve been exploring various ways to write parsers. For a long time, I’ve used hand-written recursive descent for its straightforwardness, flexibility, and performance. There is another way—parser generators like Menhir , LALRPOP , or the venerable Bison use the bottom-up LR algorithm .
Are unsound type systems wrong?
This is an essay I wrote early-2016. After battling with soundness vs. usability in Typed Clojure for many years, I was starting to reconsider the “obviously wrong” approach of baking unsoundness into the type system from the get-go. I look at some historical examples of intentional unsoundness in type systems, and…