Fork me on GitHub

Developer Blog

This is where we post announcements or guides that do not fit anywhere else. Blog posts are not necessarily updated when the language and compiler changes, so not all information may be up to date. If you find something that doesn't work, please notify us, and we'll fix it (if it's small) or put a notice in the blog post.

Atom feed.


Which tokens are the most frequently used in Futhark programs?

December 20, 2024

Digging real deep into the sack of ideas now, but the content must flow. Read more...


The Futhark Formatter

December 1, 2024

Now your Futhark code can look good even if it is not good. Read more...


Why Is the Futhark Compiler so Bad at Inlining?

October 28, 2024

Picking your battles. Read more...


Faster OpenCL Float Atomics

September 23, 2024

Friendly folks on the Internet published some code we can use. Read more...


When is it OK to modify the numerical behaviour of loops?

September 5, 2024

A dilemma caused by a recent program interacting with an old optimisation. Read more...


Comparing the performance of OpenCL, CUDA, and HIP

July 17, 2024

A performance comparison of Futhark's three GPU backends, including the reasons for the differences. Read more...


Large array literals

July 8, 2024

How do you deal with programs that are not only poorly written by normal standards, but are in fact not written by humans at all? Read more...


AUTOMAP: How to do NumPy-style broadcasting in Futhark (but better)

June 17, 2024

A blog post about AUTOMAP. Read more...


How we test(ed) the Futhark compiler

June 10, 2024

A description of how the testing tools for the Futhark compiler have improved over time. Read more...


Avoiding RNG bugs through uniqueness types

April 18, 2024

A programmer complained about a source of bugs, and this is how I think it could be fixed. Read more...


Evolution of Futhark's Array Representation

March 6, 2024

How the compiler represents the most important data structure in the language. Read more...


Quantifying Student Projects

February 3, 2024

The university produces a source of free labour, and this is what we get out of it. Read more...


End of a compiler optimisation

December 4, 2023

This used to make programs faster (maybe?), but apparently not anymore Read more...


Bridging Futhark and SML

October 13, 2023

Connecting Futhark to the industrial Standard ML language will surely bring us into the mainstream. Read more...


Futhark 0.25.3 released

August 30, 2023

This one has a new GPU backend. Read more...


Futhark 0.25.1 released

July 6, 2023

Now with even more dependent types. Read more...


How should Futhark be written?

May 16, 2023

When we add enough features, suddenly we have choices to make. Read more...


Static and dynamic challenges of size types

May 12, 2023

We're growing the Futhark type system yet again, and this is why it's difficult. Read more...


Why are sizes signed?

March 20, 2023

Who knows, maybe there is a cool algebra where negative array sizes make sense. Read more...


On Nontermination and Optimisation in Futhark

March 17, 2023

How fast can you make an infinite loop go anyway? Read more...


Solving a parallel programming problem with a list homomorphism

January 27, 2023

Or the clickbait title: Outperforming C, Rust, etc with Futhark, list homomorphisms, an expensive GPU, and ignoring the rules. Read more...


How we make the Futhark compiler crash

January 18, 2023

One of the best choices we made in the development of the compiler. Read more...


Reflections on Advent of Code 2022 in Futhark

December 25, 2022

Someone else did it last year, so we had to do it again. Read more...


Generating audio with literate Futhark

December 22, 2022

This post shows how to generate music using literate Futhark. Read more...


A case study in parallelisation: Advent of Code 2022, day 9

December 10, 2022

This problem does not look very parallel at first glance, but actually allows a quite elegant implementation. Read more...


In-place mapping and the pleasure of beautiful code nobody will ever see

December 6, 2022

We implemented a fancy new optimisation but perhaps forgot the original simple motivation. Read more...


Array short-circuiting

November 3, 2022

In-place updates without overhead. Read more...


Futhark on The Array Cast

October 3, 2022

Mingling with the real array languages. Read more...


End of a language feature

August 15, 2022

Going Cronus on Futhark. Read more...


Futhark 0.21.13 released

July 7, 2022

New backend, new fusion, lots of bugs fixed. Read more...


How Futhark talks to its friends

July 1, 2022

Subtle design points in the Futhark C API. Read more...


Uniqueness Types and In-Place Updates

June 13, 2022

An apologia for one of Futhark's more exotic features. Read more...


Futhark 0.21.9: now with language server and adaptive benchmarking

April 15, 2022

It's good be an academic. Read more...


The final problem

April 12, 2022

Finally we also have to worry about stale caches. Read more...


Futhark is a low level language

April 4, 2022

Is this title clickbait? Read inside to find out! Read more...


Cost models are contracts

January 27, 2022

Make sure to read the fine print. Read more...


The past and present of Futhark

December 19, 2021

Where we came from, where we are bumbling towards. Read more...


Explicit quantification of existential sizes

October 16, 2021

The type system is growing again. Read more...


The Futhark Error Index

September 24, 2021

See if your favourite is here! Read more...


Futhark 0.20.1 released, with reflections on stability

August 28, 2021

A very tiny amount of your code is broken! Read more...


Futhark in the browser

August 26, 2021

It works, but you probably don't want to use it just yet. Read more...


On prefix operators

August 16, 2021

They're (mostly) gone now. Read more...


Supporting half-precision floats is really annoying

August 5, 2021

I just added support for half-precision floats to Futhark, and it was much more annoying than expected. Read more...


How Futhark represents values at runtime

August 2, 2021

Futhark doesn't do it how most other functional languages do it. Read more...


There is no escape from Futhark

June 27, 2021

Why Futhark is more like old Pascal than old C. Read more...


Anatomy of a type checker bug

May 11, 2021

The type checker had a soundness bug and here is how I solved it. Read more...


Futhark 0.19.1 released

March 4, 2021

Feels like students did all the work for this one. Read more...


Futhark server mode and Literate Futhark

January 18, 2021

This post introduces yet another half-baked scripting language designed in less than two weeks. Read more...


Design decisions I do not regret

January 11, 2021

Not everything in Futhark is bad or dubious, and here's some examples. Read more...


A comparison of Futhark and Dex

December 28, 2020

Dex is another interesting functional array language, and this post looks at how it compares to Futhark. Read more...


Will Futhark work on Apple Silicon?

November 11, 2020

People write these posts for all kinds of languages these days, so I guess we should too. Read more...


Futhark 0.18.2 released

November 7, 2020

Lots of bugfixes, but not the ones we expected. Read more...


Futhark 0.18.1 released, breaking all your code

October 8, 2020

All of your code is broken. Read more...


Retrospective on an implementation of the Poseidon hash function in Futhark

September 27, 2020

A programmer from the Filecoin project wanted to use Futhark, which in the end made the compiler much better. Read more...


Futhark 0.17.2 released

September 19, 2020

Inching towards doubling the number of bits in a size. Read more...


An unavoidable performance regression

September 1, 2020

Our generated code got a bit slower for some programs. Read more...


How Futhark implements bounds checking on the GPU

July 13, 2020

GPUs present challenges for something as common as bounds checking. Here is how we do it. Read more...


Futhark 0.16.1 released

July 7, 2020

Incremental flattening is finally on by default! Read more...


Is Futhark getting faster or slower?

July 1, 2020

A historical investigation of the performance of the Futhark compiler over time. Read more...


Attributes in Futhark

June 28, 2020

A design rationale for Futhark's attributes, a mechanism for attaching freeform metadata to expressions. Read more...


Higher-order parallel programming

May 3, 2020

An explanation of the higher-order parallel programming model used by Futhark, and why we think it is superior to simpler first-order models. Read more...


Statically linking the Futhark compiler

April 13, 2020

My experiences with placing statically linked binaries in the Futhark binary releases. Read more...


Futhark 0.15.1 released - now with size types!

March 15, 2020

Size types are here. Read more...


How we keep the lights on

February 9, 2020

An exciting tour of the various free services we leech on, as well as the dubious server setups that keep the Futhark project running. Read more...


Futhark 0.14.1 released

January 24, 2020

First release of the decade. Read more...


Design Flaws in Futhark

December 18, 2019

Futhark is imperfect, and some of its imperfections are harder to fix than others. Read more...


Futhark 0.13.1 released

November 27, 2019

Very little changed, but many bugs fixed Read more...


Beating C with Futhark running on GPU

October 25, 2019

With Futhark, you don't have to be smart to make your code run fast, you just need to be able to afford an expensive GPU. Read more...


Beginning a collection of Futhark examples

August 31, 2019

All the cool languages are writing collections of examples, so I guess we do the same and see if cargo shows up. Read more...


Futhark 0.12.1 released

August 21, 2019

Sum types! Read more...


Towards Size Types in Futhark

August 3, 2019

As is the fate of every language to come out of a university department, it is time to make the Futhark type system more complicated. Read more...


Running Futhark on the NVIDIA Jetson Nano

June 22, 2019

How to run Futhark code, and the Futhark compiler, on NVIDIAs small SoC. Read more...


Futhark 0.11.1 released

June 8, 2019

A release with few user-visible features, but significantly improved performance and memory consumption for some programs. Read more...


What is the minimal basis for Futhark?

April 10, 2019

An investigation into how much we can reduce the compiler intrinsics while still maintaining asymptotic guarantees. Read more...


Futhark 0.10.1 released

March 25, 2019

Another one of these managed to escape. Read more...


Incremental flattening for nested data parallelism on the GPU

February 18, 2019

The presentation given at PPoPP 2019 turned into a blog post. Read more...


Futhark 0.9.1 released - now with CUDA backend

February 8, 2019

The main addition in this release is a new student-developed compiler backend Read more...


Giving programmers what they want, or what they ask for

January 13, 2019

How exactly should the Futhark compiler behave when programmers use tiny arrays for convenience? Read more...


Futhark 0.8.1 released, with reflections on Advent of Code

December 25, 2018

It's a Christmas miracle! Read more...


Why Futhark (sometimes) goes wrong

December 8, 2018

The Futhark compiler will sometimes refuse to compile a program, possibly with an incomprehensible apology about some compiler limitation. In this post, I will try to explain what exactly that means, why it's not easy to fix, and how we might fix it eventually. Read more...


Futhark 0.7.1 released, now with C# backend and efficient histograms on GPU

September 21, 2018

We sure did break compatibility this time. Read more...


The Futhark Debugger

September 16, 2018

We implemented some tooling to make it easier to debug faulty Futhark programs. Read more...


Futhark 0.6.3 released

August 24, 2018

We didn't even break compatibility this time. Read more...


The Present Futhark Package Manager

August 3, 2018

We wrote a package manager for Futhark. Read more...


The Future Futhark Package Manager

July 20, 2018

It's time to write a package manager for Futhark. Read more...


Futhark 0.6.1 released

July 9, 2018

Hot off the presses, get it while the cache is still warm! Read more...


Python gotta go faster

July 5, 2018

A higher-performance way to call Futhark from Python. Read more...


Designing a Programming Language for the Desert

June 18, 2018

The design of Futhark and its assorted tools is driven by constraints based on its narrow niche. This blog post explains some of them. Read more...


Futhark 0.5.1 released

May 31, 2018

We made another one! Read more...


Futhark 0.4.0 released

April 10, 2018

We released another version of Futhark, with very large improvements to the source language (higher-order functions and type inference). Read more...


Futhark with Fangs!

April 1, 2018

The first web framework (sort of) for Futhark. Also an attempt at bringing us into compliance with Wirth's Law. Read more...


Futhark 0.3.0 released

February 2, 2018

We released another version of Futhark. This one doesn't have that many externally visible changes, but still contains some solid improvements. Read more...


How Futhark manages GPU memory

January 28, 2018

We recently changed our memory allocation strategy for code generated by the Futhark compiler. The impact was fairly dramatic. Read more...


Reflections on a PhD accidentally spent on language design

December 27, 2017

I spent over three years on researching compiler optimisations, and accidentally also designed a programming language along the way. Here are some thoughts on how that came about. Read more...


A strategy for documenting Futhark

December 5, 2017

A discussion of our plans for how to structure Futhark's current and future documentation. Read more...


Futhark 0.2.0 released

November 19, 2017

We released another version of Futhark. This post elaborates on some of the changes. Read more...


Dot Notation for Records

November 11, 2017

Futhark has switched from using an SML-style notation for accessing the fields of records, to more conventional dot notation. This post discusses why, and the challenges we encountered. Read more...


Block Comments are a Bad Idea

October 10, 2017

Futhark does not support block comments, and this post elaborates why. Read more...


Futhark 0.1.0 released

October 4, 2017

Announcement for the first ever release of the Futhark compiler. Read more...


Calling Futhark from C and Haskell

September 26, 2017

We recently taught the Futhark native code generator how to generate reusable library code. This post shows how to call the generated code directly from C, or through Haskell's FFI. Any language that has a C FFI can use the same technique. Read more...


Streaming Combinators and Extracting Flat Parallelism

June 25, 2017

The presentation given at PLDI 2017 turned into a blog post. Basic introduction to Futhark, including novel parallel combinators used for efficient sequentialisation, as well as Futhark's approach to handling nested parallelism. Read more...


Language Design Checklist for Futhark

May 23, 2017

Filling out the Language Design Checklist form for Futhark. Read more...


Syntactic Support for Roman Numerals

April 1, 2017

The motivation behind Futhark's newest syntactical addition. Read more...


Videos from FOSDEM and Lambda Days now available

March 21, 2017

Videos from recent talks on Futhark have been published. Read more...


The Futhark Record System

March 6, 2017

The design of the record system in Futhark, with some notes on the design space and why we chose what we did. Read more...


The Futhark Module System

January 25, 2017

We recently added a higher-order module system to Futhark - this posts describes how it works, and why we chose the design we did. Read more...


Futhark at LambdaDays 2017

January 15, 2017

There will be a presentation on Futhark at the Lambda Days 2017 conference. Read more...


Futhark is going to FOSDEM'17

December 28, 2016

A Futhark presentation will be given at the HPC track at FOSDEM in 2017 Read more...


Two Syntax Design Problems in Futhark and Their Resolution

December 9, 2016

A tale of two times we had to put some serious thought into details of the Futhark syntax. Read more...


A Port of Falling Turnip to Futhark

December 4, 2016

Falling Turnip is a falling-sand style physics playground implemented using Haskell and the Repa library. I ported this program to Futhark and gave it a Pygame-based frontend. Read more...


Designing a Functional Language for GPU Execution

September 3, 2016

Why Futhark has so few features. Read more...


Futhark as target language for an APL compiler

June 20, 2016

We have been experimenting with using Futhark as an optimisation and code generation backend for a research APL compiler. Read more...


Creating Interactive Futhark GUIs

April 25, 2016

Using PyGame, NumPy, and PyOpenCL to interact with Futhark programs in simple graphical user interfaces. Read more...


Using Futhark with PyOpenCL

April 15, 2016

Compiling a Futhark program into an ordinary reusable Python module with calls to PyOpenCL. Read more...