This CHANGELOG describes the merged but unreleased changes. Please see CHANGELOG for changes to all previously released versions of Idris2. All new PRs should target this file (CHANGELOG_NEXT
).
-
The Nix flake's
buildIdris
function now returns a set withexecutable
andlibrary
attributes. These supersede the now-deprecatedbuild
andinstallLibrary
attributes.executable
is the same asbuild
andlibrary
is a function that takes an argument determining whether the library should be installed with sourcecode files or not; other than that,library
functionally replacesinstallLibrary
. -
The Nix flake's
buildIdris
executable
property (previouslybuild
) has been fixed in a few ways. It used to output a non-executable file for NodeJS builds (now the file has the executable bit set). It used to output the default Idris2 wrapper for Scheme builds which relies on utilities not guaranteed at runtime by the Nix derivation; now it rewraps the output to only depend on the directory containing Idris2's runtime support library. -
The Nix flake now exposes the Idris2 API package as
idris2Api
and Idris2's C support library assupport
.
-
Autobind and Typebind modifier on operators allow the user to customise the syntax of operator to look more like a binder. See #3113.
-
Fixity declarations without an export modifier now emit a warning in peparation for a future version where they will become private by default.
-
Elaborator scripts were made to be able to access the visibility modifier of a definition, via
getVis
.
-
The compiler now differentiates between "package search path" and "package directories." Previously both were combined (as seen in the
idris2 --paths
output for "Package Directories"). Now entries in the search path will be printed under an "Package Search Paths" entry and package directories will continue to be printed under "Package Directories." TheIDRIS2_PACKAGE_PATH
environment variable adds to the "Package Search Paths." Functionally this is not a breaking change. -
The compiler now supports
impossible
in a non-case lambda. You can now write\ Refl impossible
. -
The compiler now parses
~x.fun
as unquotingx
rather thanx.fun
and~(f 5).fun
as unquoting(f 5)
rather than(f 5).fun
.
-
Compiler can emit precise reference counting instructions where a reference is dropped as soon as possible. This allows you to reuse unique variables and optimize memory consumption.
-
Fix invalid memory read onf strSubStr.
-
Fix memory leaks of IORef. Now that IORef holds values by itself, global_IORef_Storage is no longer needed.
-
Pattern matching generates simpler code. This reduces malloc/free and memory consumption. It also makes debugging easier.
-
Stopped useless string copying in the constructor to save memory. Also, name generation was stopped for constructors that have tags.
-
Special constructors such as Nil and Nothing were eliminated and assigned to NULL.
-
Unbox Bits32,Bits16,Bits8,Int32,Int16,Int8. These types are now packed into Value*. Now, RefC backend requires at least 32 bits for pointers. 16-bit CPUs are no longer supported. And we expect the address returned by malloc to be aligned with at least 32 bits. Otherwise it cause a runtime error.
-
Rename C function to avoid confliction. But only a part.
-
Supress code generation of _arglist wrappers to reduce code size and compilation time.
-
Removed Value_Arglist to reduce Closure's allocation overhead and make code simply.
-
Switch calling conventions based on the number of arguments to avoid limits on the number of arguments and to reduce stack usage.
- The NodeJS executable output to
build/exec/
now has its executable bit set. That file already had a NodeJS shebang at the top, so now it is fully ready to go after compilation.
-
Data.List.Lazy
was moved fromcontrib
tobase
. -
Added an
Interpolation
implementation for primitive decimal numeric types andNat
. -
Added append
(++)
forList
version ofAll
. -
Moved helpers and theorems from contrib's
Data.HVect
into base'sData.Vect.Quantifiers.All
namespace. Some functions were renamed and some already existed. Others had quantity changes -- in short, there were some breaking changes here in addition to removing the respective functions from contrib. If you hit a breaking change, please take a look at the PR and determine if you simply need to update a function name or if your use-case requires additional code changes in the base library. If it's the latter, open a bug ticket or start a discussion on the Idris Discord to determine the best path forward. -
Deprecate
bufferData
in favor ofbufferData'
. These functions are the same with the exception of the latter dealing inBits8
which is more correct thanInt
. -
Added an alternative
TTImp
traversal functionmapATTImp'
taking the originalTTImp
at the input along with already traversed one. ExistingmapATTImp
is implemented through the newly added one. The similar alternative formapMTTImp
is added too. -
Removed need for the runtime value of the implicit argument in
succNotLTEpred
. -
Added
funExt0
andfunExt1
, functions analogous tofunExt
but for functions with quantities 0 and 1 respectively.
-
Data.List.Lazy
was moved fromcontrib
tobase
. -
Existing
System.Console.GetOpt
was extended to support errors during options parsing in a backward-compatible way. -
Moved helpers from
Data.HVect
to base library'sData.Vect.Quantifiers.All
and removedData.HVect
from contrib. See the additional notes in the CHANGELOG under theLibrary changes
/Base
section above.
- Add a missing function parameter (the flag) in the C implementation of idrnet_recv_bytes