Releases: purerl/purerl
0.0.22
0.0.21
Limit inlining by a heuristic.
Inlining is performed because of hoisting of synthesised applications (i.e. typeclass dictionaries) frustrating rewrites in the optimisation phase. Sometimes this was triggering on some very large definitions leading to an explosion in code size.
v0.0.20
CI bump stack v
v0.0.19
v0.0.18
Note this release mis-reports its version as 0.0.17
v0.0.17
Updates for PureScript 0.15.3 compatibility
-
Updating to PureScript 0.15.3 library & new GHC version
-
Memoization annotations together with PureScript change to float synthetic function applications (purescript/purescript#3915) and the optimiser parse transform (https://github.com/id3as/purerl-optimiser/) should provide a performance improvement
-
Implement PureScript lazy runtime
This concerns changes made in PureScript 0.15.0 (https://github.com/purescript/purescript/releases/tag/v0.15.0), details of which can be found in PureScript release notes. The existing erlang implementation would have behaved differently with no changes, rather than observing an
undefined
equivalent we would see infinite recursion in cases where there is a bad runtime reference in a recursive binding group; this change means that as in the JS backend, an exception is thrown in this case. The laziness transform referenced in the PureScript release notes is used here, so this overhead is not incurred most of the time.
v0.0.16
What's Changed
-
Comment out -file lines to get erlang stack traces by @drathier in #25
-
Fix nested do blocks with shadowed identifiers #26
-
Fix pattern match codegen for arrays nested under records, and multiple levels of nested arrays #28
-
Generate type annotations correctly for foreign imports where the implementation is (at least partly) curried
Full Changelog: v0.0.15...v0.0.16
Quash pedantic output check
The output check for stale modules has been converted to a warning, files in output/
whose corresponding sources are not found will now be ignored with a warning. This should mean that deleting modules, switching branches without nuking output will not halt builds, and should still give correct results (because those stale modules were not used anyway).
v0.0.14
This release now builds against PureScript 0.14.5.
In addition, there are
Changes which should improve build times:
- Don't generate both curried and uncurried copies of function bodies, pick one
- The same uncurried overloads will be generated, but instead when generating
foo/0
andfoo/3
one will call the other
- The same uncurried overloads will be generated, but instead when generating
- Don't emit functions that aren't used or exported
- New rebuild policy
- Rebuild if one of the build inputs (corefn, externs, ffi) have changed
- As in purs, first the timestamp is checked and if it differs, the hash is then checked
- This means if purs touches some files because the source changed, but the output does not change,
no rebuild and no change in the generated erlang (saving erlang rebuild time)
- Specifically not checking if the output (.erl/.hrl files) is up to date, if you clean the output
but not the 'purs' output for some reason, remove the cache file in output/ - If a source file is removed but the module remains in output/, purerl will complain
and exit, even though purs will ignore the extra modules. The input to purerl is the entire
set of available modules in output/ (whereas purs gets inputs specified on command line), therefore
invalid modules must be rejected.
- Rebuild if one of the build inputs (corefn, externs, ffi) have changed
- Precompute some environment-dependent values to avoid doing them on every module
Changes which should improve execution times:
- Rewrite list ops, literals, rewrite $/# pre codegen
- Literals [], #{}, unit
- Rewrite list cons to [|], concatenation to ++, null check
- Collect literal cons chains to list literal [,,...] or single cons expression [,...|_]
- Remove $/# pre codegen to enable function application/arity to work out better
- Over-saturated function applications now use uncurried version
- Inline some more arithmetic/logic operators on basic types
- Inline unsafeCoerce, coerce, Newtype unwrap/wrap/over(2)
- Inline float/1, min/2, max/2
- Inline maybe, maybe', fromMaybe, either, fromLeft, fromRight
- Inline tupleN constructors from Erl.Data.Tuple
- "Magic-Do" improvements for
Effect
code
v0.0.13
- Set utf8 encoding for repl
- Fix build issues when FFI source location changes
- This would typically mean build errors when updating dependencies in eg
spago
which have FFI-related changes
- This would typically mean build errors when updating dependencies in eg
- Speed up builds that have to do nothing