Skip to content

@athas athas released this Feb 8, 2019


  • futhark cuda: a new CUDA backend by Jakob Stokholm Bertelsen.

  • New command for comparing data files: futhark datacmp.

  • An :mtype command for futhark repl that shows the type of a
    module expression.

  • futhark run takes a -w option for disabling warnings.


  • Major command reorganisation: all Futhark programs have been
    combined into a single all-powerful futhark program. Instead of
    e.g. futhark-foo, use futhark foo. Wrappers will be kept
    around under the old names for a little while. futharki has
    been split into two commands: futhark repl and futhark run.
    Also, py has become python and cs has become csharp, but
    pyopencl and csopencl have remained as they were.

  • The result of a function is now forbidden from aliasing a global
    variable. Surprisingly little code is affected by this.

  • A global definition may not be ascribed a unique type. This never
    had any effect in the first place, but now the compiler will
    explicitly complain.

  • Source spans are now printed in a slightly different format, with
    ending the line number omitted when it is the same as the start
    line number.


  • futharki now reports source locations of trace expressions

  • The type checker now properly complains if you try to define a
    type abbreviation that has unused size parameters.

Assets 3

@athas athas released this Dec 25, 2018


  • Now warns when /futlib/... files are redundantly imported.

  • futharki now prints warnings for files that are ":load"ed.

  • The compiler now warns when entry points are declared with types
    that will become unnamed and opaque, and thus impossible to
    provide from the outside.

  • Type variables invented by the type checker will now have a
    unicode subscript to distinguish them from type parameters
    originating in the source code.

  • futhark-test and futhark-bench now support generating random
    test data.

  • The library backends now generate proper names for arrays of
    opaque values.

  • The parser now permits empty programs.

  • Most transpositions are now a good bit faster, especially on


  • The <- symbol can no longer be used for in-place updates and
    record updates (deprecated in 0.7.3).


  • Entry points that accept a single tuple-typed parameter are no
    longer silently rewritten to accept multiple parameters.


  • The :type command in futharki can now handle polymorphic
    expressions (#669).

  • Fixed serious bug related to chaining record updates.

  • Fixed type inference of record fields (#677).

  • futharki no longer goes in an infinite loop if a for loop
    contains a negative upper bound.

  • Overloaded number types can no longer carry aliases (#682).

Assets 3

@athas athas released this Oct 31, 2018 · 393 commits to master since this release


  • Support type parameters for operator specs defined with val.


  • Fixed nasty defunctionalisation bug (#661).

  • cabal/stack sdist works now.

Assets 3

@athas athas released this Oct 26, 2018 · 400 commits to master since this release


  • Significant performance changes: there is now a constant extra
    compilation overhead (less than 200ms on most machines). However,
    the rest of the compiler is 30-40% faster (or more in some cases).

  • A warning when ambiguously typed expressions are assigned a
    default (i32 or f64).

  • In-place updates and record updates are now written with =
    instead of <-. The latter is deprecated and will be removed in
    the next major version (#650).


  • Polymorphic value bindings now work properly with module type

  • The type checker no longer requires types used inside local
    functions to be unambiguous at the point where the local function
    is defined. They must still be unambiguous by the time the
    top-level function ends. This is similar to what other ML
    languages do.

  • futhark-bench now writes "μs" instead of "us".

  • Type inference for infix operators now works properly.

Assets 3

@athas athas released this Oct 8, 2018 · 465 commits to master since this release


  • futhark-pkg now supports GitLab.

  • futhark-tests --notty option now has a --no-terminal alias.
    --notty is deprecated, but still works.

  • futhark-test now supports multiple entry points per test block.

  • Functional record updates: r with f <- x.


  • Fix the -C option for futhark-test.

  • Fixed incorrect type of reduce_by_index.

  • Segmented reduce_by_index now uses much less memory.

Assets 3

@athas athas released this Sep 21, 2018 · 495 commits to master since this release


  • C# backend by Mikkel Storgaard Knudsen (futhark-cs/futhark-csopencl).

  • futhark-test and futhark-bench now take a --runner option.

  • futharki now uses a new interpreter that directly interprets the
    source language, rather than operating on the desugared core
    language. In practice, this means that the interactive mode is
    better, but that interpretation is also much slower.

  • A trace function that is semantically id, but makes futharki
    print out the value.

  • A break function that is semantically id, but makes futharki
    stop and provide the opportunity to inspect variables in scope.

  • A new SOAC, reduce_by_index, for expressing generalised
    reductions (sometimes called histograms). Designed and
    implemented by Sune Hellfritzsch.



  • The largest/smallest values for numeric modules have been
    renamed highest/lowest.


  • Many small things.
Assets 3

@athas athas released this Aug 24, 2018 · 648 commits to master since this release


  • Added a package manager: futhark-pkg. See also the

  • Added log2 and log10 functions to f32 and f64.

  • Module type refinement (with) now permits refining parametric

  • Better error message when invalid values are passed to generated
    Python entry points.

  • futhark-doc now ignores files whose doc comment is the word

  • copy now works on values of any type, not just arrays.

  • Better type inference for array indexing.


  • Floating-point numbers are now correctly rounded to nearest even
    integer, even in exotic cases (#377).

  • Fixed a nasty bug in the type checking of calls to consuming
    functions (#596).

Assets 3

@athas athas released this Jul 16, 2018 · 824 commits to master since this release


  • Bounds checking errors now show the erroneous index and the size
    of the indexed array. Some other size-related errors also show
    more information, but it will be a while before they are all
    converted (and say something useful - it's not entirely

  • Opaque types now have significantly more readable names,
    especially if you add manual size annotations to the entry point

  • Backticked infix operators can now be used in operator sections.


  • f64.e is no longer pi.

  • Generated C library code will no longer abort() on application
    errors (#584).

  • Fix file imports on Windows.

  • futhark-c and futhark-opencl now generates thread-safe code (#586).

  • Significantly better behaviour in OOM situations.

  • Fixed an unsound interaction between in-place updates and
    parametric polymorphism (#589).

Assets 3

@athas athas released this Jul 9, 2018 · 878 commits to master since this release


  • The real module type now specifies tan.

  • futharki now supports entering declarations.

  • futharki now supports a :type command (or :t for short).

  • futhark-test and futhark-benchmark now support gzipped data
    files. They must have a .gz extension.

  • Generated code now frees memory much earlier, which can help
    reduce the footprint.

  • Compilers now accept a --safe flag to make them ignore unsafe.

  • Module types may now define lifted abstract types, using the
    notation type ^t. These may be instantiated with functional
    types. A lifted abstract type has all the same restrictions as a
    lifted type parameter.


  • The rearrange construct has been removed. Use transpose instead.

  • futhark-mode.el has been moved to a separate

  • Removed |>> and <<|. Use >-> and <-< instead.

  • The empty construct is no longer supported. Just use empty
    array literals.


  • Imports of the basis library must now use an absolute path
    (e.g. /futlib/fft, not simply futlib/fft).

  • /futlib/vec2 and /futlib/vec3 have been replaced by a new
    /futlib/vector file.

  • Entry points generated by the C code backend are now prefixed with
    futhark_entry_ rather than just futhark_.

  • zip and unzip are no longer language constructs, but library
    functions, and work only on two arrays and pairs, respectively.
    Use functions zipN/unzipN (for 2<=n<=8).


  • Better error message on EOF.

  • Fixed handling of .. in import paths.

  • Type errors (and other compiler feedback) will no longer contain
    internal names.

  • futhark-test and friends can now cope with infinities and NaNs.
    Such values are printed and read as f32.nan, f32.inf,
    -f32.inf, and similarly for f32. In futhark-test, NaNs
    compare equal.

Assets 3

@athas athas released this Jun 3, 2018 · 1031 commits to master since this release


  • Array index section: (.[i]) is shorthand for (\x -> x[i]).
    Full slice syntax supported. (#559)

  • New assert construct. (#464)

  • futhark-mode.el now contains a definition for flycheck.


  • The index produced by futhark-doc now contains correct links.

  • Windows linebreaks are now fully supported for test files (#558).

Assets 2
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.