Skip to content

Releases: purerl/purerl

0.0.22

04 Jan 10:51
ae1aad5
Compare
Choose a tag to compare
Merge pull request #38 from MonoidMusician/purs-15-14

Update for purs 0.15.14

0.0.21

09 Aug 08:04
Compare
Choose a tag to compare

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

28 Jun 15:05
Compare
Choose a tag to compare
CI bump stack v

v0.0.19

03 Jan 16:17
Compare
Choose a tag to compare

What's Changed

New Contributors

  • @jgarte made their first contribution in #31
  • @f-f made their first contribution in #32

Full Changelog: v0.0.18...v0.0.19

v0.0.18

06 Oct 10:22
399bbae
Compare
Choose a tag to compare

Note this release mis-reports its version as 0.0.17

v0.0.17

28 Jun 16:13
Compare
Choose a tag to compare

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

07 Jun 16:31
Compare
Choose a tag to compare

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

11 Feb 09:22
Compare
Choose a tag to compare

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

22 Nov 16:15
Compare
Choose a tag to compare

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 and foo/3 one will call the other
  • 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.
  • 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

06 Oct 10:31
Compare
Choose a tag to compare
  • 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
  • Speed up builds that have to do nothing