Releases: diku-dk/futhark
0.7.3
Added
-
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
orf64
). -
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).
Fixed
-
Polymorphic value bindings now work properly with module type
ascription. -
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.
0.7.2
Added
-
futhark-pkg
now supports GitLab. -
futhark-test
s--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
.
Fixed
-
Fix the
-C
option forfuthark-test
. -
Fixed incorrect type of
reduce_by_index
. -
Segmented
reduce_by_index
now uses much less memory.
0.7.1
Added
-
C# backend by Mikkel Storgaard Knudsen (
futhark-cs
/futhark-csopencl
). -
futhark-test
andfuthark-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 semanticallyid
, but makesfutharki
print out the value. -
A
break
function that is semanticallyid
, but makesfutharki
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.
Removed
-
Most of futlib has been removed. Use external packages instead:
-
futlib/colour
=> https://github.com/athas/matte -
futlib/complex
=> https://github.com/diku-dk/complex -
futlib/date
=> https://github.com/diku-dk/date -
futlib/fft
=> https://github.com/diku-dk/fft -
futlib/linalg
=> https://github.com/diku-dk/fft -
futlib/merge_sort
,futlib/radix_sort
=> https://github.com/diku-dk/sorts -
futlib/random
=> https://github.com/diku-dk/cpprandom -
futlib/segmented
=> https://github.com/diku-dk/segmented -
futlib/sobol
=> https://github.com/diku-dk/sobol -
futlib/vector
=> https://github.com/athas/vector
No replacement:
futlib/mss
,futlib/lss
. -
-
zip6
/zip7
/zip8
and theirunzip
variants have been removed.
If you build gigantic tuples, you're on your own. -
The
>>>
operator has been removed. Use an unsigned integer type
if you want zero-extended right shifts.
Changed
- The
largest
/smallest
values for numeric modules have been
renamedhighest
/lowest
.
Fixed
- Many small things.
0.6.3
Added
-
Added a package manager:
futhark-pkg
. See also the
documentation. -
Added
log2
andlog10
functions tof32
andf64
. -
Module type refinement (
with
) now permits refining parametric
types. -
Better error message when invalid values are passed to generated
Python entry points. -
futhark-doc
now ignores files whose doc comment is the word
"ignore". -
copy
now works on values of any type, not just arrays. -
Better type inference for array indexing.
Fixed
0.6.2
Added
-
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
straightforward). -
Opaque types now have significantly more readable names,
especially if you add manual size annotations to the entry point
definitions. -
Backticked infix operators can now be used in operator sections.
Fixed
-
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
andfuthark-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).
0.6.1
Added
-
The
real
module type now specifiestan
. -
futharki
now supports entering declarations. -
futharki
now supports a:type
command (or:t
for short). -
futhark-test
andfuthark-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 ignoreunsafe
. -
Module types may now define lifted abstract types, using the
notationtype ^t
. These may be instantiated with functional
types. A lifted abstract type has all the same restrictions as a
lifted type parameter.
Removed
-
The
rearrange
construct has been removed. Usetranspose
instead. -
futhark-mode.el
has been moved to a separate
repository. -
Removed
|>>
and<<|
. Use>->
and<-<
instead. -
The
empty
construct is no longer supported. Just use empty
array literals.
Changed
-
Imports of the basis library must now use an absolute path
(e.g./futlib/fft
, not simplyfutlib/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 justfuthark_
. -
zip
andunzip
are no longer language constructs, but library
functions, and work only on two arrays and pairs, respectively.
Use functionszipN/unzipN
(for2<=n<=8
).
Fixed
-
Better error message on EOF.
-
Fixed handling of
..
inimport
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 asf32.nan
,f32.inf
,
-f32.inf
, and similarly forf32
. Infuthark-test
, NaNs
compare equal.
0.5.2
Added
-
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.
Fixed
-
The index produced by
futhark-doc
now contains correct links. -
Windows linebreaks are now fully supported for test files (#558).
0.5.1
Added
-
Entry points need no longer be syntactically first-order.
-
Added overloaded numeric literals (#532). This means type
suffixes are rarely required. -
Binary and unary operators may now be bound in patterns by
enclosing them in parenthesis. -
futhark-doc
now produces much nicer documentation. Markdown is
now supported in documentation comments. -
/futlib/functional
now has operators>->
and<-<
for
function composition.<<|
are|>>
are deprecated. -
/futlib/segmented
now has asegmented_reduce
. -
Scans and reductions can now be horizontally fused.
-
futhark-bench
now supports multiple entry points, just like
futhark-test
. -
".." is now supported in
include
paths.
Removed
-
The
reshape
construct has been removed. Use the
flatten
/unflatten
functions instead. -
concat
androtate
no longer support the@
notation. Use
map
nests instead. -
Removed
-I
/--library
. These never worked with
futhark-test
/futhark-bench
anyway.
Changed
-
When defining a module type, a module of the same name is no
longer defined (#538). -
The
default
keyword is no longer supported. -
/futlib/merge_sort
and/futlib/radix_sort
now define
functions instead of modules.
Fixed
-
Better type inference for
rearrange
androtate
. -
import
path resolution is now much more robust.
0.4.1
Added
-
Unused-result elimination for reductions; particularly useful when
computing with dual numbers for automatic differentiation. -
Record field projection is now possible for variables of (then)
unknown types. A function parameter must still have an
unambiguous (complete) type by the time it finishes checking.
Fixed
-
Fixed interaction between type ascription and type inference (#529).
-
Fixed duplication when an entry point was also called as a function.
-
Futhark now compiles cleanly with GHC 8.4.1 (this is also the new default).
0.4.0
Added
-
The constructor for generated PyOpenCL classes now accepts a
command_queue
parameter (#480). -
Transposing small arrays is now much faster when using OpenCL
backend (#478). -
Infix operators can now be defined in prefix notation, e.g.:
let (+) (x: i32) (y: i32) = x - y
This permits them to have type- and shape parameters.
-
Comparison operators (<=, <, >, >=) are now valid for boolean
operands. -
Ordinary functions can be used as infix by enclosing them in
backticks, as in Haskell. They are left-associative and have
lowest priority. -
Numeric modules now have
largest
/smallest
values. -
Numeric modules now have
sum
,product
,maximum
, and
minimum
functions. -
Added
--Werror
command line option to compilers. -
Higher-order functions are now supported (#323).
-
Type inference is now supported, although with some limitations
around records, in-place updates, andunzip
. (#503) -
Added a range of higher-order utility functions to the prelude,
including (among others):val (|>) '^a '^b: a -> (a -> b) -> b val (<|) '^a '^b: (a -> b) -> a -> b val (|>>) '^a 'b '^c: (a -> b) -> (b -> c) -> a -> c val (<<|) '^a 'b '^c: (b -> c) -> (a -> b) a -> c
Changed
-
FUTHARK_VERSIONED_CODE
is nowFUTHARK_INCREMENTAL_FLATTENING
. -
The SOACs
map
,reduce
,filter
,partition
,scan
,
stream_red,
andstream_map
have been replaced with library
functions. -
The futlib/mss and futlib/lss modules have been rewritten to use
higher-order functions instead of modules.